【问题标题】:Why Thrift, Why not HTTP RPC(JSON+gzip)为什么选择 Thrift,为什么不使用 HTTP RPC(JSON+gzip)
【发布时间】:2012-04-01 16:59:11
【问题描述】:

Thrift 的主要目标是实现跨编程语言的高效可靠通信。但我认为 HTTP-RPC 也可以做到这一点,Web 开发人员几乎每个人都知道如何在 http 上工作,而且 HTTP-RPC(json) 比 Thrift 更容易实现,

也许 Thrift-RPC 更快,那么谁能告诉我它们之间的性能差异?

【问题讨论】:

    标签: json thrift


    【解决方案1】:

    速度以外的几个原因:

    1. Thrift 完全生成客户端和服务器代码,包括您传递的数据结构,因此您无需处理任何事情,只需编写处理程序和调用客户端。包括参数和返回在内的所有内容都会自动验证和解析。这样您就可以免费获得对数据的完整性检查。

    2. Thrift 比 HTTP 更紧凑,可以轻松扩展以支持加密、压缩、非阻塞 IO 等功能。

    3. 如果您愿意,可以很容易地将 Thrift 设置为使用 HTTP 和 JSON(例如,如果您的客户端位于 Internet 上的某个地方并且需要通过防火墙)

    4. Thrift 支持持久连接并避免 HTTP 引起的连续 TCP 和 HTTP 握手。

    就我个人而言,当我需要来自外部的连接时,我会在内部 LAN RPC 和 HTTP 上使用 thrift。

    我希望这一切对你有意义。你可以在这里阅读我关于节俭的介绍:

    http://www.slideshare.net/dvirsky/introduction-to-thrift

    它有链接到其他一些节俭的替代品。

    【讨论】:

    • 很好的答案 Dvir!我也很喜欢 Thrift 并且在大多数情况下更喜欢它。最大的困难是安装 Thrift 编译器,但一旦完成并结合适当的 maven 插件,您就可以开始了。所需的紧凑的服务器/客户端代码非常性感!
    • @JacoVanNiekerk 谢谢,我已经编译了很多次thrift 对我来说似乎微不足道:)。在我看来,最大的缺点是 python 服务器不能很好地与 thrift 配合使用,因为 GIL 的限制(实际上,thrift 中的一个 python 服务器是我所做的一个贡献,它试图解决这个问题)。但对于 C++ 或 Java 来说,这简直太棒了。
    • 大多数 HTTP 客户端也支持 keep-alives :)
    • 没有。 4 可以通过使用所有 HTTP 客户端都支持的 keep-alive 轻松缓解。也可以 POST 二进制文件(尽管它不是 RESTful),这将有助于紧凑的线上传输。
    【解决方案2】:

    这里是不同序列化程序性能比较的好资源:https://github.com/eishay/jvm-serializers/wiki/

    特别谈到 Thrift 与 JSON:Thrift 的性能可与最好的 JSON 库(jackson、protostuff)相媲美,并且序列化大小略低。

    IMO,最大的节俭优势是方便的可互操作的 RPC 调用和二进制数据的方便处理。

    【讨论】:

      猜你喜欢
      • 2014-01-06
      • 2015-05-13
      • 1970-01-01
      • 2012-10-06
      • 2016-06-02
      • 1970-01-01
      • 2023-03-20
      • 2017-08-09
      • 2012-07-02
      相关资源
      最近更新 更多