天天看點

基于金融行業的雲資料庫實踐

摘要:進階産品專家.時慢在2018雲栖大會·上海峰會中做了題為《基于金融行業的雲資料庫實踐》的分享,就金融行業應用架構的變遷、阿裡雲資料庫、金融級可靠性原理揭秘、資料安全等方面的内容做了深入的分析。

傳統金融架構缺點

基于金融行業的雲資料庫實踐

很多金融企業都在考慮資料庫是不是要做分布式的改造。那究竟什麼樣的業務場景才需要做資料庫分布式架構呢?首先我們要明白傳統金融行業應用架構和網際網路的分布式應用架構有什麼不同。其實從資源層面、資料層面、中間件層面、應用的開發層面等都有一個鮮明的對比。

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

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

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

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

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、資料複制的演進——雙通道binlog複制
基于金融行業的雲資料庫實踐

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

2、拜占庭将軍問題與分布式一緻性算法
基于金融行業的雲資料庫實踐

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

3、對資料安全的重視
基于金融行業的雲資料庫實踐

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

劃時代資料庫 - POLARDB

基于金融行業的雲資料庫實踐

在2018年5月,阿裡雲釋出了一款劃時代的資料庫POLARDB,POLARDB具有MySQL的特點,與MySQL達到了100%的相容。隻要業務系統是基于MySQL開發的,遷移到POLARDB上也毫無問題,而且性能上相比MySQL提升了6 - 10倍,最大規格支援64核,512G,支援的存儲容量達到100TB。

基于金融行業的雲資料庫實踐

POLARDB解決了TCP/IP協定原始的延遲問題,并且放棄了MySQL基于binlog的邏輯複制,而是基于innodb的redolog實作了實體複制去提升整個資料庫的性能。是以阿裡雲也希望大家逐漸嘗試,當MySQL遇到性能瓶頸,可以往POLARDB遷移,而不是分庫分表等做一些複雜的操作。POLARDB經過 半年多試商用,目前已經正式上線,如果大家對POLARDB有任何疑問,都可以加阿裡雲進階産品專家時慢的釘釘咨詢。

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