6月24日至25日,由中國開源軟體推進聯盟(copu)主辦的“第十一屆開源中國開源世界高峰論壇”在北京成功召開。本屆論壇以“深化開源交流,壯大開源平台,服務萬衆創新,發展共享經濟”為主題。
阿裡雲資深開發資料庫工程師鄭涔(花名明俨),受邀參與了這次大會,為大家介紹了阿裡雲與開源項目mongodb的故事,他的演講内容大緻可分為三部分:
mongodb簡介:主要介紹mongodb項目
利用mongodb搭建雲資料庫服務
雲資料庫mongodb社群建設
以下是鄭涔發言整理内容。
mongodb是一個文檔型的nosql資料庫。目前是全世界最受歡迎的文檔型資料庫之一,僅次于oracle、mysql等資料庫。

大體認為mongodb是傳統關系型資料庫和nosql的一個結合。對資料庫有所了解的人都知道,傳統的關系
型資料庫需要一些諸如建表、設定字段等複雜操作。而近幾年比較火爆的nosql,無需建立schema就可以利用一些簡單的k/v存儲,來實作資料存儲。是以說相對于傳統的關系型資料庫,nosql資料庫在擴充性、性能等方面更勝一籌。
mongodb結合兩者優點。一方面,它在某種程度上像是包含了傳統關系型資料庫的特性,如具備豐富的查詢語句及一些索引功能;另一方面,它也繼承了nosql的優點,省去了設計字段和表的麻煩,并且擁有較好的性能,可以很友善的進行水準擴充。
mongodb的主要特性可歸納為如下三點:
靈活動态的文檔模型。适用于需要進行快速疊代開發的場景。
高可用。副本集架構具備自動容災切換的功能。
水準擴充。存儲的資料相對比較聚集,便于對資料進行水準分割,提高擴充能力。
具體而言,在傳統關系型資料庫中,我們需要在設計時考慮資料庫要有哪些表,哪些字段,有時候需要在不同的表之間通過join進行一些複雜的查詢操作。而mongodb的文檔模型則不需要那些操作,它存儲的是json格式的文檔,以富文檔的形式存儲所需資料,通過資料備援來避免join,并提高性能。
在高可用方面,它采用了多節點副本集架構,使使用者完全不需要關心容災問題,因為其内部實作了選舉算法,如果主節點發生當機,它能自動地進行新的主節點選舉,保證服務可用。這個功能可以用來實作多資料中心支援,以及滾動運維,舉個例子,當你需要對系統進行維護的時候,你可以主動把目前的主節點降級為一個備節點,對備節點進行維護,維護好後再提升為主節點。
在海量資料的支援及可擴充性方面 ,mongodb同樣做得很出色。使用者可以對資料進行水準切割,系統可以自動實作負載均衡,對使用者來說則都是透明的。
在适用場景方面,使用者所能想到的場景,mongodb基本上都能可以勝任,除了一些需要複雜的事務處理的場景。
阿裡雲的mongodb雲資料庫服務是基于最新的mongodb社群版本3.2建構的,存儲引擎采用wiredtiger,性能比較優秀。目前該服務的特性主要展現在資料庫的高可用、高可靠、高可擴充等方面。
此外,mongodb雲資料庫服務擁有一支專業的源碼團隊,團隊核心成員全部都是官方認證的dba,他們可以做到核心的深度優化。目前他們的工作主要關注在mongodb核心剖析、為使用者提供一些增值服務和創新優化、社群建設等方面。
阿裡雲資料庫團隊擁有一個中台團隊,開發了一系列的系統工具并摸索出一整套的流程,可以友善地把一個開源的資料庫做成一個雲服務。目前阿裡雲的mongodb雲資料庫服務在高可用方面上做的主要改進就是通過n+1個節點再加上負載均衡的方式來保證使用者同時有n個節點可用。使用者可以拿到一組包含n個節點的連接配接位址,這n個位址是會通過一個負載均衡服務動态解析到後端的服務節點。當有節點當機時,阿裡雲會根據情況對節點連接配接位址的指向情況進行動态切換,保證使用者始終有n個節點是可用的。
具體來說,當n為2時,使用者可以拿到兩個連接配接位址,其中一個連接配接位址是指向目前主節點的服務,另一個指向目前備節點,那麼當主節點發生問題當機時,這個主節點會自動下線,這時備節點會自動提升為主節點,另外原來的一個隐藏節點會提升為備節點,并且系統會根據情況為使用者再建立一個隐藏節點,這樣就能始終保持兩個節點高可用。隐藏的那個節點平時也可以拿來做一些資料備份等操作,由于使用者看不到這個節點,這樣不會對使用者的通路産生影響。
另外,如果需要為使用者提供雲服務,系統必須要做一些多租戶的安全管理。這裡我們是用成熟的cgroup解決方案來做一個多租戶的隔離和資源限制,來實作io、cpu及記憶體等資源的隔離。同時我們做了一些系統權限的獨立,使每個使用者的每個執行個體隻能存訪自己的一個目錄,進而進一步提高安全方面的隔離。另外,我們還将内部使用的管理賬号和使用者的賬号隔離開。因為我們需要讓使用者的使用更加省心,我們對使用者屏蔽了内部的一些細節,包括一些進階的運維指令。此外使用者還可以設定白名單來增強安全性。
目前阿裡雲mongodb雲資料庫實作了一些企業版本才有的特性。衆所周知,mongodb除了有一個開源的社群版外,它還有一個收費的企業版,有一些進階特性是企業版才具備的。
阿裡雲團隊也針對社群版本實作了一些企業版才有的特性:
一個是資料庫的審計,這是一個重要的功能,大型企業一般都需要這個特性來獲知或是處理安全方面的問題,以及用來做使用者行為的分析,或者是做一些索引的自動優化建議等;
另一個是對中文索引的支援,原本的社群版本不具備這個中文處理的特性,這對廣大的中國開發者來說是一個福音;
另外還包括一些創新優化,如動态調整mongodb主備同步使用的增量日志的空間占用甚至于自适應的進行調整、對短連接配接做了性能優化,等等。
這些都是阿裡雲團隊在實際開發運維中遇到的問題,并針對這些問題做的一些改進。
mongodb的發展離不開社群的支援,目前mongodb的社群人氣火爆,使用者活躍。在mongodb開源社群的一些建設中,可以獲得的最大的好處就是我們可以站在巨人的肩膀上。現在mongodb這個開源資料庫已經做得非常好了,程式員可以把它拿過來做一些改造、優化以及配套周邊服務,來提供雲服務。
具體而言,我們首先直接利用了一些現成的基礎設施,然後,因為開源,我們團隊能夠更好地吸引人才,開拓視野并提高軟體品質等等。另外,我們當然也要遵守開源協定,對開源産品做出的改進會回饋到社群。這包括我們做的針對原來功能上的改進、新的特性,以及一些bugfix等等。因為mongodb公司内部使用的特性和bug追蹤系統是對外開放的,任何人都可以送出一些需求或是代碼更新檔,并可以看到他們最新的一些進展。
還有,我們還會不定期做一些最佳實踐,并分享一些部落格、文檔,共同促進mongodb在中國的普及和發展,讓大家知道并解決實際使用中會遇到的問題,把mongodb用得更好 !