UMP(Unified MySQL Platform)是由阿里集团核心系统数据库团队设计与实现的,提供低成本和高性能的MySQL云数据服务。
UMP系统架构
先不用着急看图,后面介绍各个组件后再来看就比较清楚了。
(1)Mnesia:分布式数据库管理系统
Mnesia支持事务、提供透明的数据分片、利用两阶段锁来实现分布式事务、具有线性扩展性(可扩展到至少50个节点)。
Mnesia的数据库模式可在运行时动态重配置,表可被迁移或复制至多节点来实现高容错性。
(2)RabbitMQ:工业级的消息队列产品
RabbitMQ作为消息传输中间件来使用,能实现可靠的消息传送。
UMP集群中各节点的通信不需要建立专门的连接,而是通过读写消息队列来实现的。
(3)Zookeeper:协同工作系统
Zookeeper提供如统一命名、状态同步、集群管理和分布式应用配置项的管理等服务,用于构建分布式应用或减轻分布式应用程序所承担的协调任务。
在UMP系统中,Zookeeper主要用来:
作全局配置服务器;
选出集群总管(提供分布式锁);
监控所有MySQL实例。
(4)LVS:Linux虚拟服务器
它主要用于实现UMP系统中集群内部的负载均衡,主要采用两种技术:IP负载均衡技术和基于内容请求分发技术,这里暂时不对这两种技术作深入。
(5)Controller服务器:为UMP集群提供各种管理服务(成员管理、元数据存储、MySQL实例管理、故障恢复、备份、迁移、扩容等)
Cotroller服务器上运行了一组MNesia分布式数据库服务,其中存储了各种系统元数据(集群成员、用户的配置信息与状态信息、用户名到MySQL实例地址的映射关系【路由表】等)。
其他服务器组件需要获取用户数据时,可向Controller服务器发送请求。
UMP系统中部署了多台Controller服务器来避免单点故障、保证系统的高可用性。这时,Zookeeper将出马帮忙选出一个“总管”。
(6)Web控制器:向用户提供系统管理界面
(7)Proxy服务器:完全实现了MySQL服务,向用户提供访问MySQL数据库的服务
(8)Agent服务器:它部署在运行MySQL进程的机器上,用来管理每台物理机上的MySQL实例
(9)日志分析服务器:存储和分析Proxy服务器传入的用户访问日志,支持实时查询一段时间内的慢日志和统计报表
(10)信息统计服务器:定期将采集到的用户连接数、QPS(每秒查询次数)数值及MySQL实例的进程状态等信息进行统计展示在Web界面上,或将结果作为以后资源分配等的依据。
(11)愚公系统:用于做数据迁移,可在不停机的情况下动态扩容、缩容和迁移。
下面再来看这张图:
右上角的MySQL集群,负责具体的数据存储。
Controller服务器用来管理各个集群,并且为了避免单点故障,往往有多个。
但一般情况下,只会让一个生效、其他备用,这就是由ZooKeeper服务器来帮忙实现的。同时Zookeeper服务器还会进行整个集群配置文件的管理和监控MySQL集群的总体运行状态,一旦探测到故障,马上向Controller汇报。
Proxy服务器可以看到是用来连接用户和整个云数据库的,用户通过它来进行数据的查询访问。
整个集群通过LVS来实现负载均衡。用户能通过Web控制台查询各个组件运行的状态信息。各个组件之间传递消息是通过RabbitMQ来实现的。
有的部分在介绍组件时已经阐述,以上是对UMP系统架构一个全局的认识,可以帮助了解一个具体的云数据库是如何架构的。