On 18/04/14 20:09, Cerem Cem ASLAN wrote:

spyne iddalı görünüyor. Burada Pyro kullandığıma bakmayın, esas projede RabbitMQ+pickle kullanarak kendim bir mesajlaşma mekanizması kurdum. ZeroRPC de denedim, msgpack her sınıfı string'e çeviremiyor diye işimi görmedi, kullanamadım.

Hadi size bir "Python ile RPC tarihcesi" yazayim, maca daha var nasilsa :)

WSDL/SOAP 1.1 ikilisi CORBA ile karsilastirildiginda az biraz biraz calisan bir rpc protokoluydu. Ben de 2009 senesinde bu prokole elimi verdim, kolumu kaptirdim, ama sonra kurtarmayi basardim :)

Ilk basta python icin sifirdan Xml Schema 1.0, Wsdl 1.1 ve Soap 1.1 speclerinin calisan bir altkumesini implement ettim. Proje once Soaplib olarak basladi, sonra Rpclib olarak devam etti, sonra baktim rpclib berbat bir isim, adini son kez Spyne olarak degistirdim.

Wsdl/Soap rpc acisindan kotu bir fikir olsa da, bunlarin temelinde yatan Xml Schema standardi gayet basarili bir "document validation framework". Bunu gorunce, spyne'daki Soap/Wsdl apisini diger protokolleri kapsayacak sekilde genellestirdim. Boylece MessagePack, Json ve Yaml gibi formatlardaki dokumanlari 1) hem Xml Schema formatindaki bir dokuman tanimiyla validate edebilir olduk 2) hem de Xml Schema'nin destekledigi butun veri yapilarini destekletir olduk. Yani Spyne yapitaslariyla tanimlanmis her veri yapisini MessagePack ile kullanabilirsiniz, orjinal serializer'in eksiklerini ilgili standartlari dahil ederek kapattim. Orn. MessagePack veya Json icin datetime nesnesini ISO 8601 ile stringe ceviriyorum.

Ben bunlarla ugrasirken *MQ'lar patladi. Son bir kac senedir izlemiyorum ama, RabbitMQ dedigimiz proje AMQP 0.9 denen mesajlasma standardinin erlang ile implement edilmis hali. Herhalde bu zaman kadar 1.0'i da implement etmislerdir.

AMQP, iMatix isimli Belcikali bir yazilim firmasinin icat ettigi, daha sonra OASIS standardi olmus bir mesajlasma protokolu.

iMatix, AMQP 1.0 i yayinladiktan sonra (veya hemen once, tam bilemedim simdi) AMQP grubuna "AMQP ve etrafindaki teknolojilerden bir cacik olmayacagini farkettigimiz icin biz AMQP projesinden cekiliyoruz. 280 sayfalik RPC protokol standardi olmaz, biz ZeroMQ ile yolumuza devam edecegiz" minvalinde bir mail atti.

ZeroMQ iste boyle dogdu. Aman allahim ne olay kopardi, of ne buyuk bir icatti. Ben de hemen olaya baliklama atladim tabii ve Spyne icin bir ZeroMQ transport implement ettim (Yani ZeroRPC'nin yaptiginin aynisini Spyne'in su konfigurasyonuyla yapabilirsiniz = http://spyne.io/#inprot=MessagePackDocument&outprot=MessagePackDocument&s=rpc&tpt=ZeroMQServer&validator=true)

Sonra ortaya cikti ki, ZeroMQ pub/sub icin tamam ama rpc icin cok sakat bir cozum. Sebebi de target hostun ulasilamaz durumda oldugunu (zmq icinden) anlamanin bir yolu yok. (https://news.ycombinator.com/item?id=6089252) Bir de ZeroMQ 2.0.x veya 2.1.x'i uzaktan yanlis bir paket gonderip assertion error'a dusurebiliyordunuz zamaninda, herhalde duzeltmislerdir.

ZeroMQ'nun asil gelistiricisi olan Martin Sustrik adli kisi bir sure sonra ZeroMQ'nun gelecegi hakkinda firma sahibi Pieter Hintjens adli kisiyle anlasamayip iMatix'ten ayrildi ve CrossRoads (libxs)'e basladi. Kendisi blogunda bu sureci, ZeroMQ'nun eksiklerini vs. uzun uzun anlatmis, ilgilenen okuyabilir. libxs'ten bir cacik olmadi.

Yaraticisi tarafindan cope atilan bir standart uzerine kurulmus RabbitMQ ve kuzenleri ise yollarina devam ediyorlar. RabbitMQ (ve su Enterprise Message Bus adiyla anilan benzer cozumler) ozunde uc is yapiyor: Discovery, Serialization ve (Persistent) Queuing. iMatix AMQP'yi cope atarken diyordu ki, serialization ve persistence uygulamanin, discovery de DNS'in isi, biz sadece kuyruk yonetimini uzerimize alalim, cunku diger konularda zaten coktan cozulmus durumda.

Burada bu aciklamanin detayini okuyabilirsiniz: http://zeromq.org/whitepapers:brokerless

Bu anlayisla da message queue bir daemon olmaktan cikti ve bir library oldu. Boylece de ZeroMQ dogmus oldu.

*MQ'lar da boyle. Pickle'a gelirsek, pickle'i RPC protokolu olarak fazla ciddiye almamak lazim, hem yavas hem de guvenli degil. Bana inanmiyorsaniz Youtube'un kurucularindan mike solomon'un pycon 2012 konusmasini izleyebilirsiniz :) (Biliyorsunuz youtube'u Python ile yazmislar)

Bunlar disinda bir de thrift/protocol buffers var. Ayni insan Google'da calisirken ProtoBuf'u yaziyor, sonra Facebook'a gecince bastan biraz daha genisleterek Thrift'i yaziyor. Ben MessagePack ile mutlu oldugumdan bunlara hic el atmadim, mutlaka daha iyi ve daha kotu oldugu noktalar vardir.

Benim tavsiyem http ile json veya msgpack kullanmaniz. Spyne kullanmaniz sart degil ama kullanirsaniz validation, formatlar arasi donusum vb. isler bedavaya gelir.


Bu arada ani bir gelişme ile zaman konusu biraz daha yayıldı, o yüzden önerilere (eleştirilere) de açığım. Mesela biraz thread cehennemine döndü ortalık, her önüne gelen bi thread açıyor. O biraz sıkıntı yaratıyor. Niyeyse multiprocessing'e hiç el atmadım (threading kolayıma geldi, öyle diyeyim). Özellikle bu konuda da önerilere açığım.

Python 2 ile Twisted, 3 ile asyncio kullanin. Python ile thread kullanmanin alemi yok, process kullanmak da 1) fazla memory kullaniyor 2) ipc ile ugrastiriyor.

Umarim bu yazdiklarim isinize yarar :) Biraz daginik oldu kusura bakmayin.

Selamlar,
Burak
_______________________________________________
Linux-sohbet mailing list
[email protected]
https://liste.linux.org.tr/mailman/listinfo/linux-sohbet
Liste kurallari: http://liste.linux.org.tr/kurallar.php

Cevap