13
S Thrift 技技技技技技 2011/10/09 技技技 1 NYSE: NQ

Thrift 技术演进研讨

  • Upload
    kairos

  • View
    234

  • Download
    0

Embed Size (px)

DESCRIPTION

Thrift 技术演进研讨. 2011/10/09 李新阳. 演进的方向. 可用性: 消除单点故障隐患,提供水平扩容的基础 可管理 :提高服务监控的粒度、规范化程度、自动化程度 改进实现 : Client 端调用方式和 Server 端实现 方式. 方案介绍. Client Connection Lib com.netqin.thrift.lib.client. 可用性. Server Factory Lib com.netqin.thrift.lib.server. 水平扩展. - PowerPoint PPT Presentation

Citation preview

Page 1: Thrift 技术演进研讨

NYSE: NQ1S

Thrift 技术演进研讨2011/10/09李新阳

Page 2: Thrift 技术演进研讨

NYSE: NQ2

演进的方向 可用性:消除单点故障隐患,提供水平扩容的基础

可管理:提高服务监控的粒度、规范化程度、自动化程度

改进实现: Client 端调用方式和 Server 端实现方式

Page 3: Thrift 技术演进研讨

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

可用性水平扩展

可管理性

改进和规范实现

Page 4: Thrift 技术演进研讨

NYSE: NQ4

一个视角:可用性和水平扩展 每个 Thrift Service 在不同硬件上启动多个 Server 在 Alabama Console 配置这些 Service/Server 的信息 Client Connection Lib 从 Alabama Server 获取这些

Service/Server 信息 Client Connection Lib 检测多个 Server 的服务是否正常,并依据策略控制请求的分发

Page 5: Thrift 技术演进研讨

NYSE: NQ5

一个视角:可管理性 NQService 中定义了管理界面(继承自 fb303 )

Alive/cpuXXX/version 等等 所有 Service 都扩展 NQService Alabama Server 统一管理所有 Service/Server 的配置信息 Alabama Console 从 Alabama Server 读取配置,调用每个 Service 的管理接口获取服务状态

Page 6: Thrift 技术演进研讨

NYSE: NQ6

一个视角:改进和规范实现通过 Server Factory Lib 和 Client Connection Lib 统一和规范了 Transport 的选择 Protocol 的选择 Server 的实现方式 Client 端连接池机制 简化 Server 构建、 Client 连接的代码

Page 7: Thrift 技术演进研讨

NYSE: NQ7

另一视角: Client Connection Lib

使用方式 CatService.Client cat = (Client) ConnctionPool.get("CatService"); cat.miao(); ConnctionPool.close(cat);

隐藏和标准化 Protocol/Transport ,隐藏和标准化初始化过程 配置管理

读本地配置 定期读 Alabama Server 的配置

集群 负载均衡、失败检测、重联机制

连接池

Page 8: Thrift 技术演进研讨

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 、实现公共日志

Page 9: Thrift 技术演进研讨

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 的相关信息了

Page 10: Thrift 技术演进研讨

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 配置

Page 11: Thrift 技术演进研讨

NYSE: NQ11

另一视角: Alabama Console(Web)

功能 配置 Service 信息:写入数据源供 Alabama Server 读取 监控 Service :从 Alabama Server 读配置信息,逐一调用

NQService 中定义的方法获取 Service 状态 实现方式

Python 的 Django 做 Web 服务 读 Alabama Server 中的配置信息 写入数据源(目前是 sqllit 数据库)

Page 12: Thrift 技术演进研讨

NYSE: NQ12

That’s All

请看演示

Page 13: Thrift 技术演进研讨

NYSE: NQ13

我的问题 用什么 Transport 用什么 Protocol 用什么 Server