vlambda博客
学习文章列表

VIP_OSP--基于Thrift的RPC框架的基本原理

公司(VIP)从2015年开始在内部推动Venus框架的使用,开放服务平台(venus-osp)是一款基于Apache Thrift远程调用框架二次开发的高性能、高可扩展的、服务治理的RPC框架。服务端使用IDL进行服务的定义,客户端集成服务的SDK即可调用服务端的服务,开发简单,大部分的公共功能都在Proxy代理层工作,减轻了开发者的负担,使其只需要关注业务部分。下面是对该框架的基本原理的简单介绍。 
参考文献: 
1. Apache Thrift - 可伸缩的跨语言服务开发框架 
2. 公司内部的Venux文档(内网文档,无法分享)

一、Thrift简介
Thrift采用接口描述语言定义并创建服务,支持可扩展的跨语言服务开发,使用代码生成引擎可以在多种语言之中创建高效、无缝的服务,采用二进制格式进行数据的传输,相对于xml和json体积更小,对于高并发、大数据量的环境更有优势。 
1. Hello World示例 
Hello.thrift

 namespace java service.demo service Hello{ string helloString(1:string para) i32 helloInt(1:i32 para) bool helloBoolean(1:bool para) void helloVoid() string helloNull() }

这段IDL定义了服务的名称和五个方法,Thrift是对IDL的一种具体实现,使用Thrift的工具编译该idl文件,就会生成相应的Hello.java文件。该文件包含了在Hello.thrift文件中描述的服务Hello的接口定义,即Hello.Iface接口,以及服务调用的底层通信细节,包括客户端的调用逻辑Hello.Client以及服务端的处理逻辑Hello.Processor,用于构建客户端和服务端的功能。 
创建HelloServiceImpl.java文件并实现Hello.java文件中的Hello.Iface接口,代码:

 
package service.demo; import org.apache.thrift.TException; public class HelloServiceImpl implements Hello.Iface { @Override  public boolean helloBoolean(boolean para) throws TException { return para; } @Override  public int helloInt(int para) throws TException { try { Thread.sleep(20000); } catch (InterruptedException e) { e.printStackTrace(); } return para; } @Override  public String helloNull() throws TException { return null; } @Override  public String helloString(String para) throws TException { return para; } @Override  public void helloVoid() throws TException { System.out.println("Hello World"); } }

Thrift架构 
架构图如下: 


图中黄色部分是用户的业务代码,褐色部分是编译工具生成的代码框架,紫色部分和蓝色部分是我们所选择的传输层和传输协议。 
Thrift服务器包含用于绑定协议和传输层的基础架构,它提供阻塞、非阻塞、单线程和多线程的模式运行在服务器上。
2.传输协议 
Thrift可以让用户选择客户端和服务端之间的传输通信协议的类别,分为文本(text)和二进制(binary)。 

  1. TBinaryProtocol:二进制编码格式进行数据传输

  2. TCompactProtocol:高效率的密集的二进制编码协议

  3. TJSONProtocol:使用Json的数据编码协议

  4. TSimpleJSONProtocol:只提供Json读写的协议,适用于脚本语言解析

3.传输层 

  1. TSocket:使用阻塞式IO进行传输

  2. TFramedTransport:非阻塞方式,按块的大小进行传输,类似NIO;服务器必须为非阻塞的服务类型

  3. TNonblockingTransport:非阻塞模式,用于构建异步客户端

4.服务端类型 

  1. TSimpleServer:单线程服务器,阻塞IO

  2. TThreadPoolServer:多线程服务器,阻塞式IO

  3. TNonblockingServer:多线程服务器,非阻塞IO

二、Venus的配置中心
配置中心实现了集中配置、主动推送、规范配置、配置可读等优点。