Facebook用戶量十分龐大,為什麼還使用MySQL數據庫?

張曉家


看了這麼多回答,作為一個當時參與阿里去lOE過程的人,聊聊個人看法。

阿里在定下2014目標上市時,內部就開始發起去IOE運動,2013年收尾。全球上市意味著要經過全球檢驗,要合法合規(至少大面上要這樣)。首要過的,就是專利(如現在高通,每部用它專利的手機都得給它交錢)。隨阿里商業化程度的進行,馬雲就放眼全球。當時核心訴求是,可控性(不能將自己的咽喉放在別人的手上)。記得我當時還問過為什麼會發起這麼大成本的去IOE化,得到的回答是IOE不可控(比如orocle,發生一個問題可能幾天之後才得到響應,對於快速發展的互聯網來說,是不可接受的)。從互聯網商業角度來講,錢不是關鍵的,時間、流量才是王者。互聯網服務要求穩定、快速解決大於一切。這也是現在分佈式的核心訴求(大數據也是)。能用錢解決的問題都不是問題,比如互聯網企業前期大部分是鉅額虧損的(如BAT,滴滴,共享單車…),它們要的是快速佔領市場。在此前題下,lOE,有兩大致命傷:

1,出問題後解決的效率太低(lOE作為穩定性產品,更新節奏是比較慢的,並且因為不開源,意味著它是黑箱,遇到問題你連找臨時解決的方案都很難,等到廠商問題解決,黃花菜都涼了),

2,不可控。互聯網是快速試錯的過程,今天穩定的東西可能明天就滿足不了需求了。指望廠商跟進,就會錯過大量的時機(這也是現在大數據技術快速發展和各大互聯網企業投入巨大資源自研的原因)。數據庫作為互聯網核心部件(數據就是金錢),命脈必須掌握在自己手裡。開源推進了現代互聯網的快速發展,技術不再是少數企業的專利,開源能集結全球人才的聰明才智,能夠快速解決問題,而不是侷限於等待少數人去改變。開源意味著可預測,可控制、可把它作為基礎發展為最適合自身業務的東西。

其它:1,免費,降低成本。2,可研究,人才眾多。3,實時大數據,批量。

現在各大互聯網公司已根據自身業務特點,已經在開源基礎上研發了大量的定製數據庫。

從創業起步時角度來講,確實能省一些是一些,MySQL夠用了。發展大了之後,做分佈式集群話,穩定度和速度、靈活性都大大大於lOE,lOE也就沒那麼必要了。4,去lOE還能大幅度培養自己的技術團隊,拓展未來的想象力,何樂而不為。

反之,看先前和現在的國有企業(如銀行),動不動就停機維護,以前轉個帳都要24小時甚至更長(因為它們是壟斷,它們不缺錢,一體化都是最高端的lOE服務,所以我們無可奈何)

,這種情況若發生在互聯網身上,那可能就是生死攸關的事情——用戶的敏感度大大大於傳統的企業。

從上情況可知,選擇去lOE是必然,甚至,互聯網企業發展到一定規模,自研是必然(自研當然需要建立在合法合規上)。

企業發展到一定程度,有3個最重要的:1,企業架構(自動化機器)2,法律風險(投入比會大大增加,比如現在華為遇到的情況)3,門檻(核心技術,核心競爭力)

個人淺見,共同交流。


原語9102


Facebook最初誕生的時候並不是大公司,所以整個數據底層都是放在MY SQL上,因為MY SQL不需要授權費,對facebook是最划算的,而在發展壯大後,MY SQL同樣夠用,當然會一直用下去了。

為什麼Facebook還會用MY SQL?

1.MySQL早期就是為PC互聯網服務的,而且是免費開源的,Facebook早期是學生創業,跟本沒錢,而且Facebook最開始是PC產品,用MY SQL是自然的。

2.用MY SQL更省錢。除了MY SQL還有商業數據,比如Oracle數據庫,但是商用數據庫價格非常的貴,比如官方報價一般25/CPU核,以及採購小型機一般80-120萬/臺,存儲設備一般500萬一套,但是Facebook現在有近萬臺的服務器,這是一筆極為龐大的資金。

3.常規數據庫的集中式數據庫很難解決海量用戶 MySQL的分佈式數據庫正好適合;

4.MYSQL可以定製化,更適應Facebook業務發展需要。oracle等無法定製,不能滿足每個不同企業的定製化數據要求。所以mysql數據庫會越來越火,也越來越受到企業的重視。

