《Facebook 欲用 Apollo 取代 MySQL 數據庫》要點:
本文介紹了Facebook 欲用 Apollo 取代 MySQL 數據庫,希望對您有用。如果有疑問,可以聯系我們。
自公司創辦以來,Facebook就一直在使用MySQL數據庫.大多數人對于讓這家社交網絡網站得以支持來自20多億用戶的數據,又沒有任何障礙地順暢運行的優化辦法感到很好奇.實際上,人們談論可擴展數據庫時,幾乎總是免不了提到Facebook.當然,近些年來,數據庫管理和增長這個小眾領域沒有比Facebook更重大的成功案例了.Facebook可能仍然使用MySQL數據庫作為其核心引擎,不過隨著時代的變遷,馬克?扎克伯格(MarkZuckerberg)親自領導的團隊正像大多數知名企業組織那樣逐漸青睞NoSQL數據庫.
偏向NoSQL數據庫
早在2014年,Facebook的代表杰夫?約翰遜(Jeff Johnson)在紐約QCon大會上宣布推出Apollo.這是Facebook自家版本的Paxos,類似NoSQL數據庫.這個新的NoSQL數據庫模型是一種分層存儲系統.這種高級數據庫中存儲的數據以碎片形式存在,就像區域服務器中的HBase.然而,這種新型NoSQL模型的獨特之處在于其在線低延遲存儲系統.它不是一種面向文檔的數據系統.Apollo更側重數據結構的修改,讓用戶可以修改數據結構,沒有太多的前序(prologue).數據的單個分片(shard)很小,大小在1字節和1兆字節之間.但數據的總大小可以達到10+拍字節(PB).它支持的服務器數量可以從區區3臺增加到將近1000臺.
了解Apollo
存儲在Apollo數據庫中的數據以小碎片的形式存在.這每一個碎片有四個不同的部分.
Apollo的第一個部分基于Raft.它是一種直接來源于Raft的法定共識協議(quorum consensus protocol),而Raft是來自斯坦福大學的一種成熟穩定的領導者(leader)協議.這是Apollo數據庫系統的獨特之處.
Apollo數據庫中的第二個部分是數據庫里面的存儲系統.該存儲系統受到了RocksDB的啟發.它是一種基于谷歌LevelDB的鍵/值存儲系統.Facebook可以輕松地處理該存儲系統,模擬其他數據結構,包含老式MySQL數據庫結構.值得注意的是,Apollo對于存儲的定制不是很友好.因此,Facebook的數據庫管理團隊正努力為其新的Apollo數據庫存儲系統添加MySQL數據庫支持的部分功能.
第三個部分是Facebook的原生API.任何數據庫API都是一個關鍵部分.對于Apollo而言,它是擁有read()和write()組件的Client API.用戶必要表示他們的前提條件.如果前提條件正確,Apollo將返回值(讀取或寫入).你要記住:該數據庫中的所有數據都是碎片形式的.因此,Apollo數據庫里面任何分片層面的操作都是原子級別的.你始終可以把許多條件與讀取結合起來,創建新的操作前提條件.
第四個部分是容錯狀態機(FTSM).這是Apollo數據庫中系統代碼的一部分.每個分片都有單獨的FTSM.不妨這樣來考慮:如果有扳連三臺不同機器的分片,它們都將同時執行同樣的代碼.它在大型數據庫環境中有著巨大優勢.如果一個代碼突然死亡,其他分片將以可接受的適當順序繼續運行同樣的代碼,并被所有節點所接受.
雖然Apollo成為Facebook新的寵兒掀起了巨大的動靜,但到目前為止Facebook沒有在生產環境中使用它.相反,該公司期待取代Memcached的一些使用場景.Facebook高度依賴內存緩存存儲系統,這已不是什么秘密.坊間傳聞稱,Apollo成了從Facebook到iOS設備和運營商的出站消息的新型隊列系統.它很適合數據分析.此外,它將提升數據提取的速度和準確性.
為何Apollo會存在?
Facebook使用狀態機主要用于負載均衡、分片生成及管理、協調跨機器的數據事務以及數據遷移.但是這個過程不夠盡善盡美.這些狀態機可以向遠程服務器發送RPC哀求.除此之外,每當用戶需要對數據的持續狀態進行更改,他們需要經過Raft,并且讓其他所有服務器都要同意.
Facebook眼下在使用什么?
Apollo仍在“建設中”,它遠遠談不上是Facebook的日常數據庫.因此目前,這個社交網絡巨頭在使用添加了大量修改和附件的MySQL數據庫,為每天數量龐大的數據傳輸和數據存儲提供方便.你不能指望一家年收入數十億美元的公司將MySQL直接拿來使用!它對IO子系統作了一些變動,包含下列新特性:
innodb_read_io_threads,innodb_write_io_threads——這設置了后臺IO線程的數量.
innodb_io_capacity——這設置了每臺服務器的IO容量,以確定后臺IO限制.
innodb_max_merged_io——這一個設置了毗鄰IO哀求的最大數量.通常,下一批IO哀求會在稍后合并成大得多的IO哀求.
不像Apollo,Facebook目前依賴MySQL數據庫作為鍵/值存儲系統,因而能夠在一系列邏輯實例之間隨機分布數據.你可以在服務器的物理節點上找到這些.當前服務器的所有負載均衡工作只出現在物理節點層面.
最令人驚訝的傳聞稱,Facebook擁有大約1800臺MySQL服務器,內部卻只有三名數據庫管理員(DBA).這似乎是一項弗成能完成的任務!即使Facebook果真只有三名DBA來管理整個數據集,要是沒有MySQL數據庫,那也是永遠弗成能的.MySQL簡單而強大,Facebook或其他任何類似的社交網絡網站多年后才會用新的NoSQL服務器替代全日運行的MySQL服務器.
歡迎參與《Facebook 欲用 Apollo 取代 MySQL 數據庫》討論,分享您的想法,維易PHP學院為您提供專業教程。
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/7072.html