Thrift优缺点讨论

比如:

1. Thrift主要的特点是不是跨语言?

2. Facebook有很多跨语言调用的场景么?为什么要开发Thrift这个东东?

3. 下载国内外各大互联网公司针对Thrift应用规模如何?一般都是在什么场景下应用?

4. Thrift优缺点?

所以专门开这篇博文,随着时间推移遇到的较好的关于Thrift的观点和想法都记录在这里!!!

===========================================================================================================


著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:徐文浩
链接:http://www.zhihu.com/question/20189791/answer/43563283
来源:知乎

目前公司主要的序列化,RPC服务都基于Thrift,包括内部的广告投放引擎,数据处理系统,其实和Web相关的部分不多,只有少量的Web前端的服务调用调用后端的Thrift RPC服务,更多的RPC还是广告投放引擎和后端数据策略模块之间的互相通信。

Thrift的好处主要是以下几点
1. One-stop shop,相对于protobuf,序列化和RPC支持一站式解决,如果是pb的话,还需要考虑选择RPC框架,现在Google是开源了gRpc,但是几年以前是没有第一方的标准解决方案的
2. 特性丰富,idl层面支持map,protobuf应该是最近才支持的,map的key支持任意类型,avro只支持string,序列化支持自定义protocol, rpc支持thread pool, hsha, no blocking 多种形式,必有一款适合你,对于多语言的支持也非常丰富
3. RPC和序列化性能都不错,这个到处都有benchmark,并不是性能最好的,但是基本上不会成为瓶颈或者短板
4. 有很多开源项目的周边支持都是thrift的,hbase提供thrift服务,hive,spark sql,cassandra等一系列对外的标准服务接口都是thrift的以支持多语言。
5. Column Storage的话,parquet支持直接通过thrift idl转换,如果在Hadoop集群上存储数据,elephant-bird 支持得很好,你可以很方便地针对thrift的数据通过pig写dsl,如果你希望在rpc服务外做一系列工作,可以用finagle包装一层。不过,这部分对于protobuf和avro支持一般也不错

对于早中期的互联网公司,从山寨版走向"Everything is a service"的方案,thrift是一个很好的,开箱即用的一站式解决方案,不需要自行做改造或者适配,性能也很优秀,没有太多摸索和踩坑的成本。

缺点么,和其他facebook开源的项目都有类似的问题,只管拉不管擦
1. 基本没有官方文档,使用参考可以看看有人专门写的这个 Thrift: The Missing Guide
2. RPC在 0.6.1 升级到 0.7.0 是不兼容的!这个对于早于 0.6.1 开始使用的用户来说是个大坑
3. bug fix和更新不积极,好在序列化和RPC服务都不是太复杂的问题,需要考量的设计问题不多,自己维护patch的成本不高,如果我没有记错的话,0.6.1的java的ThreadPool Server是会有Thread死亡之后的Thread泄露问题的
4. Facebook今年说,我们开源了一个新的performance更好的 fbthrift,你说你该用apache thrift还是fbthrift呢?
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值