{eval=Array;=+count(Array);}
盡管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運維優化的邏輯,大家可以借鑒參考一下。本質上講,他們用的是修改后的MySQL,不是原生MySQL。Facebook創辦以來就一直在使用MySQL數據庫,也隨著數據量的增大而不斷改進他們的自有MySQL,目前已經可以輕松支撐來自20多億用戶的數據量。
所以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優化方面有著非常不錯的效果。
如果你對學習人工智能和科技新聞感興趣,歡迎訂閱我的頭條號。我會在這里發布所有與科技、科學以及機器學習有關的有趣文章。偶爾也回答有趣的問題,有問題可隨時在評論區回復和討論,看到即回。
(碼字不易,若文章對你幫助可點贊支持~)
看了這么多回答,作為一個當時參與ucloud去lOE過程的人,聊聊個人看法。
ucloud在定下2014目標上市時,內部就開始發起去IOE運動,2013年收尾。全球上市意味著要經過全球檢驗,要合法合規(至少大面上要這樣)。首要過的,就是專利(如現在高通,每部用它專利的手機都得給它交錢)。隨ucloud商業化程度的進行,馬云就放眼全球。當時核心訴求是,可控性(不能將自己的咽喉放在別人的手上)。記得我當時還問過為什么會發起這么大成本的去IOE化,得到的回答是IOE不可控(比如orocle,發生一個問題可能幾天之后才得到響應,對于快速發展的互聯網來說,是不可接受的)。從互聯網商業角度來講,錢不是關鍵的,時間、流量才是王者。互聯網服務要求穩定、快速解決大于一切。這也是現在分布式的核心訴求(大數據也是)。能用錢解決的問題都不是問題,比如互聯網企業前期大部分是巨額虧損的(如BAT,滴滴,共享單車…),它們要的是快速占領市場。在此前題下,lOE,有兩大致命傷:
1,出問題后解決的效率太低(lOE作為穩定性產品,更新節奏是比較慢的,并且因為不開源,意味著它是黑箱,遇到問題你連找臨時解決的方案都很難,等到廠商問題解決,黃花菜都涼了),
2,不可控。互聯網是快速試錯的過程,今天穩定的東西可能明天就滿足不了需求了。指望廠商跟進,就會錯過大量的時機(這也是現在大數據技術快速發展和各大互聯網企業投入巨大資源自研的原因)。數據庫作為互聯網核心部件(數據就是金錢),命脈必須掌握在自己手里。開源推進了現代互聯網的快速發展,技術不再是少數企業的專利,開源能集結全球人才的聰明才智,能夠快速解決問題,而不是局限于等待少數人去改變。開源意味著可預測,可控制、可把它作為基礎發展為最適合自身業務的東西。
其它:1,免費,降低成本。2,可研究,人才眾多。3,實時大數據,批量。
現在各大互聯網公司已根據自身業務特點,已經在開源基礎上研發了大量的定制數據庫。
從創業起步時角度來講,確實能省一些是一些,MySQL夠用了。發展大了之后,做分布式集群話,穩定度和速度、靈活性都大大大于lOE,lOE也就沒那么必要了。4,去lOE還能大幅度培養自己的技術團隊,拓展未來的想象力,何樂而不為。
反之,看先前和現在的國有企業(如銀行),動不動就停機維護,以前轉個帳都要24小時甚至更長(因為它們是壟斷,它們不缺錢,一體化都是最高端的lOE服務,所以我們無可奈何)
,這種情況若發生在互聯網身上,那可能就是生死攸關的事情——用戶的敏感度大大大于傳統的企業。
從上情況可知,選擇去lOE是必然,甚至,互聯網企業發展到一定規模,自研是必然(自研當然需要建立在合法合規上)。
企業發展到一定程度,有3個最重要的:1,企業架構(自動化機器)2,法律風險(投入比會大大增加,比如現在ucloud遇到的情況)3,門檻(核心技術,核心競爭力)
個人淺見,共同交流。
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價格太貴,另外就是可定制化。
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 是符合的,ucloud巴巴等大型項目也用了 MySQL ,主要用了分布式存儲、緩存、分表分庫等技術,靈活運用而已。當然,現在許多的數據庫的功能雖然很強大,但經常性使用的無非幾種,或者有些比較適合自己使用的功能, oracle 等無法定制。所以 MySQL 這種開源的數據庫會越來越火。另外,Facebook 也并非一成不變使用 MySQL,節省開銷是一回事,但體驗使用質量好更是一回事,新的需求產生會催促其進行升級成長,比如 Facebook 建 立了自己的 Cassandra 數據商店并且在其網站上重點推出一項新的搜索功能。據Facebook的工程師 Avinash Lakshma 介紹,Cassandra 僅用 0.12 毫秒就可以寫入 50 GB 的數據,比 MySQL快了超過 2500 倍。Twitter公司也計劃從 MySQL 遷移到 Cassandra 數據庫,因為后者具有更大的彈性、可擴展性和大量的社區網絡開源開發人員。歡迎更多交流留言評論 !
其實不止是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全部解決的。
2004年成立的Facebook很快便占據了社交網站的榜首,智能手機出現標志著互聯網全面轉向手機端,在移動互聯網時代Facebook的APP也同樣霸占著社交APP排名榜首。有很多網友就非常好奇Facebook使用哪個數據庫來存儲龐大的用戶資料?通過了解社交網絡的老大哥Facebook的數據庫演變,從中吸取寶貴的經驗教訓。
Facebook中的個人資料不僅僅是姓名、Email、興趣等屬性列表,而是一個非常豐富的社交圖譜,包括了親人/朋友、群組、喜歡、分享等等。剛開始的Facebook社交頁面非常簡單,采用PHP來構建應用程序,MySql作為長期使用數據庫,采用Memcache作為后備緩存支持。PHP應用程序可以直接訪問MySql和Memcache,中間沒有數據抽象層。
這種簡單的數據庫架構在訪問量很少的情況下優勢確實非常明顯,但Facebook從2005年開始用戶量就飛速增長,最終這種數據架構導致了開發人員敏捷性急劇下降。因為工程師需要使用兩種截然不同的數據模型來對數據進行處理,MySql存儲主從對集合、Memcache則用于存儲和提供派生的平面鍵值的SQL查詢,MySql和Memcache相互協作成為了一個很大的難題,開發者使用數據庫前首先要獲得關于這兩個數據庫如何相互協作的復雜知識。
Facebook的數據量暴增也使得MySql的缺點凸顯出來,MySql的單體架構很早強制應用程序級的分片,應用程序則需要跟著哪個MySql實例復雜存儲哪個用戶的配置文件,數據量暴增之后,開發和操作的復雜程度就呈現指數級增長。多數據中心、異地冗余復制也成為了MySql一個非常關鍵性的問題,主從異步復制轉移時,最近的數據無法避免不會丟失。
TAO可以將facebook現有成百上千的Mysql主從對轉化成一個高度可擴展、自動分片、基于地理分布式的數據庫集群。TAO可以將分片遷移或者克隆到同一個集群的不同服務器,這樣就能平衡負載并消除負載峰值。
如果一次分片更新后、第二次分片更新前出現故障,TAO的異步修復作業就會清除掛起的關聯。
使用TAO架構之后本質上還是沒有放棄MySQL,因為當時的MySQL和其他數據庫都無法多帶帶解決爆炸式數據量的增長。TAO本質上只是創建了一個自定義數據庫的查詢層,這層抽象了底層分片的MySql數據庫。
很多人都喜歡SQL普遍性以及靈活性,都不愿意放棄SQL的情況下對它進行擴展。雖然很多企業沒有Facebook這樣大規模數據增長的問題,也同樣希望按照自己的意愿來拓展SQL數據庫。
第一波分布式SQL數據庫叫做NewSql,包括了Clustrix、NuoDB、Citus、Vitess等等,但這些都不足以從根本上簡化開發人員、運營的體驗,反而阻礙了開發人員。于是就有了第二波分布式SQL數據庫,靈感源于Google的Spanner,數據庫層內置了大規模可擴展性和全球數據分布,而不需要像之前Facebook必須內置在應用程序層中。
Facebook、Google等等這樣的科技巨頭的數據庫擴展的歷程,都是值得很多人學習和借鑒的。TAO保留了MySql的現有投資,但應用工程師失去了使用SQL的能力。Google則創建了Spanner,走了一條不同的道路創建了一個全新的SQL數據庫。
以上個人淺見,歡迎批評指正。
認同我的看法,請點個贊再走,感謝!
喜歡我的,請關注我,再次感謝!
看到很多回答,不少都是不懂裝懂。很多人還扯到性能上。MySQL作為互聯網數據庫標配時,MySQL的性能,穩定性都不好。
互聯網公司采用MySQL,真正的原因,也是唯一的原因,就是開源免費。
互聯網數據的兩個特點決定了MySQL是首選,一個特點是互聯網針對的用戶群巨大,大的互聯網公司數據庫服務器成百數千,一個oracle版費幾十萬,這個費用太巨大。另外一個特點,絕大部分互聯網數據的重要性遠低于銀行電信,甚至一般企業業務,比如一個用戶的留言,一個帖子,真丟了,只要不是普遍現象,后果不嚴重,這也是早期MySQL不穩定,備份機制也不好時,但仍成為互聯網標配的原因。
現在很多大型互聯網公司,數據庫其實既有MySQL,也有oracle,依據數據類型來使用不同數據庫。
歡迎關注我,一個程序員老司機,和你分享編程、運營、需求等等經驗和趣事。
從你的問題描述來看,我覺得這是一個偽命題,在這個行業,很多人都流傳著一個所謂經典的名言:‘如果MySQL數據庫存儲記錄超過一百萬的時候,性能會有很大的折扣’,但是結果facebook卻能夠很好的運行,下面我們就來分析一下原因。
原因一
為了應對高性能的應用,我們的MySQL也在不斷的改進,不斷的引入很多高級的功能,比如表分區、復制和集群等,還引入了Memcached,利用好這些功能,能夠讓我們的應用程序性能大大的提高,同時也能夠處理好存儲大數據的問題。
原因二
我們知道MySQL是開源的,什么意思呢?就是我們能夠對MySQL的源代碼進行修改然后編譯,從而實現屬于我們的定制化的MySQL,所以Facebook也對MySQL進行了修改,刪除了很多不需要的功能,添加了很多自己需要的功能,尤其是將一些認為效率低的東西徹底移除,打造屬于Facebook的定制化MySQL,這應該是MySQL能夠勝任Facebook的根本原因。
原因三
雖然數據庫提供了很多我們需要的功能,但是為了提高應用的性能,我們很多時候不一定要借助數據庫來完成,比如實現一些統計功能,我們可以不借助數據庫的存儲過程來實現,而是采用應用程序的方式來實現,讓數據庫只做一件事:就是數據管理,不做太復雜的數據處理操作。
希望能夠幫助到你,還有什么疑問,可以在評論中進行交流。
0
回答1
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答