У нас есть облачные (RackSpace cloud) приложения Ruby и Java, которые будут взаимодействовать следующим образом:
- Приложение Ruby отправляет запрос в приложение Java. Запрос состоит из структуры карты, содержащей строки, целые числа, другие карты и списки (аналогичные JSON).
- Java-приложение анализирует данные и отправляет ответ в приложение Ruby.
Мы заинтересованы в оценке как форматов обмена сообщениями (JSON, Буферные протоколы, Thrift и т.д.), а также каналы/методы передачи сообщений (сокеты, очереди сообщений, RPC, REST, SOAP и т.д.)
Наши критерии:
- Короткое время прохождения в оба конца.
- Стандартное отклонение с минимальным временем прохождения в оба конца. (Мы понимаем, что паузы в сборке мусора и всплески использования сети могут повлиять на это значение).
- Высокая доступность.
- Масштабируемость (мы можем захотеть, чтобы в будущем несколько экземпляров приложения Ruby и Java заменяли сообщения "точка-точка" ).
- Простота отладки и профилирования.
- Хорошая документация и поддержка сообщества.
- Бонусные баллы для поддержки Clojure.
- Хорошая поддержка динамического языка.
Какую комбинацию формата сообщения и метода передачи вы бы порекомендовали? Почему?
Я собрал здесь некоторые материалы, которые мы уже собрали для обзора:
- Сравнение различных параметров сериализации java
- Сравнение буферов Thrift и протоколов (старый)
- Сравнение различных форматов обмена данными
- Сравнение суточных и протокольных буферов
- Ошибки протокольных буферов Возможности RPC
- Обсуждение RPC в контексте AMQP (Message-Queuing)
- Сравнение RPC и передачи сообщений в распределенных системах (pdf)
- Критика RPC с точки зрения вентилятора передачи сообщений
- Обзор Avro с точки зрения программиста Ruby
- Обзор Thrift с точки зрения программиста Ruby
- Обзор Thrift с точки зрения программиста Java
- Введение в MessagePack
- Введение в BERT энтузиастами динамического языка
- Заметки об оценке очереди сообщений
- ZeroMQ и Clojure