DDIA 笔记4 Thrift, Protocol Buffer, gRPC

这三个词在程序员的生活中出现频率是极其之高,13年实习的时候就知道可以用Thrift和Protocol buffer,当时也简单了解了下PB的编码原理,当时也不是不求甚解,能用就行,所以有的概念也模模糊糊。现在来稍微全面掉了解这些个东西,即使不到技术深处,也能做到技术选型的正确性。

容易混淆的概念

我以前只关注了Thrift和PB的序列化和反序列化,就会有种错觉,Thrift就是一个序列化的协议。可实际上不是。
Thrift = 序列化/反序列化 + RPC协议(client/server也生成了)
PB = 单纯的序列化/反序列化
gRPC = 以PB为基础的序列化/反序列化 + RPC协议(client/server也生成了)

比较Thrift序列化与PB

书里的内容就是这样,图文并茂,清楚明了,不再废话。
Schema evolution in Avro, Protocol Buffers and Thrift

其中书中其他方面没有怎么谈到。

  1. 从图中解析来看field的个数只能定在16个,但是这肯定不是,几千个也可以。尽管没有查到资料,但是用那个变长的机制很容易实现这个。
  2. 文中没有提到msg的大小问题。thrift就没有提到这个大小的限制。PB强制限制在2GB,默认64MB。个人理解来说。一个message传这么大的,有点过分了吧。stackoverflow上的讨论
  3. 语言支持问题:pb目前官方支持7个,第三方支持其他的。thrift官方支持的数不过来
  4. 性能比较。PB在性能和大小方面都较好于Thrift。这是16年的比较。发现其他很多lib提供更好的性能和大小。但是问题是grpc支持pb,thrift支持自己的。单纯论那上面的性能,的确其他有有时,但是在应用方面,这两个还是比较主流。
    5.一些其他的讨论,支持的数据类型都差不多等等

Thrift的RPC和gRPC

待续

你可能感兴趣的:(DDIA 笔记4 Thrift, Protocol Buffer, gRPC)