前言
应用系统演进过程中,应用层可以通过服务化,微服务,云化做扩展,数据库则往往成为难以扩展的点或者变为系统瓶颈。
数据库实例本身扩展可以采用主备架构,主从架构,主主架构等方案。
但如果更大规模的数据要求下,比如我们最近在设计新的面向亿级单量的新架构升级,就需要采取多机甚至多数据中心方案了。
单中心数据集群
单中心多机器方案可以采用主从式架构,数据读写请求落在主机,从机承担读请求。 主从同步问题往往是这种架构的主要问题,这也就引起了主从一致问题,线上case也有几次是因为主从同步延迟造成的。 所以我们需要在应用架构角度去考虑主从延迟造成数据不一致的问题。 主从系统的主成为了系统可用性的问题点,需要考虑主服务器健康状态监控,及如果主机出现问题,如何快速切换,且处理时间窗口内数据问题。
当然主从方式,受限于单机实例的承载能力,适用于小数据,规模小的应用场景。
针对于主机写压力的瓶颈,可以采用分散数据方式,将写数据落到多台实例上,共同承担压力,可以承载一定规模的业务场景。 当然这种问题的难点在于数据的负载均衡,数据之间的数据备份处理,同样在多实例节点上下线过程中的负载均衡和事实扩展。
多中心数据集群
当架构发展到更大规模,服务更多用户时,通常会将数据中心部署在多个地区。这也可以避免光缆被挖断的黑天鹅事件。 但是多机房同样存在数据可用性及数据一致性问题。
所以我们需要将多中心数据进行友好的切分,来将数据部署在不同的数据中心中,这样每个分区存储一部分数据,可以保证一定的数据和服务可用性。
数据中心根据地理位置划分可以解决一定的数据中心间网络同步造成的延迟。
由于一个数据中心只存储一部分数据,所以数据备份又是需要考虑的问题。这样可以避免一个地区故障造成数据问题而可能影响全局。
数据备份可以采用一下三种方式:
- 集中式备份
- 独立式备份
- 互备式备份
集中式备份 是将数据同步到独立的数据中心备份以保证数据安全。这种结构简单,但是投入成本高,存在极大的资源浪费与闲置问题,同样集中的数据中心也会有单点问题。
独立式备份 是给每个数据中心建立一个对应的备份节点,来起到容灾作用。这样投入成本同样巨大,但是更简单易实现,扩展性更好。
互备式备份 上面两种数据中心数据备份都存在各自的不足,于是可以结合以上两种方案的优点及特性设计互备式备份。 这种方案成本不会特别大,不需要建立额外的数据备份中心,各个节点之间进行数据互备,比如A节点备份B节点数据,B节点备份A节点数据,如果三个以上的分区,可以做到循环备份。 当然在实现角度来说,这种方式是最复杂的,扩展性也是最差的,但是在资源使用率上是最高的。
三种备份方式各有特点,具体采用哪种方式需要结合自己的业务特点和数据量特点设计。