打开网易新闻 查看精彩图片

MariaDB 产品总监 Vikas Mathur 详细介绍了两种主要数据库高可用架构的优缺点和应用场景。

主动-被动数据库架构解析

主动-被动是一种高可用部署方式,其中主数据库处理所有读写操作,一个或多个备用副本通过同步或异步复制持续接收变更。同步复制确保主数据库在提交事务前等待副本确认,保证零数据丢失但会引入延迟。异步复制允许主数据库立即提交而不等待副本,提高了性能但如果主数据库在变更到达备用数据库前失效,可能会有几秒到几分钟的数据丢失风险。

副本保持空闲状态直到主数据库失效。当故障发生时,必须提升一个副本成为新的主数据库。提升可以手动执行,由管理员检测故障并执行提升命令,也可以通过自动故障转移,由自动化工具处理检测和提升。

MariaDB MaxScale 是位于应用程序和数据库服务器之间的数据库代理,使故障转移对应用层透明。它持续监控数据库健康状况,在几秒内自动检测主数据库故障,并提升备用副本。MaxScale 还能保持连接并在故障转移后重放事务,为应用程序实现零停机时间。

主动-被动架构的优势包括:操作复杂性低,技术成熟且经过数十年生产使用的充分测试,无需冲突解决因为同时只有一个数据库接受写入。主要缺点是副本在需要前保持空闲状态造成支出浪费,但使用正确的自动化工具如 MariaDB MaxScale 可以消除停机时间。

主动-主动数据库架构特点

主动-主动数据库架构是多个数据库节点同时运行,数据持续同步,流量分布在所有节点上。它确保所有节点都能服务读写流量,不像主动-被动架构中被动节点处于空闲状态不提供流量服务。

然而,同步复制通常会增加写入延迟,因为所有节点都需要确认提交。在某些用例中,如跨区域的实时库存管理,它还可能导致更高的操作复杂性和冲突。它对节点间网络延迟敏感,正确实施成本更高。

主动-主动架构有一种变体,只有主节点提供写入服务,而读取分散到所有副本节点(有时跨区域分布)。这种架构可以通过异步复制支持,但要求应用程序能够容忍同一数据元组写入和读取之间的一些延迟。许多企业使用这种主动-主动版本来最大化硬件利用率,实现低写入延迟,同时仍能达到高可用性,只是有一些最小的数据丢失风险。

MariaDB Galera 结合 MaxScale 为客户提供主动-主动解决方案,实现所有节点的充分利用和零停机故障转移。MariaDB 平台可以实现两种主动-主动形式:同步和异步。

规模对架构限制的影响

从定义上看,主动-被动架构会产生更高成本,因为它需要不主动服务流量的备用副本。随着规模增加(垂直扩展更大节点和水平扩展备用集群中更多被动节点),这种情况会加剧。

其他限制如可扩展性更多受到底层使用的复制类型影响。异步复制能很好地水平扩展读取流量,但写入(集中在单个节点)只能通过增加节点大小进行垂直扩展。

同步复制技术可以通过利用主动和被动节点使写入流量翻倍,但水平扩展仅限于少数几个节点,因为节点间网络延迟会降低写入性能。

客户架构迁移趋势

我们看到组织转向基于异步复制的主动-主动架构(例如使用 MariaDB Maxscale),以实现硬件的最大利用率(降低成本)并实现完全的读取扩展和故障转移期间的零停机时间。

主动-主动整体上也在增长,因为云原生应用程序、大型电商平台和实时金融交易系统需要即时数据和订单处理,如果应用程序停机哪怕几秒钟都会损失业务。

基于同步复制的完全主动-主动设置更复杂,水平可扩展性有限,因此主要用于支付处理等关键任务应用程序。

缓解主动-主动架构缺点的方法

MariaDB MaxScale 等内置集群管理工具显著降低了操作复杂性。主动-主动架构在采用同步内部复制时避免数据一致性问题,确保所有节点保持相同的数据状态。这些高可用性解决方案针对停机时间不可接受且性能要求很高的企业部署。

从单一供应商采购整个数据库堆栈的组织受益于统一支持,消除了多供应商环境中常见的相互推诿和集成问题。

数据库代理是位于客户端应用程序和一个或多个数据库服务器之间的中间软件层,将应用程序与底层数据库基础设施解耦。它拦截、管理、路由,有时转换数据库请求,提供连接池和管理、负载均衡、读写分离、高可用性和故障转移处理、查询路由和重写、安全增强以及可观测性和操作,如日志记录、指标,有时还有查询缓存或转换,而无需更改应用程序代码。

Q&A

Q1:主动-被动和主动-主动数据库架构有什么区别?

A:主动-被动架构中主数据库处理所有读写操作,副本保持空闲直到故障发生;主动-主动架构中多个节点同时运行,所有节点都能服务读写流量,实现更好的资源利用率。

Q2:MariaDB MaxScale 在数据库架构中起什么作用?

A:MaxScale 是数据库代理,位于应用程序和数据库服务器之间,持续监控数据库健康状况,自动检测故障并提升备用副本,同时保持连接和重放事务,为应用程序实现零停机故障转移。

Q3:企业应该如何选择主动-被动还是主动-主动架构?

A:主动-被动适合操作复杂性要求低的场景,技术成熟稳定;主动-主动适合云原生应用、电商平台、金融交易等需要即时数据处理且不能容忍停机的业务场景。