總的來說是,MYSQL更加省錢,Oracle價格太貴,另外就是可定製化。


毛琳Michael


其實不止是Facebook,大部分互聯網公司都是在使用Mysql數據庫(會輔助使用Nosql數據庫,這裡暫時不討論)。

首先不能否認的是,如果是按照單庫運行,Oracle、DB2這些商業數據庫還是很強大的。IT公司的傳統套路就是IOE,其中O就是指的Oracle。另外I是指IBM的服務器,E是指EMC列陣存儲。三個加起來很強大,基本上可以支持一般的企業的業務,當然,也很貴,非常貴。

當到了Facebook這個級別的公司,數據量可不是幾千萬,幾個億這個級別的了,這時候如果數據還是單機的話,已經很難支撐基數大、增長快的數據了;這時候的做法就是分庫,把數據保存到不同的數據庫節點上。


這時候Mysql的優勢就顯示出來了:

  • 開源,就意味著免費,也就節省了License的費用;

  • 也是因為開源,所以有能力的公司都會對公開版的Mysql做二次開發,跟進業務的需要去改造Mysql;

  • 服務器的錢也省下來了,也不必使用費用很高的服務器了,這一點又是省錢。


總之,Mysql省錢,還能定製改造。



希望我的回答,能夠幫助到你!

我會持續分享Java程序開發、架構設計、職業發展等方面的知識和見解,希望能得到你的關注今日頭條【會點代碼的大叔】,轉載請註明出處。

會點代碼的大叔


1.facebook確實在使用MySQL,主要是因為免費開源,因為免費降低了成本,也因為開源,其可定製化比較強,基於MySQL的第三方版本也比較多。facebook自己就基於MySQL搞了一個MyRocks數據庫。

RocksDB是FaceBook基於Google開源的LevelDB實現的,使用LSM(Log-Structure Merge)樹來存儲數據。Facebook開發工程師對RocksDB進行了大量的開發,使其符合MySQL的插件式存儲引擎框架的要求,移植到了MySQL上,並稱之為MyRocks。MyRocks支持基於SQL的數據讀寫、鎖機制、MVCC、事務、主從複製等MySQL絕大部分功能特性。從使用習慣考慮,使用MyRocks還是使用MySQL/InnoDB並沒有多大區別。


2.數據量大的問題,主要是通過分佈式和分庫分表來解決的,並不是單機存儲。oracle的缺點就在於這,oracle雖然單機數據處理量大,但是對集群和擴展的支持比較差。mysql單機不行,但是可以集群啊,集群不夠,還可以分佈式啊。況且facebook這種業務,也不適合oracle。


3.facebook

的數據存儲和處理不僅僅使用了MySQL,還是用了大數據的一套東西,比如spark。


4.歷史原因和使用習慣導致的,這也是為什麼沒有選擇另外一個開源數據庫postgreSQL的主要原因。


所以,可以這麼說,facebook數據量大是一個問題,但是並不是完全或者說單獨依賴MySQL全部解決的。


互聯網活化石


看到很多回答,不少都是不懂裝懂。很多人還扯到性能上。MySQL作為互聯網數據庫標配時,MySQL的性能,穩定性都不好。

互聯網公司採用MySQL,真正的原因,也是唯一的原因,就是開源免費。

互聯網數據的兩個特點決定了MySQL是首選,一個特點是互聯網針對的用戶群巨大,大的互聯網公司數據庫服務器成百數千,一個oracle版費幾十萬,這個費用太巨大。另外一個特點,絕大部分互聯網數據的重要性遠低於銀行電信,甚至一般企業業務,比如一個用戶的留言,一個帖子,真丟了,只要不是普遍現象,後果不嚴重,這也是早期MySQL不穩定,備份機制也不好時,但仍成為互聯網標配的原因。

現在很多大型互聯網公司,數據庫其實既有MySQL,也有oracle,依據數據類型來使用不同數據庫。


老郭123123462


在關係型數據庫剛出現的時候,那時候數據庫技術是一個很複雜的技術,關係型數據庫的由IBM的科研人員最先發表的論文,IBM沒有重視,卻被oracle佔了先機。如今在互聯網時代,理論和開發技術已經很成熟,一個數據庫產品已經沒有那麼複雜,而且可替代性已經很高,越來越多的軟件也開始免費。我感覺,本身這個話題意義也不大,企業現在對數據庫的選擇很多,現在已不像互聯網剛興起的時候,oracle也不會再像以前憑藉一個數據庫就能成為超級公司。

