简介
Svr_Platform是基于Thrift的RPC中间层框架。主要实现以下几个目标
1)通过IDL定义,可以自动生成服务端框架和客户端调用代码。
2)配合路由组件,实现服务自动路由。代码编写过程中无需配置服务端机器IP和端口。
3)编译,打包,部署一体化。
Thrift基础
这里我不做简介,可以参考这边博客做基础了解
http://dongxicheng.org/search-engine/thrift-guide/
存在的问题
1) thrift生成的只是基础代码,需要用户选择序列化方式以及服务方式,编写一定量的代码才能真正运行起来
2) 部署打包并未提供标准方式,无运行时环境
3) 异步使用较为复杂,需要简化
需要做的事情
1) 服务端和客户端的代码标准化,便于使用
2) 打包标准化,开发人员只需要一条指令就能完成打包
3) 运行时标准化,需要一个运行环境。提供安装,显示,重启服务的指令!同时做到服务崩溃后自动拉起。
服务端设计
1. Container采用thrift提供的THsHaServer,根据配置文件中配置的Adaptor-Class,反射载入相应代码。实现简单插件化模型,进行代码复用
2. IFaceProxy切面,实现Log自动化(后续很多围绕接口性质的东西,都可以利用该切面)
3. 自动生成配置文件,Adaptor和Handler,pom文件,打包脚本!构建一体化方案
4. 运行时环境
5. 开发步骤
1) 编写IDL,使用改造过后的thrift生成代码,拿出服务端代码目录
2) 编写Handler的实现,调用mvn package进行打包
3) 调用install_service.sh $service.zip安装打包好的服务。利用客户端生成的代码进行服务测试。
客户端设计
1. RouteAgent用于查询路由,负载均衡,去除单点,服务选择中扮演着重要的角色。后续会进行介绍
2. 调用分为同步调用和异步调用,两种生成的Stub。同时在平台中封装一些复用的类,自身定义的AsyncCallRunner
是一个重要的类。
3. 为了便于路由选择的简化。我们定义了每个服务有一个服务命令字,服务命令子是一个整数。IDL中服务声明的形式为
service(100) XXService{...}
这样设计后,服务监听的端口为(10000 + 服务命令字), 路由组件复用服务命令字,更加方便路由组件的设计。
Svr_Platform的介绍就到这里,下一篇开始介绍路由服务组件