天天看點

傳統企業資料庫上雲案例分享

摘要:在網際網路的浪潮沖擊下,很多傳統企業都選擇上雲。阿裡雲在做基于網際網路的分布式應用,是以在傳統企業上雲的過程中,阿裡雲也同樣面臨一些資料庫相關的各種沖擊和需求。在武漢雲栖大會上,阿裡雲進階産品專家王偉做了名為“傳統企業資料庫上雲案例分享”的精彩演講。

傳統企業應用缺點
傳統企業資料庫上雲案例分享

傳統企業面臨很多架構變遷,正是由于這些變遷,阿裡雲在應用架構上做了分布式改造,阿一直在思考如何幫助傳統企業上雲。很多金融、保險、制造業為了适應網際網路的高并發、大流量沖擊,都選擇上雲并且都在做适用性的改造。這個時候大家都在想資料庫怎麼辦,很多企業都在考慮資料庫是不是也要做分布式的改造。那究竟什麼樣的業務場景才需要做資料庫分布式架構呢?

首先我們要明白傳統企業應用架構和網際網路的分布式應用架構到底有什麼不同。其實從資源層面、資料層面、中間件層面、應用的開發層面等,每一個層面都面臨着一些改變。

1.資源層面。傳統的應用架構在使用微型機、儲存設備等等一些實體硬體。而目前在網際網路分布式應用下,阿裡雲在使用公有雲、私有雲、混合雲等等一些混合式的架構。

2.資料層面。傳統的應用在使用集中化的資料庫,比如Oracle、SQLserver等資料庫,為什麼叫集中化的資料庫?因為傳統應用為了實作多個節點之間共享和最大限度的保證資料的一緻性,習慣把資料檔案存放在一台集中化的儲存設備裡面。而在網際網路分布式應用下,阿裡雲一直倡導去集中化的資料庫的理念,是以目前阿裡雲在使用MySQL、HBase、Redis等等一些分布式的架構。

3.中間件層面。傳統應用在使用WebLogic/WAS/MQ等等,目前為了做一些微服務的改造,阿裡雲在使用Swarm/K8S/Mesos等等一些架構來基于微服務做一些排程。

4.從應用架構、應用架構來說,傳統的應用在使用Spring/Struts/SOA,現在阿裡雲在使用一些微服務架構,例如像Docker。

5.傳統企業的開發運維采用可控釋出,保守運維,經常一個新功能的釋出動辄幾周甚至幾個月的時間才能上線。而現在阿裡雲在使用DevOps,應用可以随時上線。在做這些改造之前,應用響應慢并且經常在應用層無法橫向擴充,現在做了微服務改造,每一個微服務都可以适應靈活的彈性和壓力去做一些擴充。

是以在目前分布式的改造之下,阿裡雲認為對資料庫有更高的要求,總結就是需要靈活、分布式、低成本等特點。每一個微服務都對應一個小的資料庫,是以說需要大量的資料去支援一個業務,需要靈活性的排程,是以對靈活性是有要求的。同時因為量級比較大,也希望實作分布式機構。并且由于使用的資料庫多了,使用商業資料庫成本太大,是以需要降低成本。

豐富的雲上資料庫

阿裡雲認為傳統的行業做網際網路的創新,需要的資料庫主要有以下特點:

1.自主可控:基于開放架構,基于開源的優化。

2.高可用:跨機房容災,滿足金融級業務系統全天候對外提供穩定可靠的客戶服務。

3.高性能:網際網路+金融的創新業務所需的流量彈性。

4.支援雲:私有雲和公有雲互通一緻的體感,降低使用和運維難度。

5.易運維:大體量自動化、運維體系合規化要求(基線、環境适配、管理體系等)。

6.資料安全: 審計&資料強一緻性&多中心容災部署。

7.成本優化:IT總體擁有成本必須下降。

傳統企業資料庫上雲案例分享

基于以上特點,阿裡雲提供了豐富的雲上資料庫。例如關系型資料庫有MySQL、SQL Server PostgreSQL PPAS(⾼高度相容Oracle) POLARDB。NoSQL資料庫有Redis MongoDB HBase Memcache。混合分析資料庫有HybridDB for MySQL HybridDB for PostgreSQL。搜尋與時序資料庫有OpenSearch Elasticsearch HiTSDB。另外還提供像DTS、DMS、HDM等資料庫服務與工具。

傳統企業資料庫上雲案例分享

