開宗明義,你不應該在阿里云上使用自建的MySQL or SQL Server數據庫,對了,還有Oracle or PostgreSQL數據庫。
云數據庫 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(透明數據加密)、自動備份
* 容災:同城容災(多可用區實例)、異地容災(兩地多中心)
11. 數據庫管理:筆者用過命令行、navicat、phpMyAdmin等工具進行日常的數據庫維護,我猜想大部分人也是如此。RDS使用“數據管理DMS”:提供關系型數據庫和NoSQL的統一管理。它源自阿里數據庫服務平臺iDB,為數萬研發人員提供數據庫研發支撐,已在線上運行8年。您可以使用數據管理DMS輕松構建企業獨有的數據庫DevOps,促進數據庫研發自助化,提升研發效率,同時保證員工數據庫訪問安全及數據庫高性能。默認是免費版的,已經可以滿足大多數人的使用需求了,如果還覺得不夠,可以購買高級版,提供更強大的功能,具體可以查閱產品文檔。筆者想說的是:你只需要有一個瀏覽器,就可以管理自己的數據庫。
12. 有人說,說了這么多,到底性能如何呀,我建議你還是自己體驗吧,附上一張圖:
13. 如何從自建庫遷移到RDS,請看文檔吧:https://help.aliyun.com/document_detail/26210.html
現在,你同意我的觀點嗎:RDS是不是比自建數據庫要好呢?
購買地址:阿里云數據庫RDS for MySQL,記得領前面提到的幸運券哦,購買時長就和你的ECS服務器一致就行了,年付8.5折,兩年付7折,三年付5折。
更新:有的朋友讓推薦一下購買配置,這個其實還是跟自身的項目有關。筆者曾經短時間跟過一個電商項目,每天都有幾場到十幾場秒殺,規模上來之后,ECS服務器的配置是8核16G的,當時把數據庫從本機拆出來,購買了RDS,選的配置5.6高可用版,硬件是4核16G,存儲是100G,使用起來網站還是很流暢的,這也得益于前端防刷做得比較好吧。當然,除了ECS和RDS,也還使用了諸如OSS、CDN、WAF等產品,結合nginx過濾和程序防刷機制等等。