摘要:經(jīng)歷了微博數(shù)據(jù)庫各個階段的架構(gòu)改造,包括服務保障及體系建設微博多機房部署微博平臺化改造等項目。第二階段爆發(fā)階段微博上線之后,隨著用戶活躍度的增加,數(shù)據(jù)庫的壓力也與日俱增。
非商業(yè)轉(zhuǎn)載請注明作譯者、出處,并保留本文的原始鏈接:http://www.ituring.com.cn/article/211461
肖鵬,微博研發(fā)中心技術(shù)經(jīng)理,主要負責微博數(shù)據(jù)庫(MySQL/Reids/HBase/Memcached)相關(guān)的業(yè)務保障、性能優(yōu)化、架構(gòu)設計,以及周邊的自動化系統(tǒng)建設。經(jīng)歷了微博數(shù)據(jù)庫各個階段的架構(gòu)改造,包括服務保障及SLA體系建設、微博多機房部署、微博平臺化改造等項目。10年互聯(lián)網(wǎng)數(shù)據(jù)庫架構(gòu)和管理經(jīng)驗,專注于數(shù)據(jù)庫的高性能和高科用技術(shù)保障方向。
問:您是如何與MySQL結(jié)緣,并成為數(shù)據(jù)庫方面的專家的?
與MySQL結(jié)緣主要也是源于興趣,第一份工作在一家小公司,各個領(lǐng)域的工作都會有接觸,全都做下來發(fā)現(xiàn)還是對數(shù)據(jù)庫最感興趣,所以就一直從事和數(shù)據(jù)庫相關(guān)的技術(shù)工作了。隨著工作年限的增加,我在數(shù)據(jù)庫方面積累的經(jīng)驗也逐步增加,越來越發(fā)現(xiàn)數(shù)據(jù)庫管理員(DBA)是一個偏實踐的工種,很多理論上的東西在現(xiàn)實中會有各種的變化,比如「反范式」設計等等。所以我建議大家:如果想成為數(shù)據(jù)庫方面的專家,一定要挑選好環(huán)境,大平臺很多時候會由于量變引發(fā)質(zhì)變產(chǎn)生很多有挑戰(zhàn)的問題,而解決這些問題是成為技術(shù)專家的必經(jīng)之路。
問:一路走來,微博的數(shù)據(jù)規(guī)模和業(yè)務場景都發(fā)生了很大的改變,請問新浪MySQL集群結(jié)構(gòu)發(fā)展到今天都經(jīng)歷了哪些階段?
微博到今天已經(jīng)有6年了,非常有幸全程參與了這6年的變化。新浪的MySQL集群結(jié)構(gòu)主要經(jīng)歷了3次重大的變化。
第一階段:初創(chuàng)階段
初期微博作為一個內(nèi)部創(chuàng)新產(chǎn)品,功能比較簡潔,而數(shù)據(jù)庫架構(gòu)也采用1M2S1MB的標準結(jié)構(gòu),按照讀寫分離設計,主庫承擔寫入,而從庫承擔訪問。如果訪問壓力過大,可以通過擴容從庫的數(shù)量獲得scale out的能力。
第二階段:爆發(fā)階段
微博上線之后,隨著用戶活躍度的增加,數(shù)據(jù)庫的壓力也與日俱增。我們首先通過采購高性能的硬件設備來對單機性能進行scale up,以滿足支撐業(yè)務的高速發(fā)展的需求。然后,通過使用高性能設備爭取來的時間對微博進行整體上的業(yè)務垂直拆分,將用戶、關(guān)系、博文、轉(zhuǎn)發(fā)、評論等功能模塊分別獨立存儲,并在垂直拆分的基礎(chǔ)上,對一些預期會產(chǎn)生海量數(shù)據(jù)的業(yè)務模塊再次進行了二次拆分。
以博文為例,博文是微博用戶主要產(chǎn)生的內(nèi)容,可以預見會隨著時間維度不斷增大,最終會變得非常巨大。如何在滿足業(yè)務性能需求的情況下,盡可能使用較少的成本存儲,這是我們面臨的一個比較有挑戰(zhàn)的問題。
首先,我們將索引同內(nèi)容進行了拆分,因為索引所需存儲的空間較少,而內(nèi)容存儲所需空間較大,且對這兩者的使用需求也不盡相同。
然后,分別對索引和內(nèi)容采用hash,然后再按照時間維度拆分的方式進行水平拆分,盡量保障每張表的容量在可控范圍之內(nèi),保障查詢的性能指標。
最后,業(yè)務先通過索引獲得實際所需內(nèi)容id,然后再通過內(nèi)容庫獲得實際的內(nèi)容,并通過部署memcached來加速整個過程。雖然看上去步驟變多,但是實際效果完全可以滿足業(yè)務需求。
第三階段:沉淀階段
在上一個階段,微博的數(shù)據(jù)庫經(jīng)歷了很多的拆分改造,這也就直接造成了規(guī)模的成倍增長,而隨著業(yè)務經(jīng)歷了高速增長之后,也開始趨于穩(wěn)定。在這個階段,我們開始著重進行自動化的建設。將之前在快速擴張期間積攢下來的經(jīng)驗轉(zhuǎn)變?yōu)樽詣踊ぞ撸瑢ν庑纬蓸藴驶土鞒袒钠脚_服務。我們相繼改造了備份系統(tǒng)、監(jiān)控系統(tǒng)、AutoDDL系統(tǒng)、MHA系統(tǒng)、巡檢系統(tǒng)、慢查系統(tǒng)、maya中間件系統(tǒng)等。為了提高業(yè)務使用效率和降低溝通成本,相對于內(nèi)部管理系統(tǒng)而言,我們重新開發(fā)了iDB系統(tǒng)對數(shù)據(jù)庫平臺的用戶使用。通過iDB系統(tǒng),用戶可以便捷地了解自己業(yè)務數(shù)據(jù)庫的運行狀態(tài),并可以直接提交對數(shù)據(jù)庫的DDL修改需求。DBA僅需點擊審核通過,即可交由Robot在線上執(zhí)行,不但提高了工作效率,也提高了安全性和規(guī)范性。
問:在過去的2015年,新浪數(shù)據(jù)庫平臺都做了哪些重大的改進和優(yōu)化?
數(shù)據(jù)庫平臺并不僅有MySQL,還有Redis、Memcached、HBase等數(shù)據(jù)庫服務,而在緩存為王的趨勢下,2015年我們重點將研發(fā)精力投入在Redis上。
Redis中間件
2015年,我們自研的Redis中間件tribe系統(tǒng)完成了開發(fā)和上線。tribe采用有中心節(jié)點的proxy架構(gòu)設計,通過configer server管理集群節(jié)點,并借鑒官方Redis cluster的slot分片設計思路來完成數(shù)據(jù)存儲。最終實現(xiàn)了路由、分片、自動遷移、fail over等功能,并且預留了操作和監(jiān)控的API接口,以便同其他的自動化運維系統(tǒng)對接。
Databus
由于我們先有MySQL后有Redis和HBase等數(shù)據(jù)庫,所以存在一種場景,就是目前數(shù)據(jù)已經(jīng)寫入到MySQL中,但是需要將這些數(shù)據(jù)同步到其他數(shù)據(jù)庫軟件中。為此我們開發(fā)了Databus,可以基于MySQL的binlog將數(shù)據(jù)同步到其他異構(gòu)的數(shù)據(jù)庫中,并且支持自定義業(yè)務邏輯。目前已經(jīng)實現(xiàn)了MySQL到Redis和MySQL到HBase的數(shù)據(jù)流向,下一步計劃開發(fā)Redis到MySQL的數(shù)據(jù)流向。
問:微博用戶庫設計采用了反范式設計,但是反范式設計也有自己的問題,比如在規(guī)模龐大時,數(shù)據(jù)冗余多,編碼及維護的困難增加。請問你們是如何解決這些問題的?
反范式設計帶來便利的同時確實也帶來了一些問題,尤其是在數(shù)據(jù)規(guī)模變大之后,通常來說會有如下幾種解決方案。
預拆分,接到需求的時候提前針對于容量進行評估,并按照先垂直后水平進行拆分,如果可以按照時間維度設計,那就納入歸檔機制。通過數(shù)據(jù)庫的庫表拆分,解決容量存儲問題。
引入消息隊列,利用隊列的一寫多讀特性或多隊列來滿足冗余數(shù)據(jù)的多份寫入需求,但僅能保障最終的一致性,中間可能會出現(xiàn)數(shù)據(jù)延遲。
引入接口層,通過不同業(yè)務模塊的接口將數(shù)據(jù)進行匯總之后再返回給應用層,降低應用層開發(fā)的編碼復雜度。
問:微博平臺當前在使用并維護著可能是世界上最大的Redis集群,在應用Redis的過程中,你們都產(chǎn)生了哪些具有獨創(chuàng)性的解決方案?
微博使用Redis的時間較早,并且一開始量就很大,于是在實際使用過程中遇到了很多實際的問題,我們的內(nèi)部分支版本都是針對這些實際問題進行優(yōu)化的。比較有特點的有如下三個。
增加基于pos位同步功能
在2.4版本中,Redis的同步一旦出現(xiàn)中斷就會重新將主庫的數(shù)據(jù)全部傳輸?shù)綇膸焐希@就會造成瞬時的網(wǎng)絡帶寬峰值,并且對于數(shù)據(jù)量較大的業(yè)務,其從庫恢復的時間較為緩慢。為此我們聯(lián)合架構(gòu)組的同事借鑒MySQL的主從同步復制機制,將Redis的aof改造為記錄pos位,并讓從庫記錄已經(jīng)同步的pos位置。這樣,在網(wǎng)絡出現(xiàn)波動的時候,即使重傳也只是一部分數(shù)據(jù),并不會影響到業(yè)務。
在線熱升級
使用初期,由于很多新功能的加入,Redis版本不斷升級,每次升級時為了不影響業(yè)務都需要進行主庫切換,這對于運維帶來了很大的挑戰(zhàn)。于是我們開發(fā)了熱升級機制,通過動態(tài)加載libredis.so來實現(xiàn)版本的改變,不再需要進行主庫切換,極大地提升了運維的效率,也降低了變更帶來的風險。
定制化改造
在使用Redis的后期,由于微博產(chǎn)品上技術(shù)類的需求非常多,所以我們?yōu)榇藢iT開發(fā)了兼容Redis的redisscounter存儲技術(shù)類的數(shù)據(jù)。通過使用array替換hash table極大降低了內(nèi)存占用。而在此之后,我們開發(fā)了基于bloom filter的phantom解決判斷類場景需求。
問:在一次分享中您曾經(jīng)透露新浪數(shù)據(jù)庫備份系統(tǒng)正計劃結(jié)合水位系統(tǒng)實現(xiàn)智能擴容,請問現(xiàn)在實現(xiàn)到哪一步了?
目前這個事情的進展不是很理想,主要是我們發(fā)現(xiàn)MySQL的擴容速度跟不上業(yè)務的變化,有些時候擴容完畢之后業(yè)務的高峰已經(jīng)過去了,接下來就需要做縮容,等于做了無用功。所以,目前我們的思路改為擴縮容cache層。首先實現(xiàn)cache層的自動擴縮容,然后同業(yè)務監(jiān)控系統(tǒng)或者接入層的自動化系統(tǒng)進行聯(lián)通,比如,如果計算節(jié)點擴容100個node,那么我們的cache層就聯(lián)動擴容20node,以此來達到業(yè)務聯(lián)動。
問:未來5年內(nèi)新浪數(shù)據(jù)庫還將做出什么樣的改變?
隨著業(yè)務的發(fā)展,會遇到越來越多的場景,我們希望可以引進最適合的數(shù)據(jù)庫來解決場景問題,比如PostgreSQL、SSDB等。同時,利用MySQL新版本的特性(比如5.7的并行復制、GTID、動態(tài)調(diào)整BP),不斷優(yōu)化現(xiàn)有服務的性能和穩(wěn)定性。
另外,對于現(xiàn)有的NoSQL服務,推進服務化,通過使用proxy將存儲節(jié)點進行組織之后對外提供服務。對外降低開發(fā)人員的開發(fā)復雜度和獲取資源的時間,對內(nèi)提高單機利用率并解決資源層橫向擴展的瓶頸問題。
同時,嘗試利用各大云計算的資源,實現(xiàn)cache層的動態(tài)擴縮容;充分利用云計算的彈性資源,解決業(yè)務訪問波動的問題。
問:您如何看待新興的NewSQL?
數(shù)據(jù)庫圈子的變化確實很快,NoSQL還剛剛方興未艾,NewSQL又開始你方唱罷我登場。我個人并不認為某種數(shù)據(jù)庫會取代另一種數(shù)據(jù)庫,就如同NoSQL剛剛興起的時候很多聲音認為它會徹底取代MySQL,但是從實際情況看依然還是互依并存的關(guān)系。以我負責的集群來說,反倒是MySQL更多一些。我個人認為,每種數(shù)據(jù)庫都有其最擅長的場景,在特定場景下它就是最佳的數(shù)據(jù)庫,但是如果脫離了場景則很難說誰優(yōu)誰劣。
問:能否請您橫向?qū)Ρ纫幌翸ySQL、MongoDB以及PostgreSQL?
我個人對MySQL使用得較多,MongoDB和PostgreSQL都有過一些接觸,MySQL作為LAMP中的一員,老實說對大部分場景都是合適的,尤其是在并發(fā)和數(shù)據(jù)庫量并沒有達到一個很大值的時候。但是,在某些場景下MongoDB和PostgreSQL確實更勝一籌。
比如我們在門戶的新聞發(fā)布系統(tǒng)中使用了MongoDB,其schema less的設計模式和新聞非常貼合,而其sharding功能又解決了容量上的橫向擴張問題,在這個場景下,MySQL并不具備什么優(yōu)勢。
而在LBS(基于地理位置信息服務)相關(guān)的方面,PostgreSQL和PostGIS更具有優(yōu)勢,利用其空間數(shù)據(jù)索引R-tree和實體類型點、線、線段、方形,以及特定的函數(shù),可以很方便地實現(xiàn)空間計算需求。
就我個人來說,每種數(shù)據(jù)庫都有其擅長的場景。如果沒有特殊的架構(gòu)需求,一般選擇MySQL都不會出問題。如果有特殊的架構(gòu)需求,那么就需要根據(jù)需求的特點來選擇不同的數(shù)據(jù)庫。
問:對于想要掌握MySQL的同學,您有哪些學習上的建議?
首先,多讀書,至少將High Performance MySQL通讀一遍。
其次,有條件的話,最好找一些大平臺歷練一下,在很多情況下經(jīng)驗和能力等同于你解決過的問題的廣度和深度,而環(huán)境決定你遇到的問題。
最后,有機會的話多做一些技術(shù)分享,很多知識點自己明白和能給別人講明白是兩個完全不同的境界。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/61685.html
摘要:不久,傳說中的月影大大進入了視線。目前擔任奇虎副總監(jiān)技術(shù)委員會委員兼前端技術(shù)委員會主席,前端最大團隊奇舞團負責人,顧問。圖靈訪談我知道月影大大在前端方面特別有名,圖靈社區(qū)的好多留言也都感嘆終于有機會訪談到月影大大了。 本文僅用于學習和交流,不用于商業(yè)目的。非商業(yè)轉(zhuǎn)載請注明作譯者、出處,并保留本文的原始鏈接:http://www.ituring.com.cn/Art... 編者語 通往...
摘要:不久,傳說中的月影大大進入了視線。目前擔任奇虎副總監(jiān)技術(shù)委員會委員兼前端技術(shù)委員會主席,前端最大團隊奇舞團負責人,顧問。圖靈訪談我知道月影大大在前端方面特別有名,圖靈社區(qū)的好多留言也都感嘆終于有機會訪談到月影大大了。 本文僅用于學習和交流,不用于商業(yè)目的。非商業(yè)轉(zhuǎn)載請注明作譯者、出處,并保留本文的原始鏈接:http://www.ituring.com.cn/Art... 編者語 通往...
摘要:不久,傳說中的月影大大進入了視線。目前擔任奇虎副總監(jiān)技術(shù)委員會委員兼前端技術(shù)委員會主席,前端最大團隊奇舞團負責人,顧問。圖靈訪談我知道月影大大在前端方面特別有名,圖靈社區(qū)的好多留言也都感嘆終于有機會訪談到月影大大了。 本文僅用于學習和交流,不用于商業(yè)目的。非商業(yè)轉(zhuǎn)載請注明作譯者、出處,并保留本文的原始鏈接:http://www.ituring.com.cn/Art... 編者語 通往...
閱讀 3273·2021-11-22 14:44
閱讀 1118·2021-11-16 11:53
閱讀 1271·2021-11-12 10:36
閱讀 705·2021-10-14 09:43
閱讀 3697·2019-08-30 15:55
閱讀 3404·2019-08-30 14:14
閱讀 1742·2019-08-26 18:37
閱讀 3416·2019-08-26 12:12