文 / 技术领导力社区
编辑 / Emma
本文整理了阿里 13 个开源中件间产品的架构及功能介绍, 结合阿里中间件团队的访谈及分享, 涵盖了消息中间件, 服务框架, 数据层, 应用服务器和大规模分布式稳定性平台等等. 整体中间件在阿里生态中的分布, 如下图所示:
01
服务框架 - HSF
HSF 旨在为阿里巴巴的应用提供一个分布式的服务框架, HSF 从分布式应用层面以及统一的发布 / 调用方式层面为大家提供支持, 从而可以很容易的开发分布式的应用以及提供或使用公用功能模块, 而不用考虑分布式领域中的各种细节技术, 例如远程通讯, 性能损耗, 调用的透明化, 同步 / 异步调用方式的实现等等问题.
这个图说明了 HSF 框架中每个组件在整个框架中扮演的角色, 下面分别介绍下:
(1). 服务节点对配置服务器列表的获取. 伴随着 web 容器的启动, 服务提供者和服务调用者向地址服务器获取配置服务器和 Diamond 服务器的 ip 列表信息, 过程见上图的 1,2 步骤.
(2). 服务的注册发布. 服务提供者获取配置服务器列表后, 将服务的相关信息 (接口类全名, 服务版本等) 包含当前服务器的 ip 地址, 端口等信息注册到配置服务器, 即上图的 3 步骤.
(3). 服务的订阅. 当服务调用者的应用启动并获取配置服务器列表后, 发送服务消费的相关信息 (服务接口全名, 服务版本等) 到配置服务器订阅, 然后配置服务器会通过 "服务接口全名 + 服务版本" 作为条件在内存中搜索, 一旦获取到服务注册信息, 就将对应的服务提供者的 ip 和端口发送到服务调用者的节点上, 即上图的 4 ,5 步骤.
(4). 服务规则推送(如果需要). 如果对服务安全管控和流量控制有需求时, 可以通过 Diamond 服务器提供规则设置界面, 对指定的服务提供者和服务调用者设置相关规则, 规则保存后, 会在 5 秒内推送到与设置相关的服务器节点上.
(5). 服务交互. 在应用进行业务请求处理过程中, 出现服务调用者对服务提供者的调用时, 服务调用者会从已经保存在该应用节点上的服务提供者服务器列表里选择 (阿里巴巴内部使用随机模式) 其中一台服务进行请求的发送, 服务交互期间是调用者和提供者两台服务器间的调用, 无需通过中间别的服务器, 这就是称为 "去中心化" 的主要原因.
02
消息中间件 - Notify
notify 是一款高性能, 高可靠, 可无限水平扩展, 支持分布式事务, 支持复杂消息过滤的与互联网时代紧密结合的消息中间件, 是目前公司内部使用最广泛的一个消息中间件产品之一, 承担着公司内部 90% 以上消息服务. 他使用推消息的模型, 集群可水平扩展, 但不保证顺序, 也不保证重复的消息中间件产品.
架构主要由 notify client ,config server ,notify server ,data base 组成, 其中 notify client 为消费消息端, config server 为阿里巴巴许多服务注册发现中心, 在这也相当于充当了服务发现中心, notify server 消息的发送端, database 为存储中心.
它的核心特性是: 提供事务支持, 不保证消息顺序, 消息可能会重复, 推模型, 定位于无序消息投递, 所以 更适用于 : 面向需要更加安全可靠地交易类场景, 无序, 推模式.
1, 分布式事务特性 , 交易状态最终一致性的保证
可以保证业务操作和消息发送组成一个分布式事务, 业务操作和消息发送就是一个原子操作, 有这种业务场景的需求就可以选择 notify.
2, 推送的方式, 消息的无序和最高实时的消息服务
因为是推送的方式加无序就可以保证最好的实时性, 推送模型就是当消息发到服务端就会立刻无间歇推送到客户端.
3, 双写特性
为了解决单点故障的问题, notify 实现的是双写的方式, 就比如在发一条消息的时候会同时写到两个 database 的实例当中, 当两个实例都成功的时候才算发送成功, 这就保证了消息存储的高度可靠, 有需要高度可靠的数据的处理就可以用 notify
4, 支持消息属性表达式过滤
如果有业务场景比较复杂的, 需要有复杂的筛选条件下的业务就可以选择 notify.
03
消息中间件 - MetaQ
Meta Q 是一款分布式, 队列模型的消息中间件. 分为 Topic 与 Queue 两种模式, Push 和 Pull 两种方式消费, 支持严格的消息顺序, 亿级别的堆积能力, 支持消息回溯和多个维度的消息查询.
MetaQ 的开源版就是 rocketmq . 这里就不多做介绍, 感兴趣的同学可以到 GitHub 上查看文档和源码.
开源地址: https://github.com/alibaba/rocketmq
04
数据层 - TDDL
TDDL 旨为用户提供在线数据库服务. TDDL 部分兼容 MySQL 关系型数据库, 并提供数据库在线扩容, 性能监测及分析功能. TDDL 支持弹性扩容.
TDDL 主要的优点是:
数据库主备和动态切换
带权重的读写分离
单线程读重试
集中式数据源信息管理和动态变更
剥离的稳定 jboss 数据源
支持 MySQL 和 oracle 数据库
基于 jdbc 规范, 很容易扩展支持实现 jdbc 规范的数据源
无 server,client-jar 形式存在, 应用直连数据库
读写次数, 并发度流程控制, 动态变更
可分析的日志打印, 日志流控, 动态变更
开源介绍: https://github.com/alibaba/tb_tddl
05
数据复制组件 - 精卫
精卫填海 (简称精卫) 是一个基于 MySQL 数据库的数据复制组件, 远期目标是构建一个完善可接入多种不同类型源数据的实时数据复制框架.
精卫提供如下功能:
内置多种复制任务: 解析 MySQL 的 binlog 到数据库(MySQL,Oracle), 解析 MySQL 的 binlog 到 Meta 消息中间件.
保证数据不丢
如果有多个消费者, 能够保证一个消费者挂掉或很慢, 其他消费者不会受到影响.
支持用户自定义复制任务: 用户可以根据具体业务需求自由定制 Extractor 和 Applier, 就可以很方便地创建的新的复制任务.
自定义任务灵活部署: 用户自定义复制任务既可以部署在业务服务器, 也可部署在精卫集群.
数据过滤功能: 用户通过 Web 控制台, 就可以灵活地添加, 配置过滤器, 虑选满足业务需求的数据.
丰富的日志展现形式: 用户通过 Web 页面, 不但可以查看复制任务运行时的实时数据, 而且通过查看历史数据分析复制任务的运行情况, 为业务分析, bug 定位, 监控报警提供便利.
数据再散列: 利用 TDDL 完善的分库分表规则, 可以实现数据的再散列.
多种途径监控, 告警: 用户可通过旺旺, 短信, 邮件的形式接受运行时告警, 及时了解系统运行的监控状况, 为运维提供便利.
06
数据自动迁移引擎 - 愚公
数据自动迁移引擎, 海量数据自动运维工具, 可用于对用户无影响的自动扩容和缩容, 数据平滑迁移, 以及异构数据源迁移, 目前已经完成了 214 次业务迁移或扩容.
愚公架构组成: 1. 一个 Jvm Container 对应多个 instance, 每个 instance 对应于一张表的迁移任务
2. instance 分为三部分
- a. extractor (从源数据库上提取数据, 可分为全量 / 增量实现)
- b. translator (将源库上的数据按照目标库的需求进行自定义转化)
- c. applier (将数据更新到目标库, 可分为全量 / 增量 / 对比的实现)
yugong 架构特点:
1. 全量 + 增量任务 (减少复杂度)
2.JDBC 协议 (解决环境兼容性)
3.oracle 物化视图 (解决记录增量日志)
4. 引入 translator 扩展 (解决异构数据转化)
开源项目地址: https://github.com/alibaba/yugong
07
软负载配置中心 - Diamond
Diamond 是一个持久配置管理中间件. 可以实现分布式场景下, 中心化的持久配置管理, 同时也支持基于发布订阅模型配置动态变更推送.
开源介绍: http://code.taobao.org/p/diamond/wiki/index/
项目特点:
所见即所得, 在管理界面上看到的所有配置即项目运行时的配置
支持 groupId,artifactId,version,profile 四个维度以应对复杂环境
支持公共组件的配置继承, client jar 包配置继承
配置修改实时通知客户端
和 spring 集成, 使用简单
完善的权限系统
集成 LDAP 登陆, 支持同步 LDAP 组 / 用户
支持 http RESTful API 获取配置
以 secret key 防止非法获取配置
丰富的 metrics, connectio n 统计
08
鹰眼 - EagleEye
EagleEye (鹰眼)通过收集和分析在不同的网络调用中间件上的日志埋点, 可以得到同一次请求上的各个系统的调用链关系, 有助于梳理应用的请求入口与服务的调用来源, 依赖关系.
同时, 也对分析系统调用瓶颈, 估算链路容量, 快速定位异常有很大帮助. 另外, 业务方也可以在调用链上添加自己的业务埋点, 使网络调用和实际业务内容得到关联.
09
实时计算: JStorm
JStorm 是 Storm 的 Java 版本, 使用 Java 重写的同时在其基础上进行了大幅度的改进与优化. 与 Hadoop 对大数据进行离线全量处理相对应, JStorm 主要做的是对大数据的实时增量计算与流式计算.
Jstorm 主要应用场景有:
1. 信息流处理, 如聚合, 分析等
2. 持续计算, 如实时数据统计, 监控
3. 分布式 rpc 调用
Jstorm 在内核上对 storm 的改进有:
1. 模型简化
2. 多维度资源调度
3. 网络通信层改造
4. 采样重构
5.worker/task 内部异步化处理
6.classload,HA
开源项目地址: https://github.com/alibaba/jstorm
10
天枢 VipS erver
通过集中式的配置向客户提供路由信息, 以非网关的形式实现负载均衡功能; 支持多种映射策略(轮询, 轮询 + 同机房, 轮询 + 同网段); 通过健康探测机制, 自动剔除不健康的机器, 实现集群之间调用的透明化; 对调用量, 调用方等数据也有一定程度的反馈.
11
注册中心 ConfigServer
大家有 Eureka 使用经验的话, 对 ConfigServer 就很好理解, 它主要提供非持久配置的发布和订阅. 07/08 年间在淘宝内部开发使用的时候, 由于 ZooKeeper 还没有开源, 不然可能会基于 ZooKeeper 来进行改造. 主要使用场景是为分布式服务框架提供软负载功能所必须的服务地址列表.
12
服务框架 - Pandora
Pandora, 中文名潘多拉, 是淘宝网中间件团队打造的, 基于 HSF 隔离技术构建的全新一代隔离容器. 从解决二方包依赖冲突出发, 致力于统一管理通用的二方包, 包括方便的二方包升级管理, 监控和管理, 建立统一的二方包扩展编程方式等.
13
生产环境性能分析工具 TProfiler
TProfiler 是一个可以在生产环境长期使用的性能分析工具. 它同时支持剖析和采样两种方式, 记录方法执行的时间和次数, 生成方法热点对象, 创建热点线程状态分析等数据, 为查找系统性能瓶颈提供数据支持.
TProfiler 在 JVM 启动时把时间采集程序注入到字节码中, 整个过程无需修改应用源码. 运行时会把数据写到日志文件, 一般情况下每小时输出的日志小于 50M.
业界同类开源产品都不是针对大型 Web 应用设计的, 对性能消耗较大不能长期使用, TProfiler 解决了这个问题. 目前 TProfiler 已应用于淘宝的核心 Java 前端系统.
部署后低峰期对应用响应时间影响 20% 高峰期对吞吐量大约有 30% 的降低(高峰期可以远程关闭此工具).
开源地址: https://github.com/alibaba/TProfiler
14
本文内容小结
1, 服务框架 - HSF .HSF 旨在为阿里巴巴的应用提供一个分布式的服务框架, HSF 从分布式应用层面以及统一的发布 / 调用方式层面.
2, 消息中间件 - Notify . 是一款高性能, 高可靠, 可无限水平扩展, 支持分布式事务, 支持复杂消息过滤的与互联网时代紧密结合的消息中间件.
3, 消息中间件 - MetaQ . 是一款分布式, 队列模型的消息中间件. 分为 Topic 与 Queue 两种模式, Push 和 Pull 两种方式消费.
4, 数据层 - TDDL .TDDL 旨为用户提供在线数据库服务. TDDL 部分兼容 MySQL 关系型数据库, 并提供数据库在线扩容, 性能监测及分析功能.
5, 数据复制组件 - 精卫 . 是一个基于 MySQL 数据库的数据复制组件, 远期目标是构建一个完善可接入多种不同类型源数据的实时数据复制框架.
6, 数据自动迁移引擎 - 愚公 . 数据自动迁移引擎, 海量数据自动运维工具, 可用于对用户无影响的自动扩容和缩容, 数据平滑迁移.
7, 软负载配置中心 - Diamond .Diamond 是一个持久配置管理中间件. 可以实现分布式场景下, 中心化的持久配置管理, 同时也支持基于发布订阅模型配置动态变更推送.
8, 鹰眼 - EagleEye . 通过收集和分析在不同的网络调用中间件上的日志埋点, 可以得到同一次请求上的各个系统的调用链关系.
9, 实时计算:
JStorm
. 使用 Java 重写的同时在其基础上进行了大幅度的改进与优化. 与 Hadoop 对大数据进行离线全量处理相对应, JStorm 主要做的是对大数据的实时增量计算与流式计算.
10, 天枢 VipServer . 通过集中式的配置向客户提供路由信息, 以非网关的形式实现负载均衡功能; 支持多种映射策略(轮询, 轮询 + 同机房, 轮询 + 同网段).
11, 注册中心 ConfigServer . 它主要提供非持久配置的发布和订阅.
12, 服务框架 - Pandora . 基于 HSF 隔离技术构建的全新一代隔离容器, 统一管理通用的二方包.
13, 生产环境性能分析工具 TProfiler . 是一个可以在生产环境长期使用的性能分析工具. 它同时支持剖析和采样两种方式.
"阿里中台" 系列 4 篇:
1. 阿里数据科学家, 讲透数据中台, 15 页 PPT
2. 阿里架构总监, 讲透中台架构, 13 页 PPT
3. 学阿里中台, 学最值钱的: 中台方法论
4. 阿里专家: 技术 / 移动 / 研发中台, 16 页 PPT
想下载 "阿里中台架构" 的 PPT?
第一步, 关注 "技术领导力" 公众号
第二步, 在对话框输入:
中台
想跟文章作者, 100 位互联网大咖交流学习?
添加助理小姐姐 Emma
注明 "加群", 稍后她会拉你进社区群
往期精彩推文:
来源: http://www.tuicool.com/articles/EbquuqZ