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