淘宝Java中间件之路 it168

43
淘宝 Java 中间件之路

description

Indroduction of the java middleware at taobao.com, presenting the born, architecture of the three main product of java middleware.

Transcript of 淘宝Java中间件之路 it168

Page 1: 淘宝Java中间件之路 it168

淘宝 Java中间件之路

Page 2: 淘宝Java中间件之路 it168

About me

• 姓名 :曾宪杰

• 花名 :华黎

• 淘宝 -产品技术 -通用产品

• 团队博客 http://rdc.taobao.com/team/jm/

• Sina 微博 @曾宪杰 _ 华黎

• Twitter @vanadies10

Page 3: 淘宝Java中间件之路 it168

Agenda

• 淘宝没有 Java中间件之前

• Java中间件在淘宝的诞生和发展

• Java中间件在淘宝的现状和未来

Page 4: 淘宝Java中间件之路 it168

淘宝没有 Java中间件之前

Page 5: 淘宝Java中间件之路 it168

那是在 2007年下半年的时候

LoadBalance

WebApp WebApp

Cache分布式存储

搜索

DB DB

CDN

Page 6: 淘宝Java中间件之路 it168

Java中间件在淘宝的诞生和发展

消息中间件服务框架

分布式数据层

Page 7: 淘宝Java中间件之路 it168

消息中间件 -Notify

Page 8: 淘宝Java中间件之路 it168

消息中间件

• Message-oriented middleware (MOM) is software infrastructure focused on sending and receiving messages

between distributed systems.

--- from wikipedia.org

• MOM 的优点– 松耦合– 异步处理

Page 9: 淘宝Java中间件之路 it168

消息中间件

• 业务系统完成一件事情后,需要其他系统进行处理的,通过定时程序来驱动

业务系统D o something

业务 D B

定时程序获取任务D o action

Page 10: 淘宝Java中间件之路 it168

消息中间件 -我们的需求

• 轻量级支持最终一致

• 支持订阅者集群

• 消息可靠

Page 11: 淘宝Java中间件之路 it168

消息中间件 -最终一致性

Publisher

Notify Storage

T1发送half 消息

T4业务操作

T3返回消息入库结果

T2存储 half 消息

T6 提交 :更新数据库 标识消息可发送回滚:删除消息

S1定期检查未提交的消息

S2提交 /回滚

本地事务域

本地事务域

业务操作

S3 提交 :更新数据库 标识消息可发送回滚:删除消息

T5提交/回滚

Page 12: 淘宝Java中间件之路 it168

订阅者集群:消息的一个逻辑上的订阅者是有多个物理节点组成

的一个集群

A1 和 A2 是 SystemA中的两个机器

A1 和 A2 共同来消费投递到 SystemA的消息

B1 和 B2 也是类似的关系

消息中间件 -订阅者集群

Page 13: 淘宝Java中间件之路 it168

消息中间件 -Queue I n JMS

• 每个连接都有唯一的 ClientI d

消息(1 -8) Queue

JMS Server

A1 A2 B1 B2

1 , 5 2 , 6 3, 7 4, 8

Page 14: 淘宝Java中间件之路 it168

消息中间件 -Topic I n JMS

• 每个连接都有唯一的 ClientI d

消息 (1 -8)JMS Server

A1

A2

B1

B2

Topic

1 -8

1 -8

1 -8

1 -8

Page 15: 淘宝Java中间件之路 it168

消息中间件 -消息可靠

• Oracle+ 小型机 + 高端存储

• 写双份 Mysql

• Mysql Replication

• 基于文件

• 基于内存 .

Page 16: 淘宝Java中间件之路 it168

有了 Notify之后

LoadBalance

WebApp WebApp

Cache分布式存储

搜索

DB DB

CDN 消息中间件

(Notify)

Page 17: 淘宝Java中间件之路 it168

服务框架 -HSF

Page 18: 淘宝Java中间件之路 it168

服务框架 -当时面临的问题• 上百人维护一个代码百万行的前台核心应用

– 共享一个代码模块,部署分离

• 多个业务系统中的代码重复编写

• 数据库连接数接近瓶颈

混乱,混乱,混乱

Page 19: 淘宝Java中间件之路 it168

服务框架 -系统示意结构

商品中心

用户中心

交易中心

商品 用户 交易

商品系统

商品系统

登录注册

登录注册

交易系统

交易系统

服务化解决了业务核心的稳定和一致的问题

解决了重要数据库的连接数的问题

系统分解后,提升了效率和稳定性

Page 20: 淘宝Java中间件之路 it168

服务框架 -我们的需求

• 简单好用,像使用 Spring Bean一样