對于這麼多資料庫類型和不同資料庫引擎而言,阿裡雲還有很多不同的版本。以MySQL為例,有基礎版、高可用版、金融版。基礎版就是在ECS的基礎上,加雲盤上部署的MySQL資料庫,它提供非常高的成本效益,價格基本上跟你買一個ECS加一個雲盤是一樣的,但是阿裡雲在此之上已經內建好了資料庫産品。高可用版實際上就是做了主從資料的複制,可以保證資料庫的資料可用性。當主節點當機以後,阿裡雲可以快速的把業務切換到從節點去,進而保證資料庫的可用性,同時還有很多企業級的功能,包括讀寫分離,讀寫分離是做資料庫橫向擴充最便捷的一種方式,應用不用做任何更改,把寫入在主節點執行,把查詢在隻讀節點執行,無形之中增強了主庫的能力。金融版是跨三機房、三節點的三副本的版本,預設實作了同城三機房的容災。金融版直接部署在三個機房,它可以保證資料在三個機房做複制,并且當一個機房不管是因為電源的故障還是因為光纖的故障而失效,整個資料庫也不會受到影響,資料庫主節點會自動遷移到另外兩個機房之一,繼續提供服務,同時金融版內建了SQL審計、高頻監控等。

阿裡雲資料庫穩點、高效的秘訣

阿裡雲能做到資料的高可用、一緻性主要從以下方面來考慮:

1.資料複制技術的演進
傳統企業資料庫上雲案例分享

做資料庫的高可用是一定要做資料複制的。MySQL原生提供兩種方式的複制,一種是異步複制,比如是一主一從,中間做異步複制。但是從節點勢必會引起延遲,當主節點發生故障的時候,這個時候不知道從節點的資料是不是最新的,是以如果切換從節點,很有可能會造成資料的丢失。為了解決這個問題,MySQL官方提供了另一種方式,半同步複制。半同步複制也是一主一從,主節點在寫入資料的同時,會産生日志,然後發送日志給從節點。是以當主節點當機,至少可以保證從節點是有資料的。但是同時也會産生另一個問題,當主節點在等從節點響應的時候,如果發生網絡的故障,最終還是降級成異步。是以阿裡雲在AliSQL上做了增強,叫做雙通道複制,也就是說同時有一條半同步複制通道和異步複制通道,通過這兩個通道可以确定性的得知目前主資料庫和從資料庫的資料是否一緻。

2.拜占庭将軍問題與分布式一緻性算法
傳統企業資料庫上雲案例分享

拜占庭将軍問題在分布式領域是一個比較傳統的問題,為了解決拜占庭将軍問題,十幾年前有一個Paxos算法,但是Paxos算法過于複雜,在很長一段時間都沒有計算機語言可以實作,後來Paxos算法做了簡化,即Raft算法。通過Raft算法可以解決分布式一緻性問題,是以阿裡雲把Raft算法放到了MySQL核心裡面。底層維護了三個資料庫節點,一主兩備的複制拓撲結構意味着每個節點都是全量的資料,資料庫事務日志(Log)從主庫同步複制到所有的備庫,當叢集中超過半數的節點都寫入成功後,事務才能完成送出。雖然是同步複制,但由于是三個點,是以單個節點的故障不會影響到執行個體整體的可用性。這種設計的好處顯而易見,即在不損失可用性的情況下,通過較高的資料備援度來換取更好的可靠性,同時支援跨機房的部署方式,具備機房容災能力。

3.對于資料安全的重視
傳統企業資料庫上雲案例分享

安全是根植于阿裡雲核心的原生功能。從安全的角度,阿裡雲做了事前、事中、事後三個方面的安全審計,事前阿裡雲可以做VPC專有網絡、IP白名單、防暴力破解、靈活賬号權限管理等,事中做了 SSL加密、TDE加密、攔截SQL注入攻擊,事後可以做 SQL審計、克隆執行個體等。

結語

阿裡雲認為傳統企業要做網際網路分布式的改造,并不是一步就可以完成,因為企業的業務量可能還沒有這麼大,是以如果企業現在的業務系統跑在單個MySQL資料庫上面,那麼接下來可以做一些讀寫分離。如果讀寫分離承載不了企業的業務系統,接下來可以做一些垂直的拆分,可以通過微服務去架構,不要用一個資料庫承載業務架構,而是用多個資料庫承載業務。如果垂直拆分還不夠,可以使用阿裡雲的POLARDB資料庫,如果POLARDB資料庫還達不到企業的需求,你就應該考慮網際網路分布式的改造了。

本文由雲栖志願小組黃小凡整理