看京東如何玩轉云數據庫

jopen 9年前發布 | 15K 次閱讀 云數據庫
 

作為支撐百億級數據量業務的基礎服務,京東云數據庫在可用性及高性能方面有極高的要求。本期我們的采訪嘉賓是京東資深架構師張成遠,本文根據采訪整理而成。

受訪嘉賓

張成遠,京東資深架構師,《Mariadb原理與實現》作者,開源項目speedy作者。2012年加入京東云數據庫技術團隊,擅長高性能服務器開發、分布式數據庫、分布式存儲/緩存等大規模分布式系統架構,主導了京東分布式數據庫系統及容器系統的架構與開發工作。在 ArchSummit北京2015 全球架構師峰會上,張成遠將作為專題講師為大家帶來 《京東云數據庫支撐百億級數據量業務的探索與實踐》

云數據庫服務是一項基礎性的云服務,解決用戶自己搭建數據庫時需要考慮的各種問題,讓用戶在使用時可以按需申請數據庫資源,保證整個數據庫服務的穩定性及數據的可靠性,同時提供彈性伸縮等的支持,盡可能的降低用戶在使用云數據庫時的成本。

本主題主要是分享京東私有云分布式數據庫集群的實現,包括如何支撐上億級數據量的業務,如何保證數據高可靠、服務高可用以及在線集群擴容等機制。另外還會分享京東公有云數據庫的架構與設計,如何實現一個穩定、可靠、可彈性伸縮的公有云數據庫服務,涉及到備份、恢復、監控、遷移、高可用切換等一整套方案。

京東內部有大量業務的數據是存放在Oracle中的,為了完成京東內部去O的過程,我們為此打造了一套私有云分布式數據庫集群,這套私有云分布式數據庫集群目前支撐著京東大量擁有上百億級數據量的業務,本主題中會重點介紹去O過程中遇到的難點同時詳細介紹在內部數據庫云化以及在支撐大規模業務過程中積累的經驗,包括如何打造一套高性能的私有云分布式數據庫集群服務,如何在支撐京東上百億級別數據量業務正常服務的情況下做到在線無縫集群擴容,分享來自京東生產一線的經驗。

云服務最重要的是要做到可彈性伸縮可按需獲取資源,讓用戶可以盡可能的花最少的代價滿足業務的需求。用戶使用云數據庫時面臨當業務量增長時申請的資源不夠,需要做到快速的擴張現有資源,當業務量降低時需要快速縮小現有資源。當數據庫實例甚至整個機房發生故障時,要做到用戶在云數據庫中的數據是安全的可靠的,可以第一時間恢復云數據庫服務,包括跨機房恢復等,保證云上的用戶業務是不受影響的,這些都是云服務尤其是云數據庫服務需要解決的事情,本主題也會介紹京東公有云數據庫是怎么解決這些問題的以及在解決這些問題時積累的經驗。

精彩內容敬請期待,以下是InfoQ記者對京東資深架構師張成遠的專訪:

InfoQ:請成遠簡單介紹一些京東云數據庫服務。

張成遠:京東云數據庫主要包括公有云數據庫服務和私有云數據庫服務兩部分。公有云數據庫主要是面向外部用戶,定位是中小型公司;私有云數據庫主要針對公司內部業務,有時候甚至會特殊業務特殊對待,會針對業務的特點來具體問題具體分析,數據量較大的業務我們會建議業務使用我們私有云分布式數據庫集群,將數據進行拆分等。這兩項服務在京東都是由同一個團隊來提供支持,京東云數據庫的總體做法是將私有云數據庫中積累的經驗逐步的輸出到公有云數據庫上。

InfoQ:云數據庫集群服務和N個數據庫同時提供服務有何區別?

張成遠:云數據庫集群服務主要是指分布式數據庫集群,用戶在使用這個集群的時候可以像使用單臺數據庫一樣去使用,在業務層面不用關心集群中的數據是如何分布的,對用戶來說后端的數據庫實例是不可見的或者不需要關心的,在使用層面來說心智負擔會大大降低。

