什么是UMP系统架构
UMP系统架构(UnifiedMySQLPlatform)是由阿里集团核心系统数据库团队设计与实现的,提供低成本和高性能的MySQL云数据服务。它具有四大特点:单一访问入口、多管家消除单点故障、弹性动态增加资源、隔离。
它遵循了以下原则:保持单一的系统对外入口,并且为系统内部维护单一的资源池,消除单点故障,保证服务的高可用性,保证系统具有良好的可伸缩性,能够动态地增加、删减计算与存储节点,保证分配给用户的资源也是弹性可伸缩的,资源之间相互隔离,确保应用和数据安全。UMP系统功能包括容灾,通过创建主库和从库来实现。主库和从库的状态由Zookeeper负责维护。
UMP在设计时需要遵循以下原则:

UMP架构需解决如下2个问题:

UMP架构涉及到的技术和中间件
分布式数据库管理系统【Mnesia】
Mnesia是专为工业级电信应用打造,使用符号编程语言Erlang写成的多用户,分布式数据库管理系统。它尝试解决典型电信系统的数据管理问题,具备一些在传统数据库中通常找不到的特性。电信应用有许多不同于传统数据库管理系统的需求,用Erlang语言实现的应用程序需要具备宽广的特性,这是传统数据库管理系统无法满足的。
Mnesia的设计符合以下需求:
快速实时的键/值查找。
主要用于运营和维护的非实时复杂查询。
由于分布式应用导致的分布式数据。
高容错。
动态重配置。
复杂对象。
Mnesia的优点包括:
快速高效的读写操作:Mnesia以这个特点著称,可以满足高并发的数据访问需求。
支持分布式系统:Mnesia可以处理分区和故障容错等分布式系统需求,提供了多种事务处理方式。
支持多种数据类型:Mnesia可以存储多种类型的数据,包括关系型、文档型、键值型和对象型等,可以根据用户的需求灵活选择。
与Erlang紧密结合:Mnesia与Erlang语言紧密结合,这使得它在操作数据时没有阻抗失配的问题。
Mnesia也存在一些缺点:
功能相对有限:相比一些成熟的数据库管理系统,Mnesia的功能相对有限。
移植性有待提高:虽然Mnesia的移植性不错,但仍然需要更多的工作来确保完全的移植性。
性能受磁盘操作影响:由于Mnesia的永久存储机制由操作系统的文件系统实现,其性能在一定程度上取决于磁盘操作。

RabbitMQ消息队列
RabbitMQ是一个工业级的消息队列产品。实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。它是由Erlang语言开发,基于AMQP协议实现的消息队列,是一种应用程序之间的通信方法。RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。

RabbitMQ的优点:
异步:提升系统的响应速度,吞吐量。
解耦:服务之间进行解耦,才可以减少服务之间的影响,提高系统整体的稳定性以及可扩展性。另外解耦后可以实现数据分发。生产者发送一个消息后,可以由一个或者多个消费者进行消费,并且消费者的增加或者减少对生产者没有影响。
削峰:以稳定的系统资源应对突发的流量冲击。
RabbitMQ的缺点:
系统可用性降低:系统引入的外部依赖增多,系统的稳定性就会变差。一旦MQ宕机,就会对业务产生影响。
系统的复杂度提高:引入MQ后系统的复杂度会大大提高。以前服务之间可以进行同步的服务调用,引入MQ后,会变成异步调用,数据链路会变得更复杂。并且还会带来一系列的问题。
消息一致性问题:A系统处理完业务,通过MQ发送消息给B、C系统进行后续的业务处理。如果B系统成功,C系统失败,这就需要考虑消息的一致性。
RabbitMQ适用于以下场景:
异步处理:在分布式系统中,异步处理是常见的解耦方式。通过使用RabbitMQ,可以将任务异步发送到消息队列中,由消费者异步处理,从而实现系统解耦和高并发处理。
多个应用之间的耦合:由于消息是平台无关和语言无关的,而且语义上也不再是函数调用,因此更适合作为多个应用之间的松耦合的接口。
应用内的同步变异步:比如订单处理,就可以由前端应用将订单信息放到队列,后端应用从队列里依次获得消息处理,高峰时的大量订单可以积压在队列里慢慢处理掉。由于同步通常意味着阻塞,而大量线程的阻塞会降低计算机的性能。
消息驱动的架构(EDA):系统分解为消息队列,和消息制造者和消息消费者,一个处理流程可以根据需要拆成多个阶段(Stage),阶段之间用队列连接起来,前一个阶段处理的结果放入队列,后一个阶段从队列中获取消息继续处理。
应用需要更灵活的耦合方式:如发布订阅,比如可以指定路由规则。
跨局域网,甚至跨城市的通讯(CDN行业):比如北京机房与广州机房的应用程序的通信。
日志处理:RabbitMQ可用于日志处理,例如日志收集、日志分析等。
实时数据处理:在大数据和物联网应用中,实时数据处理是非常重要的需求。RabbitMQ可以用于实现实时数据处理。
ZooKeeper协调服务
ZooKeeper是一个开源的分布式协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。
它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。

ZooKeeper的优点:
分布式协调过程简单:ZooKeeper提供了一种简单的分布式协调机制,使得不同的进程或节点能够方便地进行协调和通信。
高度同步:ZooKeeper服务器之间既存在互斥又存在合作,这有助于实现分布式系统的一致性。
有序消息:ZooKeeper跟踪每个更新的顺序,保证了消息的有序性,这有助于实现更高级别的抽象。
序列化:ZooKeeper对数据进行编码,确保了数据的序列化,同时可确保应用程序始终如一地运行。
可靠性:一旦ZooKeeper更新了数据,更新后的数据会一直保持,直到被覆盖更新,因此它非常可靠。
原子性:在ZooKeeper中,事务只有两种情况,要么全部成功,要么全部失败,没有中间状态的情况。
实时性:ZooKeeper保证在一定时间段内,客户端最终一定能从服务器上读到最新的数据状态。
可扩展性:可以通过部署更多机器来加强ZooKeeper的性能。
ZooKeeper的缺点:
适用场景有限:ZooKeeper并不是适用于所有场景的最佳解决方案,它的设计和性能可能不适合某些特定的应用场景。
维护成本高:使用ZooKeeper需要一定的维护成本,包括配置、监控和管理等方面。
单点故障问题:虽然ZooKeeper可以提供高可用性,但仍然存在单点故障的问题,即如果ZooKeeper服务器出现故障,整个系统可能会受到影响。
ZooKeeper适用于以下场景:
分布式协调:ZooKeeper可以用于协调多个进程或节点之间的通信和同步。
配置管理:ZooKeeper可以用于存储和管理系统的配置信息,使得配置信息的修改和分发更加简单和可靠。
命名服务:ZooKeeper可以用于构建分布式系统的命名服务,使得节点能够方便地查找和访问其他节点或资源。
分布式锁:ZooKeeper可以用于实现分布式锁,提高系统的可靠性和一致性。
事件通知:ZooKeeper可以用于传递事件通知,使得各个节点能够及时地做出响应。
总的来说,ZooKeeper适用于需要分布式协调、配置管理、命名服务、分布式锁和事件通知等场景的系统。然而,在选择使用ZooKeeper时,需要根据具体的应用场景和需求进行评估和选择。

原文作者:小南瓜开发平台;如有侵权,请联系管理员删除。