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