N個數據庫同時提供服務一般是指N個數據庫服務多個不同的業務,或者是某個業務同時使用了N個數據庫,但是業務對這些數據庫是有感知的,換句話說這N個數據庫對業務都是可見的。

InfoQ:云數據庫技術相對于普通的數據庫技術的挑戰在哪?

張成遠:云數據庫服務其實也可以理解為將傳統的數據庫服務搬到云上,但是云數據庫服務尤其是公有云數據庫和傳統的數據庫確實是有區別的,最大的挑戰在于不僅僅要提供數據庫服務,還需要與用戶的私有網絡及云主機甚至包括云存儲等各項云服務相互配合提供高可用的服務、保證數據的高可靠,是一整套云服務中的一項。傳統的數據庫技術更多關注的是數據庫本身的,網絡及主機等問題一般會比較簡單。

InfoQ:京東云數據庫的架構是怎么樣的?這樣的架構有何優勢?

張成遠:京東公有云數據庫的架構都是基于私有云數據庫的實踐經驗所得,在實際輸出的時候考慮到安全及彈性伸縮等的考慮,公有云上采用基于虛機部署的方式,結合云主機云存儲以及云數據庫系統自身相配套的信息采集系統再整合公司的監控系統等各項服務,對外提供可伸縮高可用及高可靠的公有云數據庫服務。

私有云中的分布式數據庫集群架構主要是采用引入中間件的方式來支撐業務,中間件本身完全兼容mysql協議,在內部業務使用的時候可以像使用原生數據庫一樣簡單。

InfoQ:這套服務是如何做性能監控的?如何找到服務中的慢查詢等問題?

張成遠:公司內部有一套完整的統一的監控系統,云數據庫自身還有一套信息采集系統,采集系統會采集數據庫實例上的相關信息包括慢查詢以及機器負載等信息,這些采集的信息經分析處理以后如果如果發現有異常比如有慢查詢或者機器負載較高,會通過統一的監控系統觸發報警,做到及時發現問題及時處理問題。

在私有云分布式數據庫集群中的性能監控主要是兩部分構成,一部分是分布式數據庫中間件會對查詢做一些統計信息,這些統計信息中有超過某些閾值的情況就會觸發報警,另外一部分是數據庫本身的完善的監控系統。

InfoQ:在彈性伸縮部署方面,京東有哪些獨創的技術?

張成遠:京東公有云數據庫目前是部署在虛擬機里的,基于虛擬機的快速創建我們可以做到公有云數據庫實例的較快的創建。私有云數據庫目前有很大一部分已經將數據庫實例放到容器里,在創建部署方面將更加的便捷,當內部驗證以后后續我們也會考慮輸出到公有云上。

InfoQ:在雙十一等活動中,百億級數據量業務給了云數據庫服務什么樣的壓力?技術上是如何保證整個架構能夠扛得住這么大壓力的?

張成遠:私有云數據庫在重大活動中確實有很大的壓力,這些方面沒有捷徑,我們能做的是在活動之前做好預案,包括提前演練壓測等以及各種異常情況的應對方案。

將數據庫放到容器里解決了我們較大的一個問題,可以快速的創建需要的數據庫實例資源,另外我們也針對內部業務的特點開發了一套私有云分布式數據庫中間件系統,讓壓力分散到多個實例上,降低每個數據庫實例的壓力。

InfoQ:在技術演進過程中,有沒有哪些你印象特別深刻的故事跟我們分享一下?

張成遠:京東的業務發展非常的迅猛,所以在很大程度上來說京東的技術都在被業務驅動著往前跑,很多業務早期數據可能是放在Oracle或者 Sqlserver中的,等到業務量比較龐大的時候再著手將數據從原來的數據庫遷移到mysql里的時候就會比較痛苦,一般都需要業務方和數據庫團隊緊密配合才能真正的完整的遷移出來,但是也正是因為有這些實際的業務需求驅使著京東的技術不斷的提升。

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!