ITPub博客

首页 > 数据库 > 数据库开发技术 > 大数据&UMP系统架构之分布式数据库系统和消息队列、统一协调服务【上】

大数据&UMP系统架构之分布式数据库系统和消息队列、统一协调服务【上】

原创 数据库开发技术 作者:小南瓜开发平台 时间:2023-11-06 08:00:00 0 删除 编辑

什么是UMP系统架构

UMP系统架构(UnifiedMySQLPlatform)是由阿里集团核心系统数据库团队设计与实现的,提供低成本和高性能的MySQL云数据服务。它具有四大特点:单一访问入口、多管家消除单点故障、弹性动态增加资源、隔离。

它遵循了以下原则:保持单一的系统对外入口,并且为系统内部维护单一的资源池,消除单点故障,保证服务的高可用性,保证系统具有良好的可伸缩性,能够动态地增加、删减计算与存储节点,保证分配给用户的资源也是弹性可伸缩的,资源之间相互隔离,确保应用和数据安全。UMP系统功能包括容灾,通过创建主库和从库来实现。主库和从库的状态由Zookeeper负责维护。

UMP在设计时需要遵循以下原则:

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


UMP架构涉及到的技术和中间件

分布式数据库管理系统【Mnesia】

Mnesia是专为工业级电信应用打造,使用符号编程语言Erlang写成的多用户,分布式数据库管理系统。它尝试解决典型电信系统的数据管理问题,具备一些在传统数据库中通常找不到的特性。电信应用有许多不同于传统数据库管理系统的需求,用Erlang语言实现的应用程序需要具备宽广的特性,这是传统数据库管理系统无法满足的。

Mnesia的设计符合以下需求:

  1. 快速实时的键/值查找。

  2. 主要用于运营和维护的非实时复杂查询。

  3. 由于分布式应用导致的分布式数据。

  4. 高容错。

  5. 动态重配置。

  6. 复杂对象。


Mnesia的优点包括:

  1. 快速高效的读写操作:Mnesia以这个特点著称,可以满足高并发的数据访问需求。

  2. 支持分布式系统:Mnesia可以处理分区和故障容错等分布式系统需求,提供了多种事务处理方式。

  3. 支持多种数据类型:Mnesia可以存储多种类型的数据,包括关系型、文档型、键值型和对象型等,可以根据用户的需求灵活选择。

  4. 与Erlang紧密结合:Mnesia与Erlang语言紧密结合,这使得它在操作数据时没有阻抗失配的问题。

Mnesia也存在一些缺点:

  1. 功能相对有限:相比一些成熟的数据库管理系统,Mnesia的功能相对有限。

  2. 移植性有待提高:虽然Mnesia的移植性不错,但仍然需要更多的工作来确保完全的移植性。

  3. 性能受磁盘操作影响:由于Mnesia的永久存储机制由操作系统的文件系统实现,其性能在一定程度上取决于磁盘操作。


RabbitMQ消息队列

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


RabbitMQ的优点:

  1. 异步:提升系统的响应速度,吞吐量。

  2. 解耦:服务之间进行解耦,才可以减少服务之间的影响,提高系统整体的稳定性以及可扩展性。另外解耦后可以实现数据分发。生产者发送一个消息后,可以由一个或者多个消费者进行消费,并且消费者的增加或者减少对生产者没有影响。

  3. 削峰:以稳定的系统资源应对突发的流量冲击。

RabbitMQ的缺点:

  1. 系统可用性降低:系统引入的外部依赖增多,系统的稳定性就会变差。一旦MQ宕机,就会对业务产生影响。

  2. 系统的复杂度提高:引入MQ后系统的复杂度会大大提高。以前服务之间可以进行同步的服务调用,引入MQ后,会变成异步调用,数据链路会变得更复杂。并且还会带来一系列的问题。

  3. 消息一致性问题:A系统处理完业务,通过MQ发送消息给B、C系统进行后续的业务处理。如果B系统成功,C系统失败,这就需要考虑消息的一致性。


RabbitMQ适用于以下场景:

  1. 异步处理:在分布式系统中,异步处理是常见的解耦方式。通过使用RabbitMQ,可以将任务异步发送到消息队列中,由消费者异步处理,从而实现系统解耦和高并发处理。

  2. 多个应用之间的耦合:由于消息是平台无关和语言无关的,而且语义上也不再是函数调用,因此更适合作为多个应用之间的松耦合的接口。

  3. 应用内的同步变异步:比如订单处理,就可以由前端应用将订单信息放到队列,后端应用从队列里依次获得消息处理,高峰时的大量订单可以积压在队列里慢慢处理掉。由于同步通常意味着阻塞,而大量线程的阻塞会降低计算机的性能。

  4. 消息驱动的架构(EDA):系统分解为消息队列,和消息制造者和消息消费者,一个处理流程可以根据需要拆成多个阶段(Stage),阶段之间用队列连接起来,前一个阶段处理的结果放入队列,后一个阶段从队列中获取消息继续处理。

  5. 应用需要更灵活的耦合方式:如发布订阅,比如可以指定路由规则。

  6. 跨局域网,甚至跨城市的通讯(CDN行业):比如北京机房与广州机房的应用程序的通信。

  7. 日志处理:RabbitMQ可用于日志处理,例如日志收集、日志分析等。

  8. 实时数据处理:在大数据和物联网应用中,实时数据处理是非常重要的需求。RabbitMQ可以用于实现实时数据处理。

ZooKeeper协调服务

ZooKeeper是一个开源的分布式协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。


它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。


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

ZooKeeper的优点:

  1. 分布式协调过程简单:ZooKeeper提供了一种简单的分布式协调机制,使得不同的进程或节点能够方便地进行协调和通信。

  2. 高度同步:ZooKeeper服务器之间既存在互斥又存在合作,这有助于实现分布式系统的一致性。

  3. 有序消息:ZooKeeper跟踪每个更新的顺序,保证了消息的有序性,这有助于实现更高级别的抽象。

  4. 序列化:ZooKeeper对数据进行编码,确保了数据的序列化,同时可确保应用程序始终如一地运行。

  5. 可靠性:一旦ZooKeeper更新了数据,更新后的数据会一直保持,直到被覆盖更新,因此它非常可靠。

  6. 原子性:在ZooKeeper中,事务只有两种情况,要么全部成功,要么全部失败,没有中间状态的情况。

  7. 实时性:ZooKeeper保证在一定时间段内,客户端最终一定能从服务器上读到最新的数据状态。

  8. 可扩展性:可以通过部署更多机器来加强ZooKeeper的性能。

ZooKeeper的缺点:

  1. 适用场景有限:ZooKeeper并不是适用于所有场景的最佳解决方案,它的设计和性能可能不适合某些特定的应用场景。

  2. 维护成本高:使用ZooKeeper需要一定的维护成本,包括配置、监控和管理等方面。

  3. 单点故障问题:虽然ZooKeeper可以提供高可用性,但仍然存在单点故障的问题,即如果ZooKeeper服务器出现故障,整个系统可能会受到影响。

ZooKeeper适用于以下场景:

  1. 分布式协调:ZooKeeper可以用于协调多个进程或节点之间的通信和同步。

  2. 配置管理:ZooKeeper可以用于存储和管理系统的配置信息,使得配置信息的修改和分发更加简单和可靠。

  3. 命名服务:ZooKeeper可以用于构建分布式系统的命名服务,使得节点能够方便地查找和访问其他节点或资源。

  4. 分布式锁:ZooKeeper可以用于实现分布式锁,提高系统的可靠性和一致性。

  5. 事件通知:ZooKeeper可以用于传递事件通知,使得各个节点能够及时地做出响应。

总的来说,ZooKeeper适用于需要分布式协调、配置管理、命名服务、分布式锁和事件通知等场景的系统。然而,在选择使用ZooKeeper时,需要根据具体的应用场景和需求进行评估和选择。



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

请登录后发表评论 登录
全部评论

注册时间:2020-08-21

  • 博文量
    209
  • 访问量
    89518