國(guó)美在線那廣:數(shù)據(jù)庫運(yùn)維思考與實(shí)踐
原創(chuàng)【51CTO.com原創(chuàng)稿件】數(shù)據(jù)庫的運(yùn)維管理是個(gè)技術(shù)活兒,需要DBA有很強(qiáng)的技術(shù)能力和足夠的耐心。在WOT2016移動(dòng)互聯(lián)網(wǎng)技術(shù)峰會(huì)上,來自國(guó)美在線的平臺(tái)運(yùn)維部經(jīng)理那廣講述了國(guó)美在線數(shù)據(jù)庫的發(fā)展,根據(jù)生產(chǎn)中遇到的問題結(jié)合自身的思考與實(shí)踐,通過構(gòu)建數(shù)據(jù)庫運(yùn)維平臺(tái),解決運(yùn)維過程中遇到的問題,實(shí)現(xiàn)資源精細(xì)化控制,提高服務(wù)交付效率,為業(yè)務(wù)的快速發(fā)展及實(shí)現(xiàn)業(yè)務(wù)彈性化起到支撐作用。
國(guó)美在線數(shù)據(jù)庫的發(fā)展歷程
那廣首先從數(shù)據(jù)庫架構(gòu)和運(yùn)維工具的變化兩個(gè)方面介紹了數(shù)據(jù)庫運(yùn)維架構(gòu)的發(fā)展。在數(shù)據(jù)庫架構(gòu)方面,主要經(jīng)歷了三個(gè)階段:讀寫分離、垂直拆分和水平拆分。
讀寫分離階段:國(guó)美業(yè)務(wù)創(chuàng)建初期,業(yè)務(wù)主要以家電為主,業(yè)務(wù)比較單一。隨著業(yè)務(wù)量增大單庫會(huì)出現(xiàn)瓶頸,比如通過讀寫分離或者加SSD盤解決性能上的問題,目前很火的是SSD或閃存卡,原因是現(xiàn)在單庫存在的性能瓶頸體現(xiàn)在IO方面,跟內(nèi)存數(shù)據(jù)庫差的是在IO層面,主要是通過讀寫分離解決這個(gè)問題,在容災(zāi)方面就采用復(fù)制或者HA集群方式解決這個(gè)問題。
垂直拆分階段:這個(gè)階段主要以O(shè)RACLE為主。隨著業(yè)務(wù)量增大,單庫已經(jīng)很難滿足業(yè)務(wù)需求。IO業(yè)務(wù)變得復(fù)雜,隨之SQL也復(fù)雜化。此時(shí),只能垂直下分,于是出現(xiàn)了單個(gè)服務(wù)化。例如按照功能拆分?jǐn)?shù)據(jù)庫,拆分成購物車、訂單、支付或者商品這種服務(wù)的拆分。這個(gè)階段對(duì)服務(wù)的質(zhì)量要求開始提高,搭建了兩地三中心,實(shí)現(xiàn)了跨機(jī)房容災(zāi),以及網(wǎng)絡(luò)存儲(chǔ)級(jí)別容災(zāi)。
水平拆分階段:業(yè)務(wù)量的持續(xù)增長(zhǎng),造成了訂單或者購物車壓力逐漸增大,只能做水平拆分。比如:把購物車按照用戶哈希到不同的MySQL分片里,解決單庫問題和某個(gè)模塊的性能問題。隨著NoSQL技術(shù)發(fā)展成熟,可能也采用一些Redis技術(shù),在購物車時(shí)先寫Redis,再異步同步到MySQL,類似這種方案,包括采用MongoDB,把規(guī)格參數(shù)或者是評(píng)論,一些日志類的東西放在MongoDB里,比如規(guī)格參數(shù),手機(jī)、冰箱、彩電規(guī)格是不一樣的,制造了一個(gè)規(guī)格參數(shù)模板,想改變這個(gè)模板加了一個(gè)屬性,對(duì)于慣性數(shù)據(jù)庫來說這是非常麻煩的,而對(duì)于MongoDB來說非常簡(jiǎn)單,只要加一個(gè)字段就可以,非常適合MongoDB的場(chǎng)景。
在運(yùn)維工具的發(fā)展方面,經(jīng)歷了腳本時(shí)代、工具時(shí)代、自動(dòng)化時(shí)代以及平臺(tái)化時(shí)代。
2010年的腳本時(shí)代,可能僅有一兩個(gè)人,通過寫簡(jiǎn)單的腳本執(zhí)行SQL或者做日常巡檢等工作。只要通過腳本就可以滿足業(yè)務(wù)需求,包括安裝數(shù)據(jù)庫、執(zhí)行SQL等,通過手工執(zhí)行即可解決。隨著數(shù)據(jù)庫類型和數(shù)據(jù)量的增加,在響應(yīng)速度上出現(xiàn)了問題。比如:手工安裝數(shù)據(jù)庫的效率太慢,而且每個(gè)人安裝的數(shù)據(jù)庫的目錄、端口或者配置參數(shù)都會(huì)五花八門,對(duì)于同一功能每個(gè)人在寫腳本時(shí)寫法也不盡相同。這個(gè)階段對(duì)標(biāo)準(zhǔn)化或者規(guī)范化要求越來越高,要做到自動(dòng)化可能需要標(biāo)準(zhǔn)化或者流程化做到位才可以實(shí)現(xiàn)。通過自動(dòng)化解決日常中運(yùn)維流程復(fù)雜性,根據(jù)定義好的規(guī)范可以實(shí)現(xiàn)自動(dòng)化安裝,自動(dòng)從SVN上取下來代碼就可以自動(dòng)執(zhí)行,這時(shí)如果靠記憶去記一共有多少個(gè)庫,開發(fā)說在哪塊執(zhí)行NoSQL,如果還靠人去記這很難實(shí)現(xiàn)。2014-2015年的自動(dòng)化時(shí)代,自動(dòng)化主要解決的是內(nèi)部運(yùn)維流程問題,包括數(shù)據(jù)采集、監(jiān)控自動(dòng)化。那么如何把數(shù)據(jù)串起來,實(shí)現(xiàn)統(tǒng)一轉(zhuǎn)現(xiàn),如何與其他部門溝通,SQL做什么用,需要實(shí)現(xiàn)哪些功能?什么時(shí)候執(zhí)行?在哪個(gè)系統(tǒng)執(zhí)行?這個(gè)溝通的成本很大。于是在2015-2016年發(fā)展到了平臺(tái)化時(shí)代后,平臺(tái)的主要功能就是把整個(gè)流程都串起來,包括申請(qǐng)服務(wù)器需要的數(shù)據(jù)庫類型,功能等。
那廣表示,當(dāng)平臺(tái)技術(shù)和自動(dòng)化技術(shù)完善之后可能會(huì)進(jìn)入智能化時(shí)代,采集數(shù)據(jù)之后通過數(shù)據(jù)分析能智能去解決一些運(yùn)維中的問題。假設(shè)磁盤空間80%報(bào)警了,會(huì)通過監(jiān)控定位出來是哪個(gè)部落或者哪個(gè)數(shù)據(jù)文件報(bào)警,分析歷史是否有類似報(bào)警,數(shù)據(jù)增長(zhǎng)趨勢(shì),還會(huì)分析是因?yàn)閭浞菔×耍热鐩]有清理日志或者因?yàn)閳?bào)錯(cuò)引起的磁盤空間報(bào)警,再預(yù)判一下如果不處理多長(zhǎng)時(shí)間會(huì)造成事故,通過分析定位出來問題會(huì)自動(dòng)清理一些日志類的東西,實(shí)現(xiàn)日志報(bào)錯(cuò),保證主機(jī)故障能夠自動(dòng)解決,延緩故障率,自動(dòng)解決生產(chǎn)中遇到的問題。隨著技術(shù)的成熟,在運(yùn)維焦點(diǎn)上也發(fā)生了變化,最開始可能關(guān)注故障和性能,故障的快速響應(yīng),包括數(shù)據(jù)庫性能、備份、容災(zāi),隨著這些穩(wěn)定了之后更關(guān)注的是自動(dòng)化、流程、質(zhì)量,開發(fā)了一些流程,做了一些開發(fā)規(guī)范、運(yùn)維規(guī)范,包括把一些故障或者日常處理問題都會(huì)記錄到數(shù)據(jù)庫。隨著這些完善之后可能下一步關(guān)注的焦點(diǎn)是在于服務(wù)或者成本還有效率,怎么樣降低硬件成本和人力成本,以及怎么快速交付數(shù)據(jù)庫的服務(wù)。
數(shù)據(jù)庫運(yùn)維挑戰(zhàn)重重
在數(shù)據(jù)庫運(yùn)維中遇到的挑戰(zhàn),主要體現(xiàn)在四個(gè)方面:存儲(chǔ)、流程、服務(wù)和監(jiān)控。
在存儲(chǔ)方面,是廣義類型的存儲(chǔ),例如數(shù)據(jù)庫選型,應(yīng)用的需求,會(huì)分析到底適合用什么樣類型的數(shù)據(jù)庫。日志或者訂單流轉(zhuǎn)狀態(tài),可能用MongoDB就可以。如何選擇更合適的數(shù)據(jù)庫,包括容量的規(guī)劃,數(shù)據(jù)量預(yù)計(jì)的增長(zhǎng)情況,通過什么判斷這個(gè)數(shù)據(jù)未來增長(zhǎng)情況。包括分片設(shè)計(jì),到底是設(shè)計(jì)一年的增長(zhǎng)率,還是設(shè)計(jì)兩三年的增長(zhǎng)率,通過什么去做分片,數(shù)據(jù)怎么做匯總,這是存儲(chǔ)方面需要解決的問題。
在流程方面,流程是如何快速做到響應(yīng),包括故障響應(yīng)和服務(wù)響應(yīng),故障如何快速處理,開發(fā)提出來的需求如何能夠快速響應(yīng)這個(gè)服務(wù),包括操作和歷史追溯性,各個(gè)接口之間數(shù)據(jù)是怎么串聯(lián)的,怎么進(jìn)行統(tǒng)一的查詢、分析。
在監(jiān)控方面,想要做到快速響應(yīng)、實(shí)時(shí)響應(yīng),很精準(zhǔn)報(bào)警,可以做到事件預(yù)測(cè),比如判斷磁盤空間數(shù)據(jù)增長(zhǎng)情況,可以預(yù)判多長(zhǎng)時(shí)間會(huì)出現(xiàn)問題,可能需要擴(kuò)容類似這種。高效準(zhǔn)確,假設(shè)報(bào)警很多,同樣類型的報(bào)警隔一分鐘報(bào)一次,報(bào)警會(huì)很多,上千或上萬,就成為了一個(gè)垃圾報(bào)警,根本就沒法處理這些問題,如何做這方面的優(yōu)化,做數(shù)據(jù)清洗,比如同一類型報(bào)警不會(huì)反復(fù)發(fā),發(fā)現(xiàn)了下次再出現(xiàn)相同類似報(bào)警匯總起來,隔5分鐘或者隔10分鐘再發(fā)一次,做到報(bào)警信息的清洗工作,包括準(zhǔn)確性。
在服務(wù)方面,對(duì)開發(fā)提出的需求、日常變更能夠快速響應(yīng)、快速執(zhí)行,怎么能讓開發(fā)更了解數(shù)據(jù)庫的運(yùn)行狀況,讓他們也能幫助我們做一些性能方面的檢查,因?yàn)樗麄兏私庾约旱臉I(yè)務(wù),一看SQL或性能就知道大概哪塊出現(xiàn)了問題,而不單純從數(shù)據(jù)庫層面優(yōu)化SQL或性能。如何保證數(shù)據(jù)庫的安全,保證數(shù)據(jù)安全、訪問安全。
應(yīng)對(duì)之道
根據(jù)遇到的問題以及挑戰(zhàn),國(guó)美確立了數(shù)據(jù)庫運(yùn)維目標(biāo),改變了數(shù)據(jù)庫運(yùn)維的角色,并建立了運(yùn)維四化準(zhǔn)則。
數(shù)據(jù)庫運(yùn)維目標(biāo)就是要提供一個(gè)高效、穩(wěn)定、安全的數(shù)據(jù)庫服務(wù)?,F(xiàn)在轉(zhuǎn)變了觀念,認(rèn)為數(shù)據(jù)庫是一種服務(wù)。對(duì)于開發(fā)來說是透明的,提供數(shù)據(jù)庫服務(wù),切換或者報(bào)錯(cuò)故障對(duì)開發(fā)來說沒有感應(yīng),不需要改任何配置就可以實(shí)現(xiàn)數(shù)據(jù)庫切換。高效性注重于響應(yīng)效率、交付效率,包括監(jiān)控準(zhǔn)確性,提高日常運(yùn)維效率。穩(wěn)定性通過事件預(yù)測(cè)、歷史數(shù)據(jù)分析、數(shù)據(jù)分析,保證數(shù)據(jù)庫的穩(wěn)定運(yùn)行。成本則可能通過容量規(guī)劃、擴(kuò)展設(shè)計(jì),節(jié)省硬件成本,通過提升運(yùn)維效率降低人力成本。安全可能要做數(shù)據(jù)安全備份,包括訪問安全限制,快速故障切換等。
在數(shù)據(jù)庫運(yùn)維角色上,分成了產(chǎn)品DBA、運(yùn)維DBA和運(yùn)維開發(fā)DBA。產(chǎn)品DBA主要是對(duì)接開發(fā),制定一些開發(fā)規(guī)范,性能優(yōu)化,開發(fā)討論架構(gòu)上的方案。原來少的時(shí)候一個(gè)人就可以搞定,從運(yùn)維到跟開發(fā)溝通全都搞定了,但是隨著開發(fā)人員比較多,溝通成本非常大,而且有些人溝通能力稍微強(qiáng)點(diǎn),有些人側(cè)重于技術(shù),在運(yùn)維角色上也做了一些改變。運(yùn)維DBA主要做基礎(chǔ)運(yùn)維規(guī)范,容量規(guī)劃,什么時(shí)候需要采購機(jī)器。開發(fā)DBA主要是對(duì)自己內(nèi)部平臺(tái)進(jìn)行搭建,解決運(yùn)維DBA和開發(fā)DBA困難的同時(shí)收集一些數(shù)據(jù),對(duì)決策支持做一些幫助。
運(yùn)維四化準(zhǔn)則即是:平臺(tái)化、自動(dòng)化、服務(wù)化和可視化。
平臺(tái)化:主要是把一些零散的服務(wù)整合起來,原來有備份系統(tǒng)、部署系統(tǒng)、發(fā)版系統(tǒng),有用戶管理、權(quán)限管理,在操作需要?jiǎng)?chuàng)建用戶可能跳到用戶平臺(tái),需要安裝部署又跳到部署平臺(tái),要達(dá)到平臺(tái)統(tǒng)一入口,在這一塊就可以操作所有動(dòng)作,而且這些數(shù)據(jù)都可以串聯(lián)起來,都可以通過接口或者推送把這些基礎(chǔ)數(shù)據(jù)串聯(lián)起來,做到統(tǒng)一調(diào)度和統(tǒng)一數(shù)據(jù)展現(xiàn)。
自動(dòng)化:就是標(biāo)準(zhǔn)化、規(guī)范化、流程化。
服務(wù)化:主要是數(shù)據(jù)庫角度變換,現(xiàn)在提供的是服務(wù),有可能以后還會(huì)有計(jì)費(fèi),假設(shè)某一個(gè)部門或某一個(gè)中心用了多少資源,這是為了下一步做打算。
可視化:通過可視化方式多維度展現(xiàn)基礎(chǔ)數(shù)據(jù)。比如每個(gè)業(yè)務(wù)中心用了多少數(shù)據(jù)庫,每個(gè)機(jī)房里數(shù)據(jù)庫部署的情況,包括開發(fā)環(huán)境和生產(chǎn)環(huán)境數(shù)據(jù)庫的比例,數(shù)據(jù)庫MySQL是多少,MongoDB是多少,類似基礎(chǔ)數(shù)據(jù)維度查詢,包括應(yīng)用連了數(shù)據(jù)庫多少個(gè)連接,歷史性能數(shù)據(jù)分析、展現(xiàn),做到可以多維度查詢,更好地支持運(yùn)維決策。
數(shù)據(jù)庫運(yùn)維實(shí)踐
數(shù)據(jù)庫運(yùn)維平臺(tái)架構(gòu)基本分為兩個(gè)部分:基礎(chǔ)服務(wù)和應(yīng)用服務(wù)?;A(chǔ)服務(wù)包含監(jiān)控、備份、DNS管理、CMDB、知識(shí)庫、文件共享,通過這些基礎(chǔ)服務(wù)能夠支撐什么樣的服務(wù),比如動(dòng)態(tài)高性能,切換、資源整合管理、用戶管理、連接管理,通過一些基礎(chǔ)信息關(guān)聯(lián)能夠更好提供應(yīng)用服務(wù)。該架構(gòu)在效率方面實(shí)現(xiàn)了自動(dòng)化部署提升交付效率,一鍵式遷移提升運(yùn)維效率, 并利用自動(dòng)化發(fā)版提升運(yùn)維效率。對(duì)于數(shù)據(jù)庫的安全問題,通過用戶、連接、權(quán)限全方位保證。
【講師簡(jiǎn)介】
那廣,國(guó)美在線平臺(tái)運(yùn)維部經(jīng)理(架構(gòu)師),國(guó)美在線技術(shù)體系創(chuàng)始團(tuán)隊(duì)成員之一。目前主要負(fù)責(zé)數(shù)據(jù)庫及自動(dòng)化運(yùn)維平臺(tái)。設(shè)計(jì)并帶領(lǐng)開發(fā)了數(shù)據(jù)庫容災(zāi)切換系統(tǒng)、SQL發(fā)版系統(tǒng)、備份系統(tǒng)、數(shù)據(jù)庫巡檢系統(tǒng)等;主要方向致力于搭建自動(dòng)化運(yùn)維平臺(tái),提供高性能、高可用的數(shù)據(jù)庫服務(wù)。
本文由那廣于2016年8月,在WOT2016移動(dòng)互聯(lián)網(wǎng)技術(shù)峰會(huì)運(yùn)維與安全專場(chǎng)《數(shù)據(jù)庫運(yùn)維實(shí)踐》主題演講整理而成。WOT2016大數(shù)據(jù)峰會(huì)將于2016年11月25-26日在北京粵財(cái)JW萬豪酒店召開,屆時(shí),數(shù)十位大數(shù)據(jù)領(lǐng)域一線專家、數(shù)據(jù)技術(shù)先行者將齊聚現(xiàn)場(chǎng),在圍繞機(jī)器學(xué)習(xí)、實(shí)時(shí)計(jì)算、系統(tǒng)架構(gòu)、NoSQL技術(shù)實(shí)踐等前沿技術(shù)話題展開深度交流和溝通探討的同時(shí),分享大數(shù)據(jù)領(lǐng)域***實(shí)踐和最熱門的行業(yè)應(yīng)用。了解WOT2016大數(shù)據(jù)技術(shù)峰會(huì)更多信息,請(qǐng)登陸大會(huì)官網(wǎng):http://wot.51cto.com/2016bigdata/
【51CTO原創(chuàng)稿件,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文作者和出處為51CTO.com】