雲資料庫 RDS(Relational Database Service)是一種穩定可靠、可彈性伸縮的線上資料庫服務。基于飛天分布式系統和全SSD盤高性能存儲,支援MySQL、SQL Server、PostgreSQL和PPAS(高度相容Oracle)引擎,預設部署主備架構且提供了容災、備份、恢複、監控、遷移等方面的全套解決方案。
當然,并不是指所有使用者,這還是有條件的,包括但不限于以下兩點:
你的網站或項目發展到一定階段,需要将資料庫獨立出來,不再和網站程式或應用程式放在一台ECS上; 即便你有一個對資料庫很了解的開發人員或運維人員,也不應該自建資料庫,因為讓開發專注做程式開發,讓運維專注做運維自動化,這才是能讓生産最大化的決策。
還有個别情況是:你也許有一個小型的資料庫技術團隊,比如2、3個人,也不應該自建資料庫,因為這通常需要維護整個基礎架構,比如說網絡負載均衡(管理交換機)、資料可靠性(磁盤raid)、中間件(讀寫分離)、故障自動轉移(主備切換)、主從架構(資料同步)等等。這些技能不見得DBA都會,比如網絡裝置,是不是又要增加一個網絡工程師的崗位呢,對于成本的增加,你有沒有考慮進去?
然而,對于阿裡雲資料庫RDS來說,以上這些需求本身已經具備了,是以資料庫DBA更應該着重于跟業務相關的優化上面。因為這才是iaas(基礎架構即服務)的精髓。
但是,我們還是要分析清楚,為什麼要使用RDS,它好在哪些具體的地方?
阿裡雲資料庫RDS包括了4種:MySQL/SQL Server/Oracle/PostgreSQL,我們先說其中之一的RDS for MySQL吧。
RDS for MySQL目前包括了三個版本:5.7、5.6、5.5:
首先推薦的是5.6,因為5.6與5.5相比,性能優化了很多,阿裡的資料庫團隊,向mysql官方提供了很多的patch,是國内最大的技術貢獻者。而且5.6推出一段時間了,非常成熟穩定,5.6和5.5的相容性也非常好,筆者曾經将多個不同使用場景的5.5的資料庫遷移到5.6,都沒發生任何相容性問題。如果不是有啥特殊原因一定要5.5,就建議選擇5.6啦。另外,5.6在主從同步方面也是采用半同步方式,而不是5.5的異步,這就更加保證的資料可靠性。