• 请求路由灵活可控

• 提供稳定性支持 .

Page 21: 淘宝Java中间件之路 it168

服务框架

• 系统间调用

调用者 服务提供者How?

Page 22: 淘宝Java中间件之路 it168

服务框架• 系统间调用

调用者 服务提供者How?

调用者 服务提供者

Page 23: 淘宝Java中间件之路 it168

服务框架

• 系统间调用

调用者 服务提供者调用者 服务提供者

调用者 服务提供者调用者 服务提供者

Page 24: 淘宝Java中间件之路 it168

服务框架 -结构

调用者 服务提供者

调用者 服务提供者

服务注册查找中心

HSFHSF

HSFHSF

发布服务地址信息定于服务地址信息中心会主动推送

请求直接送达服务端没有中心代理服务器

Page 25: 淘宝Java中间件之路 it168

服务框架 -结构

调用者 服务提供者

调用者 服务提供者

服务注册查找中心

HSFHSF

HSFHSF

发布服务地址信息定于服务地址信息中心会主动推送

请求直接送达服务端没有中心代理服务器

Page 26: 淘宝Java中间件之路 it168

服务框架 -路由

调用者

调用者

配置中心

HSF

HSF

推送路由规则

基于接口的路由

基于方法的路由

基于参数的路由

Page 27: 淘宝Java中间件之路 it168

服务框架 -服务端保护

服务提供者

服务提供者

配置中心

HSF

HSF

推送保护策略

线程池隔离和并发数控制

基于请求来源的流控

Page 28: 淘宝Java中间件之路 it168

有了 HSF之后

LoadBalance

WebApp WebApp

Cache分布式存储

搜索

DB DB

CDN 消息中间件

(Notify)Service Service

服务框架 (HSF)

Page 29: 淘宝Java中间件之路 it168

分布式数据层 -TDDL

Page 30: 淘宝Java中间件之路 it168

分布式数据层

User

User1

User2

User1-M

User2-M User2-S

User1-S分库分表

读写分离

数据库架构的演进

Trade/User

Trade

垂直拆分

Page 31: 淘宝Java中间件之路 it168

分布式数据层

Page 32: 淘宝Java中间件之路 it168

分布式数据层

Page 33: 淘宝Java中间件之路 it168

分布式数据层

User1-M

User2-M User2-S

User1-S

TAtomDataSource

TGroupDataSource

TDataSource

数据源的三层重构

业务可以灵活选择

Page 34: 淘宝Java中间件之路 it168

分布式数据层 -读写分离

Master

Slave

Page 35: 淘宝Java中间件之路 it168

分布式数据层 -读写分离

Slave

Master1 Slave1-1 Slave1-2

通过拦截 SQ L操作 -> 记录日志 -> 完成复制

支持不同维度、不同目标的复制

目前也完成了对于 Mysql的日志解析,可以基于日志进行复制

Page 36: 淘宝Java中间件之路 it168

分布式数据层 -提供 DbProxy• Client->DB方式走向了 Client->Server->DB

Page 37: 淘宝Java中间件之路 it168

分布式数据层

• SQL解析,路由规则,数据合并

• Client->DB和 Client->Server->DB模式

• 非对称数据复制

• 三层的数据源结构

Page 38: 淘宝Java中间件之路 it168

有了 TDDL之后

LoadBalance

WebApp WebApp

Service Service

Cache分布式存储

搜索

DB DB

消息中间件

(Notify)

服务框架 (HSF)

CDN

Tddl

Tddl

Tddl

Page 39: 淘宝Java中间件之路 it168

Java中间件在淘宝的现状和未来

Page 40: 淘宝Java中间件之路 it168

Java中间件现状 -一些数据• Notify

– 每日消息总量 4.4亿。 Half消息的量 1亿 5千万 /天; Committed的消息的量 2亿9千万 /天

– 每日消息投递条次约 15亿次

– 平均消息大小 1.8k

– 总共 78个消息主题, 786种消息类型,部分消息的订阅者超过 30个集群

• HSF

– 线上提供服务数量: 600+

– 每日总调用量: 1 50亿 +

• TD D L

– 每日 SQL执行量, 30亿 +。

– 每日数据复制量约 2.8亿 +。

Page 41: 淘宝Java中间件之路 it168

Java中间件现状 -存在的问题

• 易用性– 开发

– 调试

– 运维

• 稳定性– 降级

– 隔离

– 对应用的保护

Page 42: 淘宝Java中间件之路 it168

Java中间件未来

• 开源

• 根据业务需求的新功能

• 易用性和稳定性

Page 43: 淘宝Java中间件之路 it168

Thanks !