云原生数据库如何打造业务弹性
云計算帶來了業務彈性上的極大優勢,阿里云數據庫高級產品專家時慢從應用架構的變遷,客戶實戰案例,業務分析等方面詳細介紹POLARDB,及如何利用POLARDB設計互聯網創新型應用的數據庫架構。
?
應用架構的變遷——為什么我們需要超級MySQL?
POLARDB跟MySQL是100%兼容的,有超越MySQL很多倍的性能,以及單實例最大100TB的超大存儲空間,可以理解為阿里自研的超級MySQL。那么我們為什么要打造這樣一款超級MySQL呢?我們理解這是應用架構進行互聯網分布式變遷的必然結果。首先我們需要回顧一下應用架構的變遷的歷史,從最早的CS架構到BS架構,從J2EE到Spring/Struts/Hibernate,再到現在的微服務架構,經歷了很多代的架構轉型。從傳統應用的業務架構到互聯網分布式的應用架構,在方方面面都發生了變化。從資源層,到數據層,中間件,應用的發布封裝以及應用的框架,開發運維的角度都在發生了互聯網分布式變遷。
?
- 資源層:傳統應用會使用X86 ,小機以及存儲設備;互聯網分布式應用在使用公有云,私有云,混合云等。
- 數據層:傳統應用會使用Oracle,DB2等集中化的商業數據庫,互聯網應用使用的是MySQL,Redis,HBase這樣的分布式數據庫,他們不需要集中化的存儲設備。
- 中間件:傳統應用會使用WebLogic,WebSphere等,互聯網應用在向微服務架構轉型中通常會使用Swarm,K8S,Mesos。
- 應用發布封裝:傳統應用會使用JAVA開發并發布成war/ear文件封裝,再發布到中間件。微服務架構通常會將應用發布成容器的鏡像。
- 應用框架:傳統應用通常會使用Spring,Struts,hibernate來開發,而目前互聯網分布式應用更多使用的是SpringCloud, Double, EDAS等微服務架構。
- 開發運維:傳統應用會使用可控的發布,保守的運維,新功能上線需要數周,甚至數月時間;互聯網分布式架構更多使用的是DevOps持續集成,敏捷快速迭代。
我們理解,互聯網分布式應用發生這些架構的改變,目標都是使業務更加敏捷,更加具有彈性,能承載來自互聯網的高并發壓力。在創新架構下,業務應用可以通過微服務的方式隨時進行橫向擴展,但壓力并不會被處理掉,負載會直接透傳到數據層面,解決了應用彈性的問題,反而對數據庫產生了更大的挑戰?;ヂ摼W的分布式架構要求數據庫更加敏捷,擁有更好的彈性以及更低的成本。(傳統應用中,一個應用可能只需要一個數據庫作承載,但在互聯網分布式應用下,進行了微服務改造之后,一個業務系統可能就需要數十個甚至上百個數據庫去承載,因此對成本也提出了要求。)
實戰——阿里云數據庫為業務架構變遷做好準備
目前,阿里云的數據庫形態已經覆蓋了互聯網中99%的業務場景。關系型數據庫包括有MySQL,SQL Server,PG,POLARDB。NoSQL產品家族包括Redis,MongoDB,HBase等。同時具備混合分析型的數據倉庫,分布式數據庫DRDS,以及數據庫服務于工具(DTS,DBS,CloudDBA,DMS等)。
演進路線
阿里云上提供了這么多的數據庫產品,在實際應用中該如何進行選擇呢?我們已經為業務的快速發展和更新迭代做好了準備。這是我們建議的應用架構的演進路線:在業務的初期,建議選擇MySQL來快速構建業務應用。當成長起來之后,獨立MySQL無法承載更大業務壓力的時候,可以基于MySQL做讀寫分離,不需要對應用做任何改造。我們進入快速成長期,讀寫分離也無法承載業務需求時,可以無縫遷移到POLARDB,遷移中不需要對業務系統做任何的更改,而且POLARDB的讀寫分離通過共享存儲消除了復制延遲,更適合對數據一致性有更高要求的場景。當業務進一步發展壯大期間,還可以在POLARDB上做垂直拆分。垂直拆分是指將業務模塊垂直拆分到不同數據庫實例,分到多個獨立數據庫中去,比如分成用戶庫,訂單庫,倉儲庫等,從而用更多的獨立數據庫聯合來應對業務負載的壓力。當業務發展到象淘寶這么大的規模和體量,就需要采用DRDS進行分布式改造、跨機房多活,以及根據業務拆分做單元化改造,這正是阿里淘系應用已經走過并行之有效的演進道路。
應用鏈路的優化——自動讀寫分離,短連接優化
我們使用數據庫代理來進行鏈路訪問層的優化。訪問數據庫的標準模式是直接訪問主實例和只讀實例。在這種模式下需要在業務層面做讀寫分離的邏輯拆分。我們提供了代理模式,讓業務層和數據庫層完全解耦。在訪問數據庫時,不需要直接連接數據庫實例,而是連接對業務完全透明的Proxy,它接收到SQL請求后會自動化做讀寫分離,把所有寫操作路由到主實例,并把讀操作負載均衡的路由到只讀實例上,從而實現對業務透明的自動化讀寫分離。代理模式除了實現讀寫分離外,還可以進行故障數據庫的透明切換。不論是標準模式還是代理模式,當主實例發生故障后,都可以自動切換到備份的實例上,保證數據庫的可用性。但在標準模式中,切換后業務需要進行數據庫重連,但通過Proxy,業務應用不需要重連,感受不到高可用切換。同時,代理模式還提供了短連接優化。舉例來說,如果業務是使用PHP開發,它連接數據庫就是采用短鏈接的方式,在訪問數據庫時每次連接都會產生connection,使得數據庫在處理連接池上不堪重負。Proxy可以將短鏈接轉化成長鏈接,并自主維護連接池。同時,代理模式還提供了防暴力破解的功能。比如Proxy可以檢測到某個IP不停的嘗試重輸密碼,并主動進行屏蔽。
實時分析數據倉庫——POLARMPP,POLARDB最佳搭檔
數據的處理可以分成數據庫生態和大數據生態。數據庫生態適合于處理交易訂單等數據一致性要求強的場景,但在處理能力和處理量級上不會特別大。比如訂單量在1TB、2TB級別時,還可以使用,但數量一旦增長到3TB~5TB時,單庫的性能就會出現非常大的瓶頸,此時復雜的分析查詢就會使得數據庫不堪重負。通常的做法是采用大數據生態,通過ETL或數據復制的方式把在線事務處理產生的數據復制到Hadoop生態中進行數據實時分析。在Hadoop 生態中,標準方式是利用MapReduce或Spark來做數據分析,但開發人員并不習慣MR或Spark,也不喜歡使用Scala語言,他們還是習慣于使用SQL。所以在這種模式下,經常還要給開發人員準備Hive、Impla等類SQL組件,讓研發人員仍然可以使用SQL來處理數據。這種方式存在的問題,在于在線事務處理和離線數據倉庫之間有延遲,少則幾秒,多則幾分鐘甚至幾小時。并且數據實際上存了兩份,并不經濟。
針對這種情況,我們提供了POLAR MPP和HybridDB來解決,它可以很好的處理數據的寫入,提供百萬級的TPS,非常適合用于存儲用戶的行為、標簽、Log日志等。這種模式可以對百億級的大表做出毫秒級的響應,對多表關聯做復雜的聚合,做多值的子列,全文檢索。最重要的是,它可以和POLARDB共用一份數據,極大的緩解了數據庫生態和大數據生態中需要存儲兩份數據,并且讀寫存在延遲的問題。
業務場景分析——互聯網創新型應用場景實踐
有了云原生數據庫作為武器,互聯網創新型的業務場景應該如何設計呢?在講到創新型業務前,先看一下傳統的采用MySQL一主N從的架構,如何構建數據倉庫驅動BI報表實現商務智能。這種架構的問題是需要存儲N份數據,做數據的同步復制。MySQL 的主從之間要進行數據復制,從業務庫到分析庫也要進行數據復制。
那么采用云原生POLARDB的系統架構應該如何設計呢?這之間,POLARDB和只讀分析庫構成了云原生的數據集群,由POLAR Store統一進行數據的共享存儲。業務應用會把在線的業務寫到POLARDB中,當POLARDB一主一從的模式不足以應對時,可以快速進行擴展,擴展成一主兩從甚至N從。這種擴展區別于MySQL,他提供了敏捷性和業務彈性。如果數據量比較大,MySQL只讀庫的生成可能就需要數個小時的時間。而不管數據量多大,在POLARDB生態下創建一個只讀庫只需要分鐘級的時間。并且只需要一份數據就可以通過POLARMPP來驅動業務報表。
云原生架構帶來如下的業務收益:
1. 業務兼容,不改應用:只要是利用MySQL開發的業務系統,可以1. 無縫遷移到POLARDB上。
2. 讀寫分離:通過POLARDB,一份數據即可實現多個節點的讀寫分離,并且支持分鐘級的擴展。如果用MySQL 實現讀寫分離,需要通過數據復制生成多個只讀庫,浪費時間,浪費空間。
3. 實時分析,數據共享:在數據倉庫和BI分析業務中,也只需要一份數據,不需要進行數據復制。
4. 只讀實例共享一份數據:由于存儲只需要一份,帶來了更好的性價比,以一主五從的架構為例,POLARDB的價格要比MySQL低44%。它在提供更強大的性能的基礎上,提供了更高的性價比。
5. 毫秒級的延遲:由于主庫和從庫共享一份數據,因此中間只存在毫秒級的延遲。當主節點發生故障時,可以保證切換中的零數據丟失。
6. Session級讀寫分離的數據一致性:在金融等一致性要求高的業務場景下,對讀一致性的要求非常高,很難容忍秒級甚至毫秒級的數據延遲。利用POLARDB可以實現session內的數據一致性讀。
7. 按需付費,秒級備份:在使用MySQL的時候,如果預計要使用500GB的容量,我們需要買500G的存儲空間,但實際上數據可能只占了不到100GB,但還是需要為500GB的預留容量買單。但POLARDB不需要做空間預留,存儲按需付費。同時,POLARDB通過數據快照可以在秒級實現備份和恢復,更利于我們做數據庫安全運維,帶來更多價值。
原文鏈接
本文為云棲社區原創內容,未經允許不得轉載。
總結
以上是生活随笔為你收集整理的云原生数据库如何打造业务弹性的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Sentinel 成为 Spring C
- 下一篇: 重磅发布!阿里云推PostgreSQL