@[TOC](数据库管理403期 2026-01-27)
数据库管理-第403期 分布式数据库在运营商落地的痛点(20260127)
作者:胖头鱼的鱼缸(尹海文)
Oracle ACE Pro: Database
PostgreSQL ACE
10年数据库行业经验
拥有OCM 11g/12c/19c、MySQL 8.0 OCP、Exadata、CDP等认证
墨天轮MVP,ITPUB认证专家
圈内拥有“总监”称号,非著名社恐(社交恐怖分子)
公众号:胖头鱼的鱼缸
CSDN:胖头鱼的鱼缸(尹海文)
墨天轮:胖头鱼的鱼缸
ITPUB:yhw1809
IFClub:胖头鱼的鱼缸
除授权转载并标明出处外,均为“非法”抄袭
这几天在和客户商讨一个电视业务的场景,遇到了一个相对极端的需求,简单来说就是在主流业务时段,客户在看电视的时候不能因任何故障(其实也不严谨,机顶盒挂了、家里或片区停电、片区网线挖断这类不可抗力场景还是需要排除的)有不好的体验。
本次业务系统选型的数据库是一款分布式数据库,因此本文以前期解决该业务痛点为核心,顺带探讨一下运营商其他业务系统在使用分布式数据库需要考量什么。(1. 聚焦本地部署;2. 不会和集中式数据库做对比)
说真的,客户实时使用的场景要解决客户体验的问题,比一些看似要求更高的场景(比如计费)更难。首先我们需要明确分布式数据库天然高可用…么?从多副本架构来看,它一定是高可用的,可以做到极低的RTO和RPO,在本次探讨的场景下,其实主要需要考量的是RTO,即故障恢复时间,这直接影响着业务连续性。
需要明确的是,在真实分布式数据库使用场景下,无论是基于Paxos、Raft还是其他协议,在异常情况下选主的过程,即要预防网络的不稳定性引起误判(可以扯回到CAP),还要判断数据落地情况确保数据不丢失。结合不那么靠谱的本地硬件,因此实际的RTO往往比宣传的更长。进阶到业务代码层面,短时的数据库不可用还可能带来报错和拥塞,可能进一步增加全局的业务恢复时长。
当然我们一般还需要考虑单IDC故障(断电、火灾等),还需要考虑跨IDC的容灾架构。无论是同集群副本跨IDC,还是不同IDC部署不同集群做数据库复制,都会因为跨IDC网络延迟的增加、集群元数据同步(同集群)、数据同步(跨集群)等影响而将RTO放大。当然在本次探讨的电视业务场景下,如真出现IDC级别故障,报障短时间中断在一定程度上还是可以“接受”的。
回到本次业务的具体硬件场景,每台服务器上有4块使用U.2接口的NVMe SSD,泪流满面啊,终于不是SATA SSD了。但随之而来的问题是,无法做硬件级别的RAID(需要考虑解决方案和成本)。也就意味着,如果使用直通盘方式使用逻辑卷管理并使用这四块SSD,如果是主节点任何一块磁盘故障(概率其实很低)都会触发较长时间选主切换,而客户想要实现的反而是类似于硬件RAID的效果,即单块磁盘异常不影响生成,可以通过替换磁盘或业务低谷期人工切换节点后再处置。(这里需要强调一点,客户并没有要求消除CPU、内存、主板异常后带来的故障影响)
软RAID能解决这一问题么,在实际测试过程中,出现了以下问题:
- 磁盘延迟来到了毫秒级,RAID5的随机写延迟更是来到了20ms以上
- RAID10的IOPS不到100W,RAID5则低于10W
- 重启服务器RAID10需要一段时间重建
- 模拟单块磁盘故障,RAID降级后IO性能会严重下降
- 高并发场景下会带来较多的额外CPU开销
- …
因此软RAID单是在性能层面其实就并不能很好的支撑场景需求,因此可能只能回到使用裸盘+依赖数据库本身高可用模式。
有一种我认为可行的方案则是使用部分主机整合其他主机的磁盘(可能还需要额外内存、网线)使用企业级分布式存储软件构建一套高性能分布式存储,用这套分布式存储来存放实际数据,而其余机器负责运算。这样还有个好处就是,如果数据库服务器异常,可以通过空闲服务器即刻挂载磁盘快速恢复。但问题依然是,分布式存储想达到足够性能需要付出的也会很多。
回归到电视业务本身,它不是一个高频更新的业务(电视台和电视节目特性),因此还可以使用CDC同步的方式去构建多点(高可用)的近实时缓存层,让业务访问优先使用缓存数据而不是数据库,数据库的异常也不会直接导致业务不可用。但这也会带来业务架构层的复杂与冗余,开发压力和维护压力都会明显增加。当然这还需要更多的调研、探讨与测试。
再回到文章开头,我提到的电视业务场景对数据库的要求可能比计费场景更高,我的理由是一般来说分布式数据库切换+应用处理完成不会来到分钟级,一般来说偶发分钟内的延迟入库并不会带来严重的后果,这期间积压的数据库操作可以通过业务程序或消息队列进行暂存,避免造成后续更大范围的影响。
当然运营商内还有很多不同场景,它们的需求都不一样,实际需求可能源自于高时效性、高可用性、高性能、高稳定性、大数据量、多模态等中的一个或多个组合,因此还需要具体问题具体分析。
老规矩,知道写了些啥。
