结合上一篇的内容,Thrift简介,继续对thrift做一个完整的介绍。
模块化和序列化
要从客户端到服务器进行函数调用,客户端和服务器都必须同意数据交换的表示形式。于是,解决此问题的典型方法是选择一种交换格式,然后将所有要交换的数据转换为该交换格式。
数据往返交换的过程格式称为序列化。本质上,将复杂的存储对象转换为串行的字节流。
如下图所示:
Apache Thrift序列化框架的一个相当独特的功能是它并不绑定单个序列化协议。 Apache Thrift提供的序列化层是模块化的,可以从各种序列化协议中选择,甚至可以创建自定义序列化协议。开箱即用的Apache Thrift支持高效
二进制序列化协议,这是一种紧凑的协议,可减少序列化对象的大小。
性能
Apache Thrift非常适合许多分布式计算设置,同时在高性能后端服务方面表现也很出色。
Apache Thrift框架提供了一系列用于序列化的预构建和自定义协议。这使得应用程序设计人员可以根据应用程序的性能需求选择最合适的序列化协议。
Apache Thrift RPC服务器是轻量级的,仅执行托管Apache Thrift服务的任务。提供多种语言的服务器选择,使应用程序设计人员可以灵活地选择最适合其应用程序需求的并发模型。
如上图所示,Apache Thrift的轻量级性质及其有效的序列化协议的选择使Apache Thrift可以满足一系列性能要求,同时兼顾了性能和交互的部分。同时为多种语言和平台提供了支持。
跨平台
Apache Thrift还支持多种平台,包括Windows,iOS,OS X,Linux,Android和许多其他类似Unix的系统。
接口演变和CI&CD
接口演变是指随着时间的推移逐步更改接口元素,而不会破坏与旧版本接口构建的模块的互操作性的过程。
例如,假设有一个C程序,它在每次执行时将以C语言结构捕获的数据写入磁盘。假设写入字段包含日期,时间,位置和级别的字段。接下来,假设struct字段是C程序与Ruby数据分析程序共享的Apache Thrift IDL接口的一部分。Apache Thrift的界面演化功能允许在不破坏Ruby应用程序的情况下将新字段添加到结构中。Ruby程序将继续读取旧的和新的文件,只需忽略新字段即可。如果Ruby方面的程序员对新字段感兴趣,他们可以在需要时添加对他们的支持。
Apache Thrift之类的现代RPC系统提供了许多功能,这些功能允许接口随着时间的推移而改进,不会破坏与现有系统的兼容性。可以使用新参数扩展功能,可以删除旧参数,并提供默认值。可以正确应用这些更改,而不会影响使用旧版接口的系统。
持续集成(CI)和持续交付(CD)
持续集成是一种软件开发方法,其中,对系统的更改经常合并到中央代码库中。这些更改通常由自动化系统连续构建和测试,从而在补丁程序产生冲突或失败的测试时为开发人员提供快速反馈。要使CI成为逻辑上的结论,就需要将成功合并的代码高频迁移到评估和最终生产系统。这些过程通常每天发生多次。
持续集成和交付系统的目标是承担许多小风险并提供即时反馈,而不是承担大风险并延迟较长发布周期的反馈。集成延迟时间越长,集成任务中涉及的补丁越多,这使得识别和修复冲突和错误的根源变得更加困难。
Apache Thrift对接口演变的支持则大大简化了正在进行的软件维护和扩展的任务,尤其是在大型企业中。诸如持续集成(CI)和持续交付(CD)之类的现代工程技术要求系统支持增量改进。
不提供某种形式的接口演变的系统在更改时往往会付出比较大的代价,即更改接口通常意味着必须重写或至少重新编译使用该接口的所有客户端和服务器。而Apache Thrift接口演变功能允许多个接口版本共存,使增量更新变得可行。
以上便是thrift的完整介绍,欢迎交流~