臥槽:油管用MySQL支援24.9億使用者

banq發表於2024-06-01

Vitess是一個由YouTube開發並開源的資料庫解決方案,用於解決大規模MySQL部署中的擴充套件性問題。

最初,PayPal的三名員工嘗試建立一個約會網站,但失敗了。他們轉向建立影片分享網站YouTube,並使用MySQL儲存影片標題、描述和使用者資料。

隨著使用者數量的增長,YouTube設定了MySQL的主從複製拓撲來擴充套件。但是,MySQL的複製是單執行緒的,導致從伺服器無法跟上主伺服器上大量的寫操作。

快取和預載入:
為了解決可擴充套件性問題,YouTube透過新增快取並從MySQL二進位制日誌中預載入所有事件,使得複製過程成為記憶體繫結的,從而加快了速度。

寫併發問題
儘管暫時解決了可擴充套件性問題,但出現了新的寫入問題,例如必須對MySQL進行分割槽以處理儲存需求,分割槽後事務和連線變得困難,需要應用程式邏輯來處理。

為了簡化和擴充套件,YouTube建立了一個抽象層Vitess,它透過在每個MySQL例項前安裝一個名為VTTablet的邊車伺服器來提供極端的可擴充套件性。

Vitess架構:

  • VTTablet:在每個MySQL上執行的邊車伺服器,可以控制MySQL伺服器,管理資料庫備份,重寫昂貴的查詢,快取頻繁訪問的資料。
  • VTGate:路由查詢的代理伺服器。無狀態代理伺服器,用於路由查詢,找到正確的VTTablet路由查詢,透過連線池保持MySQL連線數量低,與應用程式層使用MySQL協議通訊。
  • 鍵值資料庫:用於拓撲管理的配置伺服器。分散式鍵值資料庫,儲存有關架構、分片方案和角色的資訊,並管理資料庫之間的關係,使用Zookeeper實現。
  • VTctld:執行HTTP伺服器以保持鍵值資料庫更新,獲取伺服器及其關係列表,然後更新鍵值資料庫。

Vitess的實現:Vitess是用Go語言編寫的,並支援MariaDB。YouTube能夠使用Vitess和MySQL的組合服務24.9億使用者。

本案例研究表明,MySQL 可以輕鬆處理網際網路規模的流量。

網友:
1、他們對資料庫進行了分片,並在其前面放置了自己的東西來管理分片

2、這真的很有趣,分片解決了 60% 的擴充套件問題,同時引入瞭如何管理分片路由的問題。

3、即使你不進行分片,也不在中間新增一些花哨的層,如今的垂直擴充套件也可以走得很遠。一臺 64 核伺服器,配備 TB 的 RAM 和大量 SSD 儲存,價格不到 50k。你需要一些嚴肅的工作負載來限制這樣的設定。

4、他們於 2018 年停止使用 MySQL。取而代之的是 vitess,它的功能遠不止手動分片 MySQL。

5、說起來容易做起來難,只需對資料進行分片,然後使用某種分片索引或一致性雜湊即可。 
該設計掩蓋了如何擴充套件或縮小伺服器。我更感興趣的是它們如何處理新增和刪除節點。 
新增或刪除節點時: 

  • 是否有後臺程序來複制資料並更新分片索引伺服器?如何跟蹤進度? 
  • 如果節點在擴充套件過程中發生故障,會發生什麼情況?它可以回滾或取消嗎?  
  • 當伺服器之間不斷髮生寫入操作時,如何管理記錄遷移和索引伺服器更新的事務?

5、他們在 2019 年關閉了 Vitess + MySQL,而不是 2006 年。Vitess 出自谷歌。2019 年,他們有 20 億使用者。今天他們有 27 億。

6、沒有任何資料庫能夠不經過額外工作就處理 24.9 億使用者。

相關文章