再說說為什麼用MySQL,因為MySQL是開源的,稍加定製就能適應自己的需求。MySQL一臺性能不好,但是擴展性非常好,以數據庫的複製為基礎,可以一主多從,多主多從,很多公司都開發了自己的MySQL中間件,哪怕代碼初期沒考慮讀寫分離一樣不用做太大改動。大型的應用可以考慮分庫分表,這樣擴展性可就更高了。一個免費的產品就能實現了,我幹嘛還要花錢。

現在新的非關係型的數據庫越來越多,也越來越火,不僅擴展性更強,而且存取速度更快,最重要的還開源免費,數據庫技術也在迎來一場新的革命,什麼樣的數據庫,已不再重要,關鍵是什麼能滿足互聯網的需求。同樣現在的大型企業會用各種各樣的數據庫,以滿足不同需求。


excellence27871936


所以Facebook優化MySQL的經驗我覺得有很多借鑑學習之處,有相關數據庫經驗也可以在評論區討論探討,互相學習學習。

1.每臺機器都使用多實例的模型,每個機器放多個實例,每個實例放多個DB,多實例之間沒有資源隔離,充分發揮實例間的最大性能。

2.將大部分核心業務引擎切換到MyRocks,不改變服務器配置大概可以節省一半服務器資源。

3.主從結構採用基於GTID的一主多從結構,外加一個基於lossless semi-sync機制的mysqlbinlog實現的binlog server。

4.所有的備份都是基於mysqldump實現,可以無需備份索引,只備份數據,而且備份文件壓縮比高,更節省磁盤空間,通過改進了的mysqldump,備份過程中還可以進行額外壓縮。當然備份時也會控制並行備份的數量,避免影響在線業務性能。

5.快速部署從庫可使用xtrabackup在現有存活的SLAVE實例上備份,也可在主庫上發起備份,再利用WDT(或者是BT)協議傳輸到異地,用於拉起從庫。

總而言之,Facebook在優化MySQL方面做了很多努力,也提交了很多優秀的Innodb插件來大大提高了MySQL主從集群的性能。而且有傳聞稱,Facebook擁有大約1800臺MySQL服務器,內部卻只有三名數據庫管理員(DBA)。這有點匪夷所思,不過也側面說明Facebook確實在MySQL優化方面有著非常不錯的效果。


如果你對學習人工智能和科技新聞感興趣,歡迎訂閱我的頭條號。我會在這裡發佈所有與科技、科學以及機器學習有關的有趣文章。偶爾也回答有趣的問題,有問題可隨時在評論區回覆和討論,看到即回。


我是沐叔


儘管Facebook使用MySQL,但它們並不是一成不變的使用它。 事實上,他們的團隊已經提交了許多MySQL核心和Innodb插件的高性能增強。 他們的主要重點是增加性能計數器到Innodb。 其他更改集中在IO子系統上,包括以下新功能:

1 innodb_io_capacity:設置服務器的IO容量以確定後臺IO的速率限制

2 innodb_read_io_threads, innodb_write_io_threads:設置後臺IO線程

3 innodb_max_merged_io:設置可能合併到一個大IO請求中的相鄰IO請求的最大數量

Facebook使用MySQL作為鍵值存儲,其中數據隨機分佈在一大組邏輯實例中。 這些邏輯實例分散在物理節點之間,負載均衡在物理節點級完成。 Facebook已經開發了一個分區方案,其中全局ID被分配給所有的用戶數據。 他們也有一個自定義的歸檔方案,它基於每個用戶的頻繁和最近的數據。 大部分數據是隨機分佈的。 令人驚訝的是,據傳Facebook有1800個MySQL服務器,但只有3個全職DBA

Facebook主要將MySQL用於結構化數據存儲,例如牆貼,用戶信息等。這些數據在各個數據中心之間複製。 對於blob存儲(照片,視頻等),Facebook使用一個自定義的解決方案,涉及外部的CDN和內部的NFS

同樣重要的是,Facebook大量使用Memcache,這是一種內存緩存系統,通過在RAM中緩存數據和對象來加速動態數據庫驅動的網站,以減少閱讀時間。 Memcache是Facebook的主要緩存形式,大大減少了數據庫的負載。 擁有一個緩存系統可以使Facebook的速度與調用數據一樣快。 如果不需要訪問數據庫,則只需根據用戶標識從緩存中獲取數據

