很多全球化的产品, 比如facebook、twitter, 它们的用户遍布世界各地。 工程师们往往会在全球设立多个数据中心(DC)供用户访问, 我们可以称之为异地多活。在后续一段时间里, 我会写一系列的博客,和大家一起探索异地多活架构。
这篇文章主要是讨论我们为什么需要异地多活, 以及实现这种架构所需要解决的问题。
一、异地多活的好处
1. 提升用户体验
一个产品最重要的是提供良好的用户体验,这对后端服务提出了几个要求:
- 服务的高可用
对于一些服务而言, 需要提供6个9甚至以上的可用性。 高可用的原则就是避免单点+自动故障转移。 为了避免机房粒度的单点, 我们需要提供多个DC, 彼此做灾备。 - 良好的响应速度
如果全球只有一个DC,那么所有的用户都只能访问这一个。 这种情况下,跨洲级别的RTT(一般来说>200ms),对于用户体验而言是个灾难。 所以全球级的产品需要在世界各地部署DC,供用户就近访问。
2. 降低成本
廉价的机器
我们都知道, 很多商品在不同地方的价格是不一样的,服务器也不例外。 如果能让非洲用户访问本地廉价的后端服务, 为什么要让他们的流量跑到美东去呢?
流量的分摊
一般而言,我们需要控制机器资源大于峰值流量的某个百分比, 比如为1w日活备好2w日活的机器。
如果你的DC已经遍布世界各地, 那么如果某地的流量疯涨时,你不需要担心机器资