天天看點

全球異地多活架構設計(一): Why and How一、異地多活的好處二、如何做到異地多活

很多全球化的産品, 比如facebook、twitter, 它們的使用者遍布世界各地。 工程師們往往會在全球設立多個資料中心(DC)供使用者通路, 我們可以稱之為異地多活。在後續一段時間裡, 我會寫一系列的部落格,和大家一起探索異地多活架構。

這篇文章主要是讨論我們為什麼需要異地多活, 以及實作這種架構所需要解決的問題。

一、異地多活的好處

1. 提升使用者體驗

一個産品最重要的是提供良好的使用者體驗,這對後端服務提出了幾個要求:

  • 服務的高可用

    對于一些服務而言, 需要提供6個9甚至以上的可用性。 高可用的原則就是避免單點+自動故障轉移。 為了避免機房粒度的單點, 我們需要提供多個DC, 彼此做災備。

  • 良好的響應速度

    如果全球隻有一個DC,那麼所有的使用者都隻能通路這一個。 這種情況下,跨洲級别的RTT(一般來說>200ms),對于使用者體驗而言是個災難。 是以全球級的産品需要在世界各地部署DC,供使用者就近通路。

2. 降低成本

廉價的機器

我們都知道, 很多商品在不同地方的價格是不一樣的,伺服器也不例外。 如果能讓非洲使用者通路本地廉價的後端服務, 為什麼要讓他們的流量跑到美東去呢?

流量的分攤

一般而言,我們需要控制機器資源大于峰值流量的某個百分比, 比如為1w日活備好2w日活的機器。

如果你的DC已經遍布世界各地, 那麼如果某地的流量瘋漲時,你不需要擔心機器資源不能及時到位、為高峰期擴容後的資源浪費這種問題。 比如過萬聖節、聖誕節時,facebook美國流量瘋長, 這時候我們可以選擇把一部分流量切到亞洲地區的DC。

二、如何做到異地多活

要做到異地多活, 有幾個問題我們必須解決:

  1. 接入層流量控制

    使用者預設通路哪個DC? 什麼時候做切換? 如何控制這個切換過程?

  2. 各DC業務邏輯一緻

    對于使用者來說, 他的流量被排程前後,業務邏輯是一緻的。 比如facebook上有一些内容對于亞洲使用者是不可見的,不能因為亞洲使用者的流量被遷移到了美洲機房,這個限制就失效了。

  3. 跨DC的實時資料同步與沖突處理

    還是以fb為例, 如果通路非洲機房的使用者A給通路南美洲機房的使用者B的一個文章點了贊, 那麼B應該能及時收到相關的通知。這背後就依賴資料的實時同步。

    在多活情況下, 多DC的資料寫入勢必會引入資料的沖突, 比如facebook位于美東的的稽核系統和位于東南亞的使用者同時操作了一條文章, 就會産生資料的沖突。

  4. 提供全球級别的強一緻性

    對于大多數業務而言, 我們隻需要最終一緻性即可(比如點贊之類的計數)。 但是某些業務,需要全球的強一緻保障(比如下單、支付之類的操作)。

在後續的文章中, 我會陸續讨論這些話題, 歡迎持續關注我的部落格: https://blog.csdn.net/u012422829/ 。

繼續閱讀