Thrift技术演进研讨会

Download Report

Transcript Thrift技术演进研讨会

Thrift技术演进研讨
2011/10/09
李新阳
S
1
NYSE: NQ
演进的方向
S 可用性:消除单点故障隐患,提供水平扩容的基础
S 可管理:提高服务监控的粒度、规范化程度、自动化程度
S 改进实现:Client端调用方式和Server端实现方式
2
NYSE: NQ
方案介绍
Client Connection Lib
com.netqin.thrift.lib.client
Server Factory Lib
com.netqin.thrift.lib.server
NQ Thrift Service Base
com.netqin.thrift.base
Alabama(Config) Server
com.netqin.thrift.alabama
Alabama Console(Web)
Service Config and Monitor
3
NYSE: NQ
一个视角:可用性和水平扩展
S 每个Thrift Service在不同硬件上启动多个Server
S 在Alabama Console配置这些Service/Server的信息
S Client Connection Lib从Alabama Server获取这些
Service/Server信息
S Client Connection Lib检测多个Server的服务是否正常,并
依据策略控制请求的分发
4
NYSE: NQ
一个视角:可管理性
S NQService中定义了管理界面(继承自fb303)
S Alive/cpuXXX/version等等
S 所有Service都扩展NQService
S Alabama Server统一管理所有Service/Server的配置信息
S Alabama Console从Alabama Server读取配置,调用每个
Service的管理接口获取服务状态
5
NYSE: NQ
一个视角:改进和规范实现
通过Server Factory Lib和Client Connection Lib统一和规范了
S Transport的选择
S Protocol的选择
S Server的实现方式
S Client端连接池机制
S 简化Server构建、Client连接的代码
6
NYSE: NQ
另一视角:Client Connection
Lib
S 使用方式
S CatService.Client cat = (Client) ConnctionPool.get("CatService");
S cat.miao();
S ConnctionPool.close(cat);
S 隐藏和标准化Protocol/Transport,隐藏和标准化初始化过程
S 配置管理
S 读本地配置
S 定期读Alabama Server的配置
S 集群
S 负载均衡、失败检测、重联机制
S 连接池
7
NYSE: NQ
另一视角:Server Factory Lib
S 使用方式
S Processor<Iface> processor = new
CatService.Processor<Iface>(new Cat("huahua"));
S TServer server = ServerFactory.create(processor, 2222).serve();
S 隐藏和标准化Protocol/Transport,隐藏和标准化初始化过程
S 为将来升级和优化Server实现打基础
S 比如从Thrift提供的Server,换为自己的Server实现
S 比如实现一个Server多个Service、实现公共日志
8
NYSE: NQ
另一视角:NQ Thrift Service
Base
S 规约
S 所有NQ的thrift Service在IDL里都extends NQService
S NQService extends fb303
S 使用样例(如何使用NQServiceBase来简化规约的实现)
S Thrift文件:service CatService extends nq.NQService{
S Java文件:public class Cat extends NQServiceBase implements
CatService.Iface
S 用处
S Alabama Console里就可以查看每个Service的相关信息了
9
NYSE: NQ
另一视角:Alabama(Config)
Server
S 开在一个众所周知的IP和端口上,提供“DNS”服务
S Map<String, Service> getAllConfig()
S Service getConfig(String service_name)
S Alabama Server的调用者
S Client Connection Lib:定期更新Service配置
S Alabama Console:读取Service配置
10
NYSE: NQ
另一视角:Alabama
Console(Web)
S 功能
S 配置Service信息:写入数据源供Alabama Server读取
S 监控Service:从Alabama Server读配置信息,逐一调用
NQService中定义的方法获取Service状态
S 实现方式
S Python的Django做Web服务
S 读Alabama Server中的配置信息
S 写入数据源(目前是sqllit数据库)
11
NYSE: NQ
That’s All
S 请看演示
12
NYSE: NQ
我的问题
S 用什么Transport
S 用什么Protocol
S 用什么Server
13
NYSE: NQ