所以,“Facebook使用什麼數據庫”似乎是一個簡單的問題,你可以看到他們已經添加了各種其他系統,使其真正的具有網絡可擴展性。 但是,仍然可以自由地使用這樣一個觀點:“MySQL和Oracle或者MS SQL Server一樣好或者更好,因為就算只有Facebook使用它,它也有5億用戶!”


獨立的互聯網從業者


MySQL 早期就是為 Web 應用而生的,而 Facebook 正是此領域的業務場景;另外從成本價格來講,MySQL 開源免費的,Oracle 價格高。在版權上,大公司更注重版權,開發人員也不能隨便用盜版,所以,如果全部用正版數據庫,肯定增加成本的。而 MySQL 開源免費。當然,也並不是說 MySQL 沒啥優點。
MySQL 作為是一種開放源代碼的關係型數據庫管理系統(RDBMS),任何人都可以在 GeneralPublic License的許可下下載且個性化優,另外,MySQL 的可靠性,速度以及它適應性強而受人歡迎。提供用於管理、檢查、優化數據庫操作的管理工具 用其來管理內容無疑是很好的選擇,而且 MySQL 數據庫系統使用最常用的為數據庫管理語言--結構化查詢語言(SQL)進行數據庫管理。不僅如此,MySQL 其自身的特點也是它的加分項。它支持AIX、FreeBSD、Windows等多種操作系統。不僅能夠作為一個單獨的應用程序應用在客戶端服務器網絡環境中,還能夠作為一個庫而嵌入到其他的軟件中提供多語言支持。
雖然其他的大型數據庫例如 Oracle、DB2、SQL Server 等相比,MySQL 自有它的不足之處,如規模小、功能有限等,但是這絲毫也沒有減少它受歡迎的程度 。當下 IT 行業的走向是開源化、免費化。這就意味著個人可以定製更加具有個性化需求的數據庫,從而節省開銷。這點上 MySQL 是符合的,阿里巴巴等大型項目也用了 MySQL ,主要用了分佈式存儲、緩存、分表分庫等技術,靈活運用而已。
當然,現在許多的數據庫的功能雖然很強大,但經常性使用的無非幾種,或者有些比較適合自己使用的功能, oracle 等無法定製。所以 MySQL 這種開源的數據庫會越來越火。另外,Facebook 也並非一成不變使用 MySQL,節省開銷是一回事,但體驗使用質量好更是一回事,新的需求產生會催促其進行升級成長,比如 Facebook 建 立了自己的 Cassandra 數據商店並且在其網站上重點推出一項新的搜索功能。據Facebook的工程師 Avinash Lakshma 介紹,Cassandra 僅用 0.12 毫秒就可以寫入 50 GB 的數據,比 MySQL快了超過 2500 倍。Twitter公司也計劃從 MySQL 遷移到 Cassandra 數據庫,因為後者具有更大的彈性、可擴展性和大量的社區網絡開源開發人員。
歡迎更多交流留言評論 !

stormzhang


歡迎關注我,一個程序員老司機,和你分享編程、運營、需求等等經驗和趣事。

從你的問題描述來看,我覺得這是一個偽命題,在這個行業,很多人都流傳著一個所謂經典的名言:‘如果MySQL數據庫存儲記錄超過一百萬的時候,性能會有很大的折扣’,但是結果facebook卻能夠很好的運行,下面我們就來分析一下原因。

原因一

為了應對高性能的應用,我們的MySQL也在不斷的改進,不斷的引入很多高級的功能,比如表分區、複製和集群等,還引入了Memcached,利用好這些功能,能夠讓我們的應用程序性能大大的提高,同時也能夠處理好存儲大數據的問題。

原因二

我們知道MySQL是開源的,什麼意思呢?就是我們能夠對MySQL的源代碼進行修改然後編譯,從而實現屬於我們的定製化的MySQL,所以Facebook也對MySQL進行了修改,刪除了很多不需要的功能,添加了很多自己需要的功能,尤其是將一些認為效率低的東西徹底移除,打造屬於Facebook的定製化MySQL,這應該是MySQL能夠勝任Facebook的根本原因。

原因三

雖然數據庫提供了很多我們需要的功能,但是為了提高應用的性能,我們很多時候不一定要藉助數據庫來完成,比如實現一些統計功能,我們可以不借助數據庫的存儲過程來實現,而是採用應用程序的方式來實現,讓數據庫只做一件事:就是數據管理,不做太複雜的數據處理操作。

希望能夠幫助到你,還有什麼疑問,可以在評論中進行交流。


分享到:


相關文章: