数据库

首页 » 常识 » 预防 » 网易云数据库架构设计实践二
TUhjnbcbe - 2021/6/14 18:40:00

本系列以私有云为例,邀请网易云数据库核心研发人员郭忆,给我们讲述网易云数据库架构设计实践。

网易云数据库架构设计实践系列

作者介绍:郭忆

网易杭州研究院资深开发工程师,年加入网易,负责网易私有云关系数据库服务RDS项目,对数据库高可用架构、运维自动化、在线扩展有较丰富的经验,年DTCC数据库大会上分享“云数据库在网易的发展与实践”。

在网易云数据库架构设计实践(一)中我们简单介绍了架构设计,怎样去发挥这些架构的作用呢?

为了实现高可用,通常管理服务器部署在三个物理节点上,利用Zookeeper提供的分布式锁的功能,只有一个对外提供服务。如果该服务器宕机,则系统利用Zookeeper提供的选主的功能选出一个新的节点对外提供服务。

这个图展示了管理服务器的功能模块,主要包括3层:

第一层——API层,负责定义数据库资源和封装管理操作,对外提供API接口;

第二层——管理流程层,负责实现所有的管理操作业务逻辑;

第三层——调度控制和外部通信层,主要负责控制和调度所有的管理业务流程,同时封装对外通信的接口。

管理服务器是整个系统的核心,相当于系统的“大脑”。所有的管理操作都是由管理服务器负责触发、组织和实施的。

在设计管理服务器时,我们主要面临着两个问题:

第一,通常一个完整的数据库管理流程包含较多步骤,而这些管理流程经常需要动态的添加和修改,所以系统的扩展性和可维护性非常重要;

第二,所有的实例都由管理服务器集中管理,如果出现网络或者其他硬件、软件故障,造成实例大面积宕机,就会出现大量实例进行故障恢复的情况,而在故障恢复中实例存在重建的可能,这样就会对底层云主机、云硬盘服务造成“风暴”,严重甚至会导致整个系统瘫痪,所以限流尤为关键。

怎么解决这两个问题?

我们在管理服务器中使用了“工作流”和“队列”的设计。每一个管理流程都被系统定位为一条工作流,每条工作流都是由多个可重复执行的原子操作组成。

工作流上的操作都是由线程池中的不同的线程负责完成的,任务之间的并发控制在定义工作流时指定,然后由工作流调度控制模块负责执行。所有的工作流都被定义在一个XML文件中,支持动态修改。

这样,动态地添加或者修改管理流程成为一件非常容易的事情。

为了达到“限流”的目的,我们设计了一个权重队列,所有进入队列的任务在进入队列时会调用一个外部定义的权重计算函数,计算该任务的重要程度,然后进行排序,最重要的任务位于队首,优先执行。队列可以设置任务执行的速度,同时允许禁止任何任务执行。

RDS模块介绍

Agent——管理服务器在虚拟机的内部代理,和MySQL实例一起部署在虚拟机中,负责执行管理服务器对MySQL实例的管理操作,同时还负责收集数据库层的监控信息;

系统库——负责存储数据库实例、备份的元数据信息,作为管理服务器的持久化组件;

监控报警服务——负责整理所有的监控信息,允许用户设置报警条件,并在系统达到预设值后,进行报警;

日志分析系统——收集所有组件的日志信息,按照用户、实例、节点进行归类整理,进行跟踪报警;

认证授权——负责云服务用户的注册、登陆、权限认证等功能。

系统使用的开源组件介绍

目前系统主要使用的开源组件有ZeroMQ和Zookeeper。

ZeroMQ——消息队列,负责管理服务器和Agent之间的消息通信。

Zookeeper——开源的针对分布式系统的可靠协调系统,在云数据库中主要实现多个管理服务器之间的分布式锁、统一配置管理和选主的功能。

1ZeroMQ

ZeroMQ是一种更为轻量级的消息队列,与传统的AMQP协议的消息队列不同,它不需要独立的消息服务器,只需要引用一个lib库即可实现节点之间的通信。

因为异步传输、LockFree、消息不持久化等特性,ZeroMQ相比其他消息队列具有更高的消息通信效率。

ZeroMQ的设计理念是专注于底层消息的通信,所以ZeroMQ不负责消息的持久化和序列化。

对于持久化问题,上层应用可以通过消息重发来保证消息的可靠传输,但是这需要接收方能够判别重复消息,这个可以通过版本号的机制解决,即每一个消息都附带一个版本号字段,重复消息使用相同的版本号,接收方记录当前的版本号,如果出现等于或者小于当前版本号的消息,则认为是重复消息。

对于序列化问题,可以使用google的开源序列化框架protobuf实现。

2Zookeeper

管理服务器在启动时,会去Zookeeper上生成一个有序节点,同时如果该节点不是最小节点,则需要watch前一个比它小的节点,只有最小节点的管理服务器对外提供服务。

如果该服务器宕机,则watch该服务器对应节点的standby节点被唤醒,成为新的对外服务节点,这样避免了多个standby同时watch对外服务节点造成的“惊群现象”。

同时,watch宕机节点的所有Agent被唤醒后,会从Zookeeper上获取新的管理服务器节点的信息,完成配置修改。

马上
1
查看完整版本: 网易云数据库架构设计实践二