1. 程式人生 > >架構師速成8.3-可用性之分庫分表

架構師速成8.3-可用性之分庫分表

路由 運行 進行 一鍵 常量 popu 同步 width track

有狀態分布式,涉及的知識就比較多了,只是我們能夠拿幾個現實的樣例由淺入深的來理解。

數據庫的分庫分表

  1. 如果你是一個開發負責人,開始使用單機的數據庫,突然一天數據庫硬盤掛掉了。你沒有做備份,然後就沒有然後了。
  2. 進入第2個公司,你意識到備份的重要性。每天定時備份到還有一臺機器,突然有一天,數據庫硬盤掛掉了。

    你心想幸好我有備份,然後巴拉巴拉的恢復起來。用了2個小時。老板說不錯,可是—-我們由於宕機造成大量用戶流失,信譽下降,然後就又沒有然後了。上面說的就是單點的問題。

  3. 進入第3個公司,你認為單點非常可怕,所以主備做起來,數據自己主動同步到備庫,做到隨時準備切換。突然有一天,主數據庫硬盤掛掉了,你從容的改動數據庫連接指向備庫。重新啟動系統恢復了,僅僅用了5分鐘。

    此時掌聲一片,你沈浸在無比的歡樂中,老板說不錯,可是—就在這5分鐘我們丟了一個上億的單子。我擦。你不是有益的吧!

    (事實上這有可能是真實的片段,我們創業時,就30分鐘斷網。結果正好在舉行一個大型的營銷策劃,不說了,我擦一會眼淚)。然後就又沒有然後了。事實上當你用上主備時,說明數據庫已經有狀態了,必須要區分誰是主,誰是備。

  4. 進入第4個公司,你不但做了主備,還做了高可用,通過HA實現了瞬時切換。

    突然有一天。主數據庫硬盤掛掉了。你從容的端起了你的屌絲杯,世界清靜了。

    老板說不錯,小子我看好你。

    從此你走向人生巔峰。出任CTO,迎娶白富美。可是沒過多久問題來了,隨著用戶不斷的添加。你的數據庫搖搖欲墜,不時就抽瘋。老板說搞定他,不然我就搞定你。

  5. 咋辦,分庫分表啊!

    怎樣分,這就涉及到很多其它的規則了,比方依照用戶id是最常見的做法。此時你不但須要管主備並且還須要在程序中確定怎樣路由。結果集合並,如果再有機器添加。還要涉及數據遷移。另外還要防止出現反復id的臟數據,須要全局唯一主鍵。等等。

    亞美蝶!知道有狀態的痛苦了吧。這也是為什麽有些同學轉投nosql的存儲的非常大原因,nosql替你屏蔽了這些規則。他在內部實現了路由、分庫、合並等等。

  6. 提到這裏不得不提一下淘寶的牛逼產品–drds(沈公子是不是應該給些廣告費啊)。
    • 分布式SQL引擎
      • 將數據依照條件分散到多個數據節點(分庫分表),對於數據操作sql進行分布式優化,獲得最佳運行效率
    • 自主運維
      • DRDS的用戶運維平臺提供DRDS接入、分布式DDL、拆分信息維護、平滑擴縮容、分布式DML、監控等經常使用功能,讓運維工作變得更簡單
    • 小表復制
      • 對於配置表。常量表等不常常變化的表進行多節點對等同步,加速該類表與其它拆分表做關聯查詢的速度
    • 分布式全局唯一id
      • 提供全局唯一數字id服務。幫助您在分布式環境下。繼續保持類似唯一鍵、主鍵等數據的全局(全部節點)唯一性

  1. 看到了吧。這就是有狀態帶來的痛苦。為了把有狀態變為無狀態有時候你須要做大量的工作。
有關分庫分表的關鍵點和難點,我新一章統一解說。

架構師速成8.3-可用性之分庫分表