分布式数据库面临数据库可靠性、性能、成本挑战,2022年6月24日,天翼云&华为 联合创新中心正式开启,双方将基于华为闪存存储,共同探索数据库云原生的发展方向。围绕多写存储引擎、高性能高可用存储持续创新,打造更易维护、更高可用、更经济的分布式云原生数据库。
1 分布式数据库面临可靠性、性能、成本挑战
自1970年IBM的数学家Edgar F. Codd提出关系模型,关系数据库已有50余年历史,期间关系模型没有发生大的变化,而数据库体系架构则经历了以ORACLE为代表的商业数据库(IOE)—>以互联网产商去IOE为代表的分布式架构+开源数据库—>云原生数据库的三次大的转变,以适应业务的要求。
图 1数据库体系架构演变
在后两次的架构发展中,MySQL开源数据库扮演着重要的角色。它具有灵巧高效、易于使用的优势,因而应用广泛、生态成熟。业界大多都选择了MySQL开源数据库加分布式架构替代商业数据库。但随着业务的发展,MySQL自身和架构的先天问题也日益突出:
数据可靠性问题:基于开源数据库的分布式数据库以日志复制回放生成多副本实现数据持久化和高可用。受日志处理机制限制,在业务压力大或网络抖动时容易出现较大延迟,造成数据丢失风险或集群故障;
连续性故障问题:传统的故障处理方式是使系统运行在降级状态,但MySQL基于本地盘的部署方式从降级状态恢复到正常状态需要全量数据恢复,导致系统降级状态时间极长,二次故障风险大增;
性能影响:分布式事务和分布式查询在强ACID(AICD:原子性、隔离性、一致性和永久性)场景中有明显的性能下降,这很大程度抵消了分布式改造带来的好处;
扩展性差:由于数据库只能读写本服务器内磁盘的数据,增加实例进行性能扩展往往要花数小时甚至一天以上时间复制数据,同时即使只需要增加计算资源,也必须对应增加一份本地存储;
高成本:高成本一方面来自解决上述问题而增加的硬件投入和软件改造、运维成本,另一方面来自于非解耦资源池无法实现资源的按量分配和按需分配导致的资源浪费。
2 分布式数据库云原生改造思路和实践
以上问题大多涉及到数据库架构体系,仅从数据库本身进行优化难以根本解决,同时更换数据库代价大且时间长,因此业界当前主流做法是,采用对数据库进行云原生改造的方式来解决问题。云原生数据库的主要特点包括:
● 采用容器化、不可变基础设施(数据存储在外置存储,计算实例生成后不再变更)等云原生技术架构,解决故障快速切换和资源弹性扩展问题;
● 通过存算分离实现能力下移,尤其是可靠性能力和密集数据处理能力下移到存储,在利用存储能力快速提升数据库系统可靠性和性能的同时,降低了数据库开发难度。但这一策略同时也对存储的能力提出更高的要求。
● 通过存算分离实现解耦的资源池化,提升资源利用效率和分配速度;
实现云原生数据库架构第一步是保留MySQL等开源数据库的主从部署、本地数据访问架构,仅将算力转移到容器、将数据转移到外置存储的平滑演进方案;第二步则是通过数据库存储引擎改造彻底实现多实例共享存储的协同优化方案。
2.1 容器化+存算分离改造,以平滑演进模式向云原生迈出第一步
TeleDB首先采用容器化+存算分离改造的方案实现向云原生数据库的平滑演进:
图 2平滑演进云原生数据库架构与原架构对比
2.1.1 容器化和存算分离“根”技术解决可靠性和资源利用率问题
根技术能带来多方面的价值,在技术架构的确定中起着最关键作用,TeleDB的平滑演进方案就是抓住容器化和存算分离架构两大根技术,使TeleDB初步具备了云原生数据库能力,实现了可靠性和扩展性的提升及成本下降。
容器化实践:
● 计算资源池化:在容器化前,要提高资源利用率,需要在物理机上部署多个数据库实例或使用虚拟机。多实例方式很难实现实例间资源隔离和定量分配,而虚拟机对性能的影响限制了使用场景。采用容器后可以实现对CPU、内存的定量分配,实例被隔离在容器内,而且性能损耗很小,非常适合数据库业务;
● 实现运维自动化和知识代码化沉淀:容器声明式API可将DBA的运维经验转化为自动化的故障与运维处理能力。TeleDB开发了一套Operator资源控制器,实现了数据库集群的发放与管理,降低了运维成本,提升了可靠性;
● 为存算分离架构提供支撑:Kubernetes容器平台提供了CSI插件存储管理机制,实现了存储的动态分配和扩容等功能,这正是原来用物理机部署时所欠缺的。
存算分离架构实践:
● 存储资源池化:存算分离使存储与计算解耦,不会因为单个服务器上的计算或存储中任意资源不足就不能分配资源,从而同时提升了计算和存储的使用效率;
● 实现弹性伸缩:如果在扩容时发现服务器上资源不足,原来也需要将实例通过全量复制数据的方式搬迁到其它服务器,现在如果计算资源不足,可通过容器漂移快速搬迁,搬迁时间由天缩短为分钟级,存储资源不足则可直接动态扩容。
● 容器漂移和快速补从:
本地盘部署时,服务器故障后需要重建实例并全量复制数据这一过程耗时且牵扯运维人员精力,甚至业务高峰时很长时间都无法完成修复或扩容进而影响业务。
存算分离后容器既可漂移到其它服务器实现故障快速恢复,也可以作为从节点重新加入集群后增量同步数据,使数据恢复速度由小时级/天级缩短为分钟级。
2.1.2 容器化+存算分离改造实现资源利用率提升40%
经过初步的云原生改造,相同硬件条件下,通过灵活的调度以及细粒度的资源控制,数据库部署密度提升2倍以上,同时资源利用率提升了40%以上。TeleDB的可靠性得到提升,成本下降,同时应对互联网化业务以及疫情中对资源的突发需求的能力有了很大提升。
2.2 数据库存储引擎+高性能高可用存储协同,迈出云原生第二步
2.2.1 容器化+存算分离方案难以解决的问题
容器化+存算分离方案以最简单的方式释放了云原生架构的价值。但对比其它云原生应用,这种方案并未完全实现无状态化,分离后存储和网络能力也制约了云原生架构价值的发挥:
● 未能彻底解决数据可靠性问题:由于保留了以日志同步多副本的方式,数据丢失或故障风险未解决;
● 扩展能力仍有不足:在扩展读实例时,仍要全量复制数据,无法快速扩展;
● 多重冗余:由于保留了数据库多副本,外置存储上的多副本未起到提升可靠性的作用,反而抵消了成本优化效果并造成性能下降;
● 性能受限:网络、存储能力以及保留数据库高可用方案影响了数据库的整体性能,导致方案的使用场景受到了限制。
2.2.2 多写存储引擎技术创新,打造共享存储多写云原生数据库
多写存储引擎成为根技术新方向
针对以上问题,仍需要根技术创新来解决。除容器化之外,采用数据库多写存储引擎、高性能存储网络协议和专门研发的高性能高可用存储来实现存算分离,同时利用存储在数据处理上的优势将大量原需要数据库实现的功能下移到存储上实现,这种数据库与存储通过多写存储引擎协同优化的架构已成为业界云原生数据库的主流。
使用多写存储引擎可彻底实现数据库无状态化,可以获得更短的故障恢复时间、更佳的性能、更好的扩展性,显然选择多写多读方案作为数据库/存储协同优化的根技术是更好的选择。
华为数据存储-天翼云,优势互补携手创新
高性能存储网络、高性能、高可用的企业级存储和多写存储引擎跨多个技术领域,技术难度高,制约了云原生数据库的普及与发展。为推动分布式数据库云原生架构实现,华为与天翼云合作,以华为多写存储引擎和全闪存存储OceanStor Dorado为数据底座,依托天翼云TeleDB数据库,构建分布式云原生数据库。其特点如下:
● 高可用、易兼容:灵活的容器化高可用策略,大幅提升数据库服务可用性、故障恢复能力。结合TeleDB优化的数据库引擎,具备与开源MySQL的原生兼容性的同时,兼具极致的扩缩能力,便于业务平滑迁移;
● 支持多写:利用华为多写存储引擎,实现各实例完全相同的数据库读写能力,无数据延迟,相比一写多读模式故障恢复速度更快,多实例性能扩展无需改造应用,实现技术跨越发展;
● TeleDB容器化+共享存储多写实现数据库无状态化:多个实例共享一份数据,避免多重冗余,消除日志复制的数据不一致风险。无状态化彻底解除计算和存储的捆绑,扩容计算实例不需要复制数据和增加存储成本;
● 高可靠:利用华为OceanStor Dorado全闪存存储的分布式AA负载均衡架构、RAID2.0持久化技术、亚健康管理、SSD磨损均衡/反磨损均衡等能力,不但满足了数据库数据持久化能力下沉到存储对可靠性的严苛要求,还补齐了数据库快速数据重构、亚健康故障处理、SSD介质延寿和故障主动处理等能力,使数据库综合可靠性能能力有了大幅度提升;
● 高性能:华为OceanStor Dorado全闪存存储+多写存储引擎IO路径优化,相比原生MySQL数据库提升整体性能约100%;
● 高性能无损网络:支持基于以太网的RDMA组网,相比IB组网可实现高性能、低成本、通用性好的存储网络;
3 充分发挥数据库多写能力、关键能力向存储下沉成为下一步探索的方向
云原生数据库通过保留数据库SQL引擎的方式实现对原有数据库生态的兼容,但由于架构的变化,存储底座能力的发挥必须通过数据库的整合才能实现。TeleDB在基于MySQL数据库的开发与应用中有丰富的经验,为实现存算分离架构、发挥华为闪存存储高可用、高性能和综合成本优势起了至关重要的作用。未来双方将继续合作探索如何充分发挥数据库多写能力、通过TeleDB数据库体系化方案实现关键能力向存储下沉从而进一步提升数据库的性能、可靠性,降低成本,推动云原生数据库开放架构的成熟。
本文作者——庞毅 华为数据存储资深产品经理
苏飞 天翼云科技有限公司数据库技术专家