多机房该如何部署?数据如何同步?

网络 网络设备
多机房部署相对于单个机房,其难度、开发、资源开销都是级数上升。因此具体的架构需要根据实际需求来选择。本文旨在介绍多机房部署的几种类型,开拓大家的思路。实际的多机房部署形式可能也与上述的都不一样,但是思路大体是相同的。​

作者 | 郭冠华,单位:中国移动智慧家庭运营中心

​Labs 导读

服务的可用性就是网络的平均无故障率。对于一个平台来讲,这是非常重要的指标之一。当前主要使用的可用率为4个9,即99.99%。也意味着每年最多只能有52分钟的故障时间。

Part 01  双活、多活解决的问题

虽然通过负载均衡等方式,可以应对单节点故障。但当出现小概率不可抗力的时候(自然灾害、停电、挖断光缆等情况),整个机房不可用的情况依然会出现。近年来,支付宝、微博、B站等均出现过机房级的故障,因此一个或者多个便于快速切换的机房就成了backup(备用)。同时,多活的一个次要条件就是可以部署在不同的位置,通过物理上的距离减少,来提升响应速度。分机房部署也可以大大地减少单机房资源的需求。

Part 02  同城备份还是同城双活?

同城进行部署服务的最大好处就是机房空间距离小,通过专线进行连接,机房间时延可以稳定到3ms以内,因此服务可以跨机房访问数据。

于是,最简单的双活方式如下:我们可以称之为同城备份,数据库放在机房A,并定期将数据库内数据同步至机房B。好处是实现简单、方便横向的服务拓展。如果发生机房级别的灾害,可以尽快从机房B将数据恢复。但是问题也出在这里:机房B并没有数据库,无法完全接替机房A的作用。

图片

图一 同城备份

为了解决上述的问题,可以在机房B内放置数据库从库,并将机房A的数据实时同步到机房B:即A机房中的数据库为主库,机房B中为从库。若发生机房A故障,则可以将流量切到B机房,并停止实时同步,把机房B中的数据库置为主库。

图片

图二 同城同步

该机房的主要问题是需要人工干预较多。除了数据库和DNS的切换之外,还需要修改大量数据库的配置。总体上,该架构可以以较快时间恢复服务,对于同城的多机房,已经足够。

Part 03  异地多活的新问题

异地多活不同于同城的情况,首先就是机房间哪怕使用专线,延时的问题也无法解决(想要异地访问数据库几乎不可能)。

首先我们想到的是,有没有一种方法可以尽量避免信息的同步?那就是下图的方式:通过地理、用户哈希、设备id哈希等方式,将请求在DNS层分流到多个机房。每个机房处理固定用户请求,从而可以将两个机房间数据同步减少到最少,也将每个机房的数据量减少到最少的量。但是数据同步只能靠业务进行同步,而不是数据库工具进行同步。

分治的方式看起来很理想,但实际上也会有其他的问题。比如,使用地理方式进行划分(即使用ip进行划分)的方案,用户位置发生变化导致请求到其他机房,如何进行数据同步?使用用户id哈希进行分片的方案,需要进行横向扩容时,旧数据如何处理?发生故障时,其他机房如何短时间内同步其他分片数据等等。

总之,分片方式并非是完美的解决方法。

图片

图三 异地双活

Part 04  异地同步数据

到这里,我们已经发现了,多个机房间的数据一定是需要同步的,这是异地多机房的必由之路。

数据的同步方式可以通过业务方式,也可以通过数据库中间件进行。下图中的方式就是机房间进行同步,这种方式确实增大了业务的复杂性,并且会随着机房的拓展,机房间同步的情况会更加复杂。

图片

图四 网状同步

在上述的架构中,如果设置一个中心的数据节点,所有机房通过中心数据节点来进行同步,数据流就会从“网状”变成“星状”。大大减少同步工作和复杂性。但是这一方案,实质上是与我们追求的分布式部署理念的一种背离。

图片

图五 网状星状同步

Part 05  分布式数据库,是银弹吗?

不仅是在多机房部署的情况下,随着数据量的急剧增大,针对Mysql的分库分表,开发人员对JDBC Proxy还有DB Proxy进行了深入的实战。大家越来越发现,承认数据库分片是很有必要的。在该基础上,许多分布式数据库如cockroach、TiDB随之产生。分布式数据库天生支持多集群、多机房的部署,这与异地多活的需求不谋而合。

通过分布式数据库,既可以实现数据的横向拓展,也可以减少业务上数据同步的复杂性,几乎可以说是一举多得。

此外,数据库对于资源的需求也很高,一个三集群的TiDB,至少需要9台物理机,10个万兆网卡以及之间的3条专线。

另外的缺点是改架构对于分布式数据库集群间的延时,相对苛刻,这也阻碍了改架构在较广域的地区无限扩容。

图片

图六 分布书数据库多机房

Part 06  总结

多机房部署相对于单个机房,其难度、开发、资源开销都是级数上升。因此具体的架构需要根据实际需求来选择。本文旨在介绍多机房部署的几种类型,开拓大家的思路。实际的多机房部署形式可能也与上述的都不一样,但是思路大体是相同的。​

责任编辑:未丽燕 来源: 移动Labs
相关推荐

2011-03-04 15:50:56

共享上网

2017-02-22 13:53:16

2024-10-15 09:10:10

2017-09-12 09:13:56

机房UPS主机电池

2010-03-17 15:08:28

Java多线性同步

2024-10-16 09:53:07

2018-01-26 07:44:04

数据中心机房雾霾

2016-01-20 11:22:17

增量部署全量部署运维

2020-09-17 07:27:10

物联网网关物联网IOT

2014-04-29 11:32:59

2021-08-06 11:35:34

数据预警模型

2023-08-02 13:07:00

数据归因模型

2015-09-17 13:55:10

数据中心降温

2014-05-06 17:40:46

VDI部署Windows应用

2014-05-04 18:41:46

VDIWindows应用

2018-03-27 08:46:01

数据库NoSQLredis

2024-01-29 17:00:37

2023-11-16 18:03:05

Kafka分布式消息

2018-08-16 08:37:03

机房运维硬件

2024-09-13 17:13:56

Redis 6NoSQL多线程
点赞
收藏

51CTO技术栈公众号