43
淘宝 Java 中间件之路

淘宝Java中间件之路 it168

Embed Size (px)

DESCRIPTION

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

Citation preview

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 !