1. 概述以及竞品对比
中间件 | 介绍 | 官方链接 | 竞品 | 竞品介绍 | 异同点对比 |
---|---|---|---|---|---|
Dubbo | 高性能的RPC框架,用于实现分布式服务的调用和管理。 | Dubbo | gRPC | gRPC是由Google开源的一款高性能、通用的RPC框架,支持多种编程语言 链接:gRPC | Dubbo更注重于服务治理和可扩展性,而gRPC更注重于跨语言和跨平台的通信。 |
RocketMQ | 高性能、可靠的分布式消息队列中间件,用于实现异步通信和解耦。 | RocketMQ | Apache Kafka | Apache Kafka是一款高吞吐量的分布式消息队列系统,支持水平扩展和持久化消息存储。Apache Kafka链接:Apache Kafka | RocketMQ适用于大规模、高吞吐量的场景,而Kafka适用于大数据流处理和日志传输。 |
Tair | 阿里巴巴自研的分布式缓存中间件,具有高可靠性、高性能和高扩展性。 | Tair | Redis | Redis是一款流行的开源分布式缓存和数据存储系统,支持丰富的数据结构和复杂的操作。Redis链接:Redis | Tair适用于高并发、大规模集群的场景,而Redis注重于丰富的数据结构和灵活的扩展性。 |
OceanBase | 阿里巴巴自研的分布式关系型数据库中间件,具有高可用性、高扩展性和高性能。 | OceanBase | TiDB | TiDB是一款开源的分布式关系型数据库,支持水平扩展和强一致性的分布式事务。 链接:TiDB | OceanBase更注重于高可靠性和高性能的企业级场景,而TiDB更注重于云原生和弹性扩展的需求。 |
Sentinel | 流量控制和熔断降级的Java中间件,用于保护系统稳定性和可用性。 | Sentinel | Hystrix | Hystrix是Netflix开源的一款流量控制和熔断降级库,用于构建弹性的分布式系统。 链接:Hystrix | Sentinel更注重于实时监控和动态规则配置,而Hystrix更注重于线程隔离和回退策略。 |
Druid | 高性能的数据库连接池中间件,提供连接管理和监控功能。 | Druid | HikariCP | HikariCP是一款流行的高性能数据库连接池,具有快速、轻量级和简单的特点。HikariCP 链接:HikariCP | Druid提供了更丰富的监控和统计功能,而HikariCP注重于轻量级和高性能的连接池实现。 |
Nacos | 服务注册和配置中心,用于管理系统的服务和配置。 | Nacos | Consul | Consul是一款开源的服务发现和配置中心,提供分布式服务注册和键值存储等功能。 | Nacos更注重于高可用性和可扩展性,而Consul更注重于多数据中心和多服务发现机制。 |
Seata | 分布式事务中间件,用于保证分布式系统的事务一致性。 | Seata | TCC-Transaction | TCC-Transaction是一种基于补偿机制的分布式事务模式,用于构建分布式事务一致性保证。 链接:TCC-Transaction | Seata提供了更全面的事务管理机制和解决方案,而TCC-Transaction更注重于尝试-确认-取消的补偿模式。 |
FDFS | 分布式文件系统,用于存储和管理大规模文件。 | FDFS | Hadoop HDFS | Hadoop HDFS是Apache Hadoop生态系统中的分布式文件系统,用于大规模数据存储和处理。 | FDFS更注重于轻量级和高性能的文件存储,而Hadoop HDFS更注重于大数据处理和容错性。 |
DRDS | 分布式关系型数据库中间件,用于管理分布式数据库和查询优化。 | DRDS | ShardingSphere | ShardingSphere是一款开源的分布式数据库中间件,支持分库分表和数据分片等功能。ShardingSphere | DRDS更注重于简化分布式数据库的部署和管理,而ShardingSphere更注重于灵活的分库分表和数据分片策略。 |
Havenask(HA3) | 一种分布式、面向文档的数据库,可以存储、搜索和分析数据 | havenask-federation | Elasticsearch | Elasticsearch是一个开源的分布式搜索和分析引擎,它构建在Apache Lucene库之上。它被设计用于处理大规模数据集的快速搜索、分析和存储。 | 阿里Havenask和es都是用于搜索和检索数据的技术,能处理大规模数据并支持高并发搜索和查询操作。 ES适用于大规模数据搜索和分析场景,而阿里Havenask则更侧重于电商领域的搜索和推荐场景,并与阿里生态系统深度结合。 |
2. 详细介绍
2.1 Tair
Tair是阿里巴巴自主研发的高性能、分布式、可扩展、高可靠的 key/value 存储系统,Tair包括:MDB、LDB、RDB。Tair相较于Redis最大的区别是其底层支持多款引擎(MDB、RDB、LDB),不同的引擎工作于不同的场景(这一点有点像MySQL的插件化存储引擎,但是又不是完全像。MySQL对外接口是统一的,Tair的RDB引擎和另外两者数据模型差异较大)。各个引擎特点如下:
- MDB:
完全依赖于内存,高读写,不支持持久化,适用于:
- 缓存,降低对后端数据库的访问压力,所有需要后端有持久化的DB如MySQL
- 可临时数据存储,分钟级别后失效,偶尔数据丢失不会对业务产生较大影响。
- 读多写少,读 QPS 达到万级别以上。
- RDB:
基于redis,提供除了KV以外的数据结构存储,如list,set等,依赖于redis的特性,适用于(主要是基于复杂的数据结构):
- 如排行榜、计数器缓冲、数据统计(如TopN,交集,并集等)、最新项目检索、地理位置存储及range查询
- 实时统计和过期处理,如用户投票及排序;复杂的数据结构缓存及内存数据库
- LDB:
基于google的levelDB。存储磁盘为SSD,内嵌一层MDB作为中间层,在实现持久化的过程中,也能提供较高的性能,适用于:
- 黑白单等访问量大,miss率高的场景
- 离线数据查询
ref:阿里开源中间件一览-CSDN博客
2.2 消息中间件-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。
2.3 消息中间件-MetaQ
MetaQ是一款分布式、队列模型的消息中间件。分为Topic与Queue两种模式,Push和Pull两种方式消费,支持严格的消息顺序,亿级别的堆积能力,支持消息回溯和多个维度的消息查询。
2.4 消息中间件-rocketMQ
MetaQ的开源版就是rocketmq。这里就不多做介绍,感兴趣的同学可以到github上查看文档和源码。
开源地址:https://github.com/alibaba/rocketmq
2.5 Dubbo
2.6 服务框架HSF
HSF旨在为阿里巴巴的应用提供一个分布式的服务框架,HSF从分布式应用层面以及统一的发布/调用方式层面为大家提供支持,从而可以很容易的开发分布式的应用以及提供或使用公用功能模块,而不用考虑分布式领域中的各种细节技术,例如远程通讯、性能损耗、调用的透明化、同步/异步调用方式的实现等等问题。
这个图说明了HSF框架中每个组件在整个框架中扮演的角色,下面分别介绍下:
(1).服务节点对配置服务器列表的获取。伴随着web容器的启动,服务提供者和服务调用者向地址服务器获取配置服务器和Diamond服务器的ip列表信息,过程见上图的1、2步骤。
(2).服务的注册发布。服务提供者获取配置服务器列表后,将服务的相关信息(接口类全名、服务版本等)包含当前服务器的ip地址、端口等信息注册到配置服务器,即上图的3步骤。
(3).服务的订阅。当服务调用者的应用启动并获取配置服务器列表后,发送服务消费的相关信息(服务接口全名、服务版本等)到配置服务器订阅,然后配置服务器会通过“服务接口全名+服务版本”作为条件在内存中搜索,一旦获取到服务注册信息,就将对应的服务提供者的ip和端口发送到服务调用者的节点上,即上图的4 、5步骤。
(4).服务规则推送(如果需要)。如果对服务安全管控和流量控制有需求时,可以通过Diamond服务器提供规则设置界面,对指定的服务提供者和服务调用者设置相关规则,规则保存后,会在5秒内推送到与设置相关的服务器节点上。
(5).服务交互。在应用进行业务请求处理过程中,出现服务调用者对服务提供者的调用时,服务调用者会从已经保存在该应用节点上的服务提供者服务器列表里选择(阿里巴巴内部使用随机模式)其中一台服务进行请求的发送,服务交互期间是调用者和提供者两台服务器间的调用,无需通过中间别的服务器,这就是称为“去中心化”的主要原因。
2.7 数据层-TDDL
TDDL旨为用户提供在线数据库服务。TDDL部分兼容MySQL关系型数据库,并提供数据库在线扩容、性能监测及分析功能。TDDL支持弹性扩容。TDDL主要的优点是:
- 数据库主备和动态切换
- 带权重的读写分离
- 单线程读重试
- 集中式数据源信息管理和动态变更
- 剥离的稳定jboss数据源
- 支持mysql和oracle数据库
- 基于jdbc规范,很容易扩展支持实现jdbc规范的数据源
- 无server,client-jar形式存在,应用直连数据库
- 读写次数,并发度流程控制,动态变更
- 可分析的日志打印,日志流控,动态变更
开源介绍:https://github.com/alibaba/tb_tddl
2.8 数据复制组件-精卫
精卫填海(简称精卫)是一个基于MySQL数据库的数据复制组件,远期目标是构建一个完善可接入多种不同类型源数据的实时数据复制框架。
精卫提供如下功能:
- 内置多种复制任务:解析MySQL的binlog到数据库(MySQL、Oracle),解析MySQL的binlog到Meta消息中间件。
- 保证数据不丢
- 如果有多个消费者,能够保证一个消费者挂掉或很慢,其他消费者不会受到影响。
- 支持用户自定义复制任务:用户可以根据具体业务需求自由定制Extractor和Applier,就可以很方便地创建的新的复制任务。
- 自定义任务灵活部署:用户自定义复制任务既可以部署在业务服务器,也可部署在精卫集群。
- 数据过滤功能:用户通过web控制台,就可以灵活地添加、配置过滤器,虑选满足业务需求的数据。
- 丰富的日志展现形式:用户通过web页面,不但可以查看复制任务运行时的实时数据,而且通过查看历史数据分析复制任务的运行情况,为业务分析、bug定位、监控报警提供便利。
- 数据再散列:利用TDDL完善的分库分表规则,可以实现数据的再散列。
- 多种途径监控、告警:用户可通过旺旺、短信、邮件的形式接受运行时告警,及时了解系统运行的监控状况,为运维提供便利。
2.9 数据自动迁移引擎-愚公
数据自动迁移引擎,海量数据自动运维工具,可用于对用户无影响的自动扩容和缩容,数据平滑迁移,以及异构数据源迁移,目前已经完成了214次业务迁移或扩容。
愚公架构组成:
1. 一个Jvm Container对应多个instance,每个instance对应于一张表的迁移任务
2. instance分为三部分
a. extractor (从源数据库上提取数据,可分为全量/增量实现)
b. translator (将源库上的数据按照目标库的需求进行自定义转化)
c. applier (将数据更新到目标库,可分为全量/增量/对比的实现)
愚公架构特点:
1.全量+增量任务 (减少复杂度)
2.JDBC协议 (解决环境兼容性)
3.oracle物化视图 (解决记录增量日志)
4.引入translator扩展 (解决异构数据转化)
开源项目地址:https://github.com/alibaba/yugong
2.10 软负载配置中心-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, connection统计。
2.11 鹰眼 - EagleEye
EagleEye (鹰眼)通过收集和分析在不同的网络调用中间件上的日志埋点,可以得到同一次请求上的各个系统的调用链关系,有助于梳理应用的请求入口与服务的调用来源、依赖关系。
同时,也对分析系统调用瓶颈、估算链路容量、快速定位异常有很大帮助。另外,业务方也可以在调用链上添加自己的业务埋点,使网络调用和实际业务内容得到关联。
2.12 实时计算-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
2.13 天枢-VipServer
通过集中式的配置向客户提供路由信息,以非网关的形式实现负载均衡功能;支持多种映射策略(轮询、轮询+同机房、轮询+同网段);通过健康探测机制,自动剔除不健康的机器,实现集群之间调用的透明化;对调用量、调用方等数据也有一定程度的反馈。
2.14 注册中心-ConfigServer
大家有Eureka使用经验的话,对ConfigServer就很好理解,它主要提供非持久配置的发布和订阅。07/08年间在淘宝内部开发使用的时候,由于ZooKeeper还没有开源,不然可能会基于ZooKeeper来进行改造。主要使用场景是为分布式服务框架提供软负载功能所必须的服务地址列表。
2.15服务框架- Pandora
Pandora,中文名潘多拉,是淘宝网中间件团队打造的,基于HSF隔离技术构建的全新一代隔离容器。从解决二方包依赖冲突出发,致力于统一管理通用的二方包,包括方便的二方包升级管理,监控和管理,建立统一的二方包扩展编程方式等。
2.16 生产环境性能分析工具-TProfiler
TProfiler是一个可以在生产环境长期使用的性能分析工具。它同时支持剖析和采样两种方式,记录方法执行的时间和次数,生成方法热点对象,创建热点线程状态分析等数据,为查找系统性能瓶颈提供数据支持。
TProfiler在JVM启动时把时间采集程序注入到字节码中,整个过程无需修改应用源码,运行时会把数据写到日志文件,一般情况下每小时输出的日志小于50M。
业界同类开源产品都不是针对大型Web应用设计的,对性能消耗较大不能长期使用,TProfiler解决了这个问题。目前TProfiler已应用于淘宝的核心Java前端系统。
部署后低峰期对应用响应时间影响20% 高峰期对吞吐量大约有30%的降低(高峰期可以远程关闭此工具)。
开源地址:https://github.com/alibaba/TProfiler
ref:阿里有哪些厉害的开源中件间?15页技术架构PPT,快收藏!-CSDN博客
3. 自研中间件的原因
- 定制化需求:阿里巴巴的业务规模和复杂度巨大,需要满足特定的业务需求和性能要求。通过自研中间件,阿里巴巴可以根据自身需求进行深度定制和优化,以提供更好的性能和稳定性。
- 高可用性和可靠性:阿里巴巴的业务对中间件的高可用性和可靠性要求非常高。自研中间件可以根据业务场景和需求进行架构设计和技术选型,以保证数据的安全性和服务的连续性。
- 阿里生态集成:阿里巴巴拥有庞大的阿里云生态系统和云原生技术栈。自研中间件可以更好地集成到阿里云的产品和服务中,提供更加完整的解决方案和生态系统。
- 安全性考虑:阿里巴巴是一家大型互联网企业,面临着各种安全威胁和攻击。自研中间件可以针对阿里巴巴的安全需求进行定制开发,提供更高的安全性和防护能力。
- 技术创新和积累:自研中间件可以提供阿里巴巴技术团队的创新和积累。通过自主研发中间件,阿里巴巴能够在技术上保持领先地位,并能够更好地满足未来的业务需求。
尽管阿里巴巴自研了许多中间件,但同时也积极参与和贡献开源社区。例如,阿里巴巴是Apache Dubbo和RocketMQ等开源项目的发起者和主要贡献者。通过开源,阿里巴巴可以与全球开发者社区合作,共同推动中间件技术的发展和创新。