可靠的 DBaaS 是如何實現的?
DBaaS介紹
Database as a Service也就是可交付的數據庫服務,讓所有人都可以輕易地創建、使用、擴容和銷毀數據庫實例。在 《State of the art technology, DBaaS》 已經介紹過DBaaS和Trove項目,如果你以為這只是數據庫的科普文那就錯了,借助開源項目和社區的努力,我們完全有能力理解和實現自己的DBaaS。那么第一個問題,可靠的DBaaS是如何實現的?
DBaaS必須提供多租戶隔離
如果公司內部只有一個開發組,那么使用MySQL或Oracle數據庫是沒有問題的,但隨著公司規模的擴大,越來越多的小組會參與到數據庫的使 用,然后每個小組分配一個DBA進行升級、主從切換等重復勞動,而且多個用戶間得手動維護安全隔離等問題。于是有人開始考慮使用DBaaS,因此提供多租 戶隔離是DBaaS的基礎。
如何實現多租戶隔離?我們需要一個Identify service,一套符合公司內部的安全機制,我們知道IaaS中Keystone就是做這個的。無論是Nova、Glance還是將要提到的 Trove,都是借助Keystone的RESTful API來實現多租戶間的隔離。開源項目Trove實現了數據庫服務,開發者可以使用Trove客戶端或者API來啟、停、擴、備自己的數據庫示例,也就是 說用戶A不會看到用戶B的數據庫,當然他即使知道用戶B的信息也無權訪問。
DBaaS必須是高性能的
說到高性能,作為業界標準的MySQL在大量優化后基本能滿足大家的性能要求,通過分庫分表還能提高水平拓展的能力。DBaaS是對數據庫實例的 封裝,理論上會對單獨的數據庫實例造成一定性能損失,并且在提高數據庫易用性的同時,也限制了數據庫配置的靈活性。因此,DBaaS該如何保證高性能呢?
如果是計劃內部實現DBaaS服務,建議參考Trove的做法。Trove默認提供的數據庫鏡像基于MySQL社區的標準配置文件,當然這不一定 是用戶場景下最優的配置,而它提出了配置組的概念,創建數據庫實例后,用戶還可以修改配置組,然后Attach到相應的數據庫中,為開發者提供了靈活的調 優空間。
除此之外,Trove為所有數據庫包括MySQL、Redis、Cassandra等提供了統一的配置組接口,也就是說可以用同一個API修改不 同Backend的配置。這前提是Trove已經支持這些后端數據庫的配置修改,目前我們也在努力支持Redis as a Service,具體實現將在后面的源碼分析文章中與大家分享,感受其架構設計的優美。
DBaaS必須是免運維的
為什么很多客戶希望有RDS或者DBaaS?因為這樣可以極大減少他們的運維工作,將重心投入到具體業務中。目前AWS的RDS和阿里的云數據庫都能做到用戶免運維、自動配置、自動主從切換了,那么開源的DBaaS系統能否做到呢?
如果你考慮使用Trove項目,你可以感受到社區在這方面的努力。No ops,主要從兩個方面來實現,第一是監控,基于Ceilometer項目我們可以輕易把數據導出到云平臺,第二是報警,這依賴于基礎平臺提供的功能,并 且基于監控來實現。有了監控和報警,我們可以輕松掌握當前數據庫的狀態,而且云平臺還提供了定制備份、自動創建主從集群等功能,無論是大中小企業都非常需 要這樣可靠的DBaaS。
講了這么多,可靠的DBaaS究竟要如何實現呢?目前從開源社區反饋Trove是一個非常有前景的項目,并且得到了OpenStack的大力支 持,基于Trove的數據庫服務很快會成為業界的主流。不過對于OpenStack項目大家都有種難以入門的感覺,因此我們UnitedStack將推出 關于Trove的一系列教程,幫助用戶搭建并且用好DBaaS和數據庫。
我是tobe,UnitedStack存儲工程師,IaaS社區貢獻者,開源教程分享者。