夸父通讯中间件

31
1 夸父通讯中间件 任卿 淘宝核心系统研发部

description

2011.01.22 北京 OpenParty

Transcript of 夸父通讯中间件

Page 1: 夸父通讯中间件

1

夸父通讯中间件

任卿淘宝核心系统研发部

Page 2: 夸父通讯中间件

2

议程

2

一、夸父系统简介

二、夸父的使用与消息路由

三、夸父应用效果

四、小结

Page 3: 夸父通讯中间件

3

什么是夸父

夸父(KuaFu Communicator),淘宝与阿里巴巴集团研究院联合开发的Linux下分布式消息中间件。

夸父的特点:

基于Agent代理通信

集群通信模型

灵活的路由模式

最简洁的API

Page 4: 夸父通讯中间件

4

我们希望解决的问题

WebServer

Apache

Apache

ApacheApache

WebServer

Apache

Apache

Apache

WebServer

Apache

Apache

Apache

Apache

WebServer

Apache

Apache

Apache

Server

ServerAPP

ServerAPP

ServerAPP

ServerAPP

Server

ServerAPP

ServerAPP

ServerAPP

Server

ServerAPP

ServerAPP

ServerAPP

ServerAPP

ServerAPP

ServerAPP

ServerAPP

Apache

Apache

ServerAPP

Page 5: 夸父通讯中间件

5

WebServer

Apache

Apache

Apache

Apache

K

F

C

WebServer

Apache

Apache

Apache

Apache

WebServer

Apache

Apache

Apache

Apache

WebServer

Apache

Apache

Apache

Apache

Server

ServerAPP

ServerAPP

ServerAPP

ServerAPP

ServerAPP

Server

ServerAPP

ServerAPP

ServerAPP

ServerAPP

ServerAPP

Server

ServerAPP

ServerAPP

ServerAPP

ServerAPP

ServerAPP

夸父应用架构

K

F

C

K

F

C

K

F

C

K

F

C

K

F

C

K

F

C

CMS

Page 6: 夸父通讯中间件

6

夸父-系统目标

高吞吐量(千兆网卡线速),高QPS(单进程26000以上)

响应时间短,略高于TCP socket通信的开销

消息丢失率低,稳定可靠

屏蔽下层通讯细节,应用系统编程简单

自动负载均衡,高度可扩展性

自动的故障屏蔽和恢复机制

Page 7: 夸父通讯中间件

7

议程

7

一、夸父系统简介

二、夸父的使用与消息路由

三、夸父应用效果

四、小结

Page 8: 夸父通讯中间件

8

夸父-最简洁的API

kfc_join:加入通讯组

kfc_send:指定条件向某个通讯组发送消息

kfc_recv:设定条件从某个通讯组接受消息

kfc_leave:离开通讯组

Page 9: 夸父通讯中间件

9

夸父-基本概念

夸父组:

一组server为一组client提供某个服务。

服务端和客户端的进程不需要关心路由、灾难恢复具体实现的细节。

一个夸父进程可以服务多个组。

Domain Socket:

夸父在特定的Unix Domain Socket端口上侦听

用于夸父与应用程序之间通信

将来会用共享内存方案替代

Page 10: 夸父通讯中间件

10

夸父-基本概念

Key

client消息的一个伴随值

由client Agent根据client App传递的key值,选择适当的目标server节点

Server可以选择要处理的key range

队列

消息缓存

每个连接保持一个队列

队列满了以后会自动清掉队列里所有的消息

Page 11: 夸父通讯中间件

11

夸父-通信模型

Page 12: 夸父通讯中间件

12

夸父-消息寻址

如何实现消息的代理转发?

Page 13: 夸父通讯中间件

13

消息寻址

应用程序之间通过 “消息传递” 的方式进行通讯

一个客户端的进程可以把一条消息发送到:

一个夸父组

一个夸父组,并且带有key

一个特定的服务端进程

组内的每一台server主机上面的夸父进程。

支持特定的路由策略

服务端的进程只能把消息发送到特定的客户端进程。

通常是服务端进程所接收的最后一条请求对应的客户端进程。

