近来thrift相关的内容目前涉及的比较多一些,来进行一个学习和整理记录。
简介
Apache Thrift是一个开源,跨语言序列化和远程过程调用(RPC)框架。通过支持20多种编程语言,Apache Thrift在许多分布式应用程序解决方案中可以发挥重要作用。作为序列化平台,它可以有效地进行跨语言存储和检索各种数据结构。作为RPC框架,Apache Thrift仅需几行代码就可以快速开发完整的跨语言服务。
目前先主要关注以下几点作用:
•Apache Thrift如何支持多语言系统开发
•Apache Thrift如何简化网络服务的创建
•Apache Thrift模块化序列化系统
•如何创建一个简单的Apache Thrift多语言应用程序
为何Thrift会比较受欢迎,主要还是基于目前越来越多的多语言策略:掌握编程语言并非易事,更不用说它随附的工具和支持库。将多种语言引入产品计划可能会带来与跨语言集成,开发人员培训以及构建和测试复杂性相关的大量成本。如果管理不当,随着每种新语言的负担成倍增加,公司的收益可能会减少。
优势:
Apache Thrift解决了与构建跨语言边界协作的应用程序相关的许多问题。
除了规范化数据以进行跨语言通信外,Apache Thrift还提供了一个完整的远程处理框架,使构建跨语言网络服务变得比较容易。
Apache Thrift可以简化两个C ++应用程序之间需要进行通信的场景机器边界,解决了远程过程调用期间的32位和64位差异。无论问题涉及一种,两种还是十种语言,Apache Thrift都可以提供实现协作所需的跨语言交流,相当于一个比较实用的“转换器”。
使用Apache Thrift开发网络服务或执行跨语言序列化任务有几个主要的好处:
- 完整的RPC实现-Apache Thrift提供了完整的RPC解决方案
- 模块化-Apache Thrift支持插件序列化协议
- 性能-Apache Thrift快速高效
- 覆盖面-Apache Thrift支持多种语言和平台
- 灵活性-Apache Thrift支持接口演变
接下来便围绕这五点来进行说明:
1. RPC服务
远程过程调用(RPC)服务是模块化应用程序组件,Apache Thrift提供了完整的跨语言RPC解决方案。 Apache Thrift的RPC服务功能是基于语言的接口定义(IDL)。使用简单的IDL语法描述服务,并编译为生成支持用于以多种语言定义的、远程过程调用的代码。
例子:假设有一个C ++模块来实现跟踪和统计数据的功能。目前,该模块已在公司应用落地。该模块提供的功能比较受欢迎,于是其他团队也希望也能使用它。
某一团队使用Ruby,PHP和Python构建所有内容,并且其程序在锁定的Web服务器的负载平衡群集上运行。通常的解决方式是使用面向服务的体系结构(SOA)模型的服务。
SOA方法将分布式应用程序分解为远程服务可访问的自治模块,由一组紧密相关的功能组成。 SOA基于的系统通常通过与语言无关的界面来提供其功能,允许客户以最合适的语言和最合适的语言来构建适当的平台,独立于服务实现。 SOA服务通常是无状态且松散耦合的,通过正式形式与客户沟通接口合同。 SOA服务可能是组织内部的或支持客户的跨边界业务。但是其中会涉及大量的附加编码。
在这种情况下,更好的方法可能是使用Apache Thrift。使用Apache Thrift IDL,可以定义一个服务接口,并带有要公开的功能。然后可以使用Apache Thrift编译器为我们的服务生成RPC代码,其他团队可以使用以他们的语言生成的代码选择调用服务提供的功能,就像这些功能在本地定义一样。
通过以下方式将代码库或模块转换为RPC服务:Apache Thrift:
1.在IDL中定义服务接口
2.编译IDL以生成所需语言的客户端和服务器RPC存根代码
3.在客户端,使用客户端存根调用远程功能,就好像它们是本地功能一样
4.在服务器端,将服务器存根连接到所需的模块功能
5.选择一台预构建的Apache Thrift服务器来托管服务
以少量的工作为交换,可以转换几乎所有现有的功能,实现支持多种客户端语言访问的Apache Thrift服务。
今天就先记录到这里,欢迎沟通交流~