5.6還有一個非常重要的功能,就是獨寫分離,目前隻有5.6支援,筆者所在的項目已經使用這個功能幾個月了,非常的好用,非常的讓人省心,我想這個可能是網際網路電商項目夢寐以求的功能吧。要知道,你自建讀寫分離,一般是使用開源的中間件作為代理層,這就要求你非常熟悉這個中間件的用法,包括設定權重、門檻值、健康檢查等等,這就大大增加了學習成本,不然的話你不擔心出了故障無法解決嗎?另外,使用開源中間件,在資料到達資料庫之前需要經曆多個元件的語句解析和轉發,對響應延遲有較大的影響。而 RDS 讀寫分離在已有的高安全鍊路中直接内置,沒有任何額外的元件來消耗時間,能夠有效降低延遲,提升處理速度。
不管5.6還是5.5,都提供高可用版本,筆者強烈推薦網際網路電商、遊戲等項目使用它,這個版本是采用一主一備的高可用架構,同時提供本地ssd存儲,有故障會自動切換主備執行個體。就光這一點,自建資料庫就達不到,可以說絕大多數公司的主資料庫都是單個mysql執行個體,遇到機器故障就隻能停機,做不到自動切換。這并不是說這些公司不想使用高可用架構,而是真的有門檻,你以為照着網上的教程搭建好兩個master,用心跳軟體做好監控就行了嗎?錯了,後期的維護往往要比最初的環境搭建要難多了,這不僅僅是mysql本身的高可用,還必須結合自身業務情況才行。筆者以前所在的大型電商公司,就擁有資料庫團隊,曾經想做這樣的高可用架構,但一直不敢正式上線運作,原因就是現實中會遇到各種各樣的問題,始終沒有完美的辦法解決。 5.6同時還提供金融版:采用一主兩備的架構,通過日志“多副本同步複制”,確定資料的強一緻性,是以特别适合金融、證券、保險行業的核心資料庫。而且,高可用版和金融版之間,是可以切換的哦,贊不贊? 有人說RDS的費用比自建MySQL所用的ECS伺服器,相同配置貴了不少。沒錯,确實是貴一些,要知道上面剛說了,是一主一備兩個執行個體,你自建如果用兩台ECS實作,費用更貴,而且還不考慮是否好用的因素,明白了嗎? 提供全面的監控診斷:線程記憶體、SQL資源消耗等監控,幫助使用者快速進行問題診斷。這個也是重點呀,自建的資料庫可以說基本沒有這些監控,隻能記錄慢查詢,再采用第三方工具分析日志,再進一步,使用一些開源工具平台,比如zabbix,自帶了一些mysql基礎監控,如果要粒度更進一步,可能需要安裝其他插件,比如有一個比較有名的zabbix for mysql插件叫做fpmmm的,筆者也一直在使用。然而即便如此,筆者仍然認為比不上RDS提供的監控項,要知道,現實中分析一個故障,是需要多種手段結合起來一起輔助分析的,并不是提供的監控圖越多,就一定能找出來。
備份:包括資料備份和日志備份,RDS都提供了,而且對于備份而言,更重要的是恢複和檢查資料完整性。筆者想問問各位,有多少人是沒做備份的,又有多少人是做了備份,但是沒有定時去恢複的,也就是說,你做的備份正确嗎,你驗證過嗎,你會定期去驗證嗎?恐怕由于人力物力的問題,這些都不會去做的。RDS提供了很重要的恢複方法,有三種:叫隻讀執行個體、克隆執行個體、災備執行個體。從字面上應該可以了解它們的作用了,詳細使用方法還是去看RDS文檔吧。 CloudDBA是監控和管理RDS執行個體性能及運作狀況的服務,在RDS控制台的執行個體管理頁面,目前隻适用于MySQL類型的執行個體。針對SQL語句的性能、CPU使用率、IOPS使用率、記憶體使用率、磁盤空間使用率、連接配接數、鎖資訊、熱點表等,CloudDBA提供了智能的診斷及優化功能,能最大限度發現資料庫存在的或潛在的健康問題。CloudDBA的診斷基于單個執行個體,該診斷會提供問題詳情及相應的解決方案,可為您管理執行個體運作狀況帶來極大的便利。目前隻支援5.6和5.5。 現在說5.7,是最近推出不久的,它的關鍵在于是單機版。與标準的主備雙機高可用版相比,單機基礎版隻提供一個資料庫節點,通過底層資料存儲層來保證資料多副本可靠性。資料庫節點的減少,大幅降低了CPU和記憶體資源的開銷,進而降低整體投入成本。因為對于個人、中小企業來說,能夠接受短暫的故障停機(當然如果維護得好 ,這基本也是不存在的)。它的價格,與自建資料庫相當了,但是仍然提供了前面幾點的各種功能,是以強烈推薦中小企業使用的。 安全性,也是很多人關注的。雲資料庫RDS提供了多樣化的安全加強功能來保障使用者資料的安全,其中包括但不限于:
網絡:IP 白名單、VPC 網絡、SSL(安全套接層協定)、SQL 防火牆
存儲:TDE(透明資料加密)、自動備份
容災:同城容災(多可用區執行個體)、異地容災(兩地多中心)
資料庫管理:筆者用過指令行、navicat、phpMyAdmin等工具進行日常的資料庫維護,我猜想大部分人也是如此。RDS使用“資料管理DMS”:提供關系型資料庫和NoSQL的統一管理。它源自阿裡資料庫服務平台iDB,為數萬研發人員提供資料庫研發支撐,已線上上運作8年。您可以使用資料管理DMS輕松建構企業獨有的資料庫DevOps,促進資料庫研發自助化,提升研發效率,同時保證員工資料庫通路安全及資料庫高性能。預設是免費版的,已經可以滿足大多數人的使用需求了,如果還覺得不夠,可以購買進階版,提供更強大的功能,具體可以查閱産品文檔。筆者想說的是:你隻需要有一個浏覽器,就可以管理自己的資料庫。 有人說,說了這麼多,到底性能如何呀,我建議你還是自己體驗吧,附上一張圖:
現在,你同意我的觀點嗎:RDS是不是比自建資料庫要好呢?
有的朋友讓推薦一下購買配置,這個其實還是跟自身的項目有關。筆者曾經短時間跟過一個電商項目,每天都有幾場到十幾場秒殺,規模上來之後,ECS伺服器的配置是8核16G的,當時把資料庫從本機拆出來,購買了RDS,選的配置5.6高可用版,硬體是4核16G,存儲是100G,使用起來網站還是很流暢的,這也得益于前端防刷做得比較好吧。當然,除了ECS和RDS,也還使用了諸如OSS、CDN、WAF等産品,結合nginx過濾和程式防刷機制等等。