Page 14: 夸父通讯中间件

14

路由策略

所谓“路由”,是指把数据从一个地方传送到另一个地方的行为和动作。

夸父提供的路由策略:

Round Robin,在所有的代理进程中轮询调度(默认方式)

Multikey,服务端驱动,服务端应用程序指定处理的规则

Routed,客户端驱动,客户端夸父程序确定处理规则

Page 15: 夸父通讯中间件

15

路由策略-Round Robin模式

缺省的路由模式。

支持动态负载均衡,适用于Server机器性能不同的情况

请求被发送到每一个满足下面条件的夸父进程上:

已经连接(加入组)

已经激活,也就是已经有进程附着于它。

Page 16: 夸父通讯中间件

16

路由策略-Round Robin模式

Client

Server-1

Server-2

Server-3

Server-4

msg{1…10}

msg{1,5,9}

msg{2,6,10}

msg{3,7}

msg{4,8}

Page 17: 夸父通讯中间件

17

Round Robin-灾难恢复策略

Client

Server-1

Server-2

Server-3

Server-4

msg{1…10}

msg{1,4,7,10}

msg{2,6,10}

msg{2,5,8}

msg{3,6,9}

所有的消息都被打乱了重新确定目标服务器。

Page 18: 夸父通讯中间件

18

路由策略-Routed模式

服务端进程进入组时,无需声明key。

和key模式类似,客户端发送请求时,需指定一个key

通过固定的路由和统一的灾难恢复机制,达到缓存绑定最大化的目的。

Page 19: 夸父通讯中间件

19

路由策略-Routed模式

Client

Server-1

Server-2

Server-3

Server-4

msg{1…10}

msg{1,5,9}

msg{2,6,10}

msg{3,7}

msg{4,8}

Page 20: 夸父通讯中间件

20

Routed模式-灾难恢复策略

Client

Server-1

Server-2

Server-3

Server-4

msg{1…10}

msg{1,2,5,9}

msg{2,6,10}

msg{3,6,7}

msg{4,8,10}

原来发到server2的请求2,6,10,被分摊到server1,

server3, sever4上面。而server1和server3, server4原

来响应的key,仍然保持不变。

Page 21: 夸父通讯中间件

21

路由策略- Multikey模式

服务端进程声明它要接收的key的列表范围。

客户端进程每次发送请求时,提供一个key值(正整数)。

重叠的key列表是允许的。

请求被分发到对应key列表的服务端进程。

提供了灾难自动恢复机制

Page 22: 夸父通讯中间件

22

路由策略- Multikey模式

Client

Server-1@{1-5}

Server-2@{1-5}

Server-3@{6-10}

Server-4@{6-10}

msg{1…10}

msg{1,3,5}

msg{2,4}

msg{6,8,10}

msg{7,9}

Page 23: 夸父通讯中间件

23

Multikey模式-灾难恢复策略

Client

Server-1@{1-5}

Server-2@{1-5}

Server-3@{6-10}

Server-4@{6-10}

msg{1…10}

msg{1,2,3,4,5}

msg{2,4}

msg{6,8,10}

msg{7,9}

Page 24: 夸父通讯中间件

24

夸父 – 状态监控

Page 25: 夸父通讯中间件

25

议程

25

一、夸父系统简介

二、夸父的使用与消息路由

三、夸父应用效果

四、小结

Page 26: 夸父通讯中间件

26

夸父-性能评测

Page 27: 夸父通讯中间件

27

夸父-性能评测

Page 28: 夸父通讯中间件

28

夸父 vs TCP

0

50

100

150

200

250

夸父 TCP

mean rt(微秒)

min rt(微秒)

Page 29: 夸父通讯中间件

29

议程

29

一、夸父系统简介

二、夸父的使用与消息路由

三、夸父应用效果

四、小结

Page 30: 夸父通讯中间件

30

小结

夸父目前已经在淘宝多个业务系统中稳定性运行

数百台机器集群的应用规模

后续将考虑开源(code.taobao.org)

Page 31: 夸父通讯中间件

31

Q & A

谢谢!