Rails Rails 系统间的跨进程通信用什么好,我研究了一下 Thrift,avro 和 Google Protocol Buffer,大家有什么好的建议?

fxllong262553 · 2013年05月19日 · 最后由 fsword 回复于 2013年05月20日 · 10305 次阅读

Rails 系统间的远程程通信用什么好,我研究了一下 thrift,avro 和 Google ProtocolBuffer,thrift 我用最新的 thrift0.9.0,但官方的 ruby 例子没跑起来,网上查了一下,好像是跟 ruby 的版本有关,另外两个框架我都测试成功了,google 的好像比较简单一些,文档也还可以,但是性能上好像没那么好,不知道大家有没有好的建议。

没有深入过,用过 thrift 和 protobuf,简单 json 就好了嘛,不用事先定义结构; thrift 和 protobuf 性能应该还好,除非要求很特殊苛刻。 protobuf 确实简单方便, thrift 自带服务和通讯协议,适合直接部署应用,不用挂其它服务上面。以前公司研究院所有开发接口统一用 thrift,不过用 ruby 的话涉及到的保留词比较多。别人用其它语言好好的,你用 ruby 去接就发现有些保留词有冲突,要提前沟通好。

同为 rails 的话,直接就是 rest 的 json 调用比较简单。除非对性能和并发有比较高的要求。异构系统用 thrift,protocl buffer 比较好实现。

感谢,我也是排除了 avro,这个是 Hadoop 的外围项目,看官网说性能能还是挺不错的,但是好像还不是很成熟,支持的语言也少,文档也不是很多啊,我想就在 thrift 和 protobuf 中选择一个 ,thrift 好像感觉比较重量级,这种系统之间通信的数据量比较大的话,不知道 protobuf 能不能赶上 thrift,thrift 支持的语言好像多一些,protobuf 官方只支持 c++/java/python,但是其他的语言的对应的好像也都有一些第三方的库

同为 rails 通讯的话,应该用activeresource吧?(我只是知道有这个 gem,rails 3 是内置的,rails 4 抽取出来了。)

MessagePack?

如果机器都在你管辖下,可以用 0mq

如果是异系统的机器,就用 rest + json 好了

thrift 如果你不用 cassandra 就不要用了... protobuf 编译都很难...

二进制协议的话可以考虑 bson

选择困难?服务化的重点是做好系统间接口约定,并且后续落实向下兼容的研发纪律,具体用什么通信协议绝对不是重点,一开始用 http 也没问题,甚至不够 REST 也无妨。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号