【发布时间】:2011-05-27 07:00:00
【问题描述】:
我们有云托管(RackSpace 云)Ruby 和 Java 应用程序,它们的交互方式如下:
- Ruby 应用程序向 Java 应用程序发送请求。请求由包含字符串、整数、其他映射和列表(类似于 JSON)的映射结构组成。
- Java 应用分析数据并向 Ruby 应用发送回复。
我们有兴趣评估两种消息格式(JSON、Buffer Protocols、Thrift 等)以及消息传输通道/技术(套接字、消息队列、RPC、REST、SOAP 等)
我们的标准:
- 往返时间短。
- 低往返时间标准偏差。 (我们知道垃圾收集暂停和网络使用高峰会影响此值)。
- 高可用性。
- 可扩展性(我们可能希望将来有多个 Ruby 和 Java 应用程序实例交换点对点消息)。
- 易于调试和分析。
- 良好的文档和社区支持。
- Clojure 支持的奖励积分。
- 良好的动态语言支持。
您会推荐哪种消息格式和传输方式的组合?为什么?
我在这里收集了一些我们已经收集的材料以供审查:
- 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
【问题讨论】:
-
你真的想要可靠性吗(从标题)?在您正在谈论的消息传递类的上下文中,这意味着消息永远不会丢失(并且可能还按照发送顺序传递),这是非常昂贵的。当然,这里的可靠性是指能够抵抗反铲攻击(即网络或电力基础设施的物理破坏)。我更喜欢及时交付并使应用程序能够抵抗故障,因为这更容易......
-
您好,我们想要相当好的可靠性并且不关心按订单交付。我们的系统可以容忍偶尔的故障,但保持相当低的故障率很重要。
标签: java ruby clojure messaging network-protocols