Mamy chmurze gospodarzem (Rackspace Chmura) Ruby i Java aplikacje, które oddziałują w sposób następujący:Najszybsza niezawodny sposób na Clojure (Java) i Ruby aplikacje do komunikowania
- Ruby aplikacja wysyła żądanie do aplikacji Java. Żądanie składa się ze struktury mapy zawierającej ciągi, liczby całkowite, inne mapy i listy (analogiczne do JSON).
- Aplikacja Java analizuje dane i wysyła odpowiedź do aplikacji Ruby.
Jesteśmy zainteresowani w ocenie oba formaty wiadomości (JSON, Buffer Protocols, Thrift, itd.), Jak również kanałów transmisji wiadomości/technik (rurkowe, kolejki komunikatów, RPC, REST, SOAP, etc.)
Nasze kryteria:
- Krótki czas podróży w obie strony.
- Niskie odchylenie standardowe w czasie krótkiego cyklu. (Rozumiemy, że wstrzymanie zbierania śmieci i wzrost wykorzystania sieci może wpłynąć na tę wartość).
- Wysoka dostępność.
- Skalowalność (możemy chcieć mieć wiele instancji aplikacji Ruby i Java wymieniających wiadomości typu punkt-punkt w przyszłości).
- Łatwość debugowania i profilowania.
- Dobra dokumentacja i wsparcie społeczności.
- Punkty premiowe za wsparcie Clojure.
- Dobra obsługa dynamicznego języka.
Jaką kombinację formatu wiadomości i metody transmisji poleciłbyś? Czemu?
Mam tu pewne materiały zebrane już zebrane na test:
- Comparison of various java serialization options
- Comparison of Thrift and Protocol Buffers (old)
- Comparison of various data interchange formats
- Comparison of Thrift and Protocol Buffers
- Fallacies of Protocol Buffers RPC features
- Discussion of RPC in the context of AMQP (Message-Queueing)
- Comparison of RPC and message-passing in distributed systems (pdf)
- Criticism of RPC from perspective of message-passing fan
- Overview of Avro from Ruby programmer perspective
- Overview of Thrift from Ruby programmer perspective
- Overview of Thrift from Java programmer perspective
- Introduction to MessagePack
- Introduction to BERT by dynamic language enthusiast
- Message Queue Evaluation Notes
- ZeroMQ and Clojure
Naprawdę chcesz niezawodność (z tytułu)? W kontekście klasy wiadomości, o której mówisz, oznacza to, że wiadomości nigdy się nie gubią (i być może również, że są dostarczane w kolejności, w jakiej zostały wysłane), co jest * bardzo * drogie. Oczywiście niezawodność odnosi się tutaj do odporności na takie rzeczy, jak atak z wykorzystaniem broni koparkowej (np. Fizyczne zniszczenie sieci lub infrastruktury energetycznej). Najczęściej wolę mieć terminową dostawę i sprawić, że aplikacje będą odporne na awarie, ponieważ jest to o wiele łatwiejsze ... –
Witaj, chcemy rozsądnie dobrej niezawodności i nie dbają o dostawę w kolejności. Nasz system może tolerować okazjonalne awarie, chociaż utrzymanie wskaźnika awarii jest bardzo niskie. – jkndrkn