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