1. 程式人生 > >從實踐出發,騰訊雲深入解讀雲端資料庫技術

從實踐出發,騰訊雲深入解讀雲端資料庫技術

毋庸置疑,資料已經成為資訊化社會最關鍵的基礎元素之一。離開資料的支援,大資料、人工智慧等技術就都沒有了用武之地,資訊化、智慧化也就成了空談。而資料庫則是儲存和承載資料的重要場所,因此,其重要性不言而喻。隨著雲端計算的飛速發展,雲端資料庫技術開始被普遍應用。雲端資料庫是在雲端計算的大背景下發展起來的一種新興的共享基礎架構的方法,它極大地增強了資料庫的儲存能力,消除了人員、硬體、軟體的重複配置,讓軟、硬體升級變得更加容易,而且具有高可擴充套件性、高可用性、採用多租形式和支援資源有效分發等特點。可以說,掌握雲端資料庫技術將是現在以致未來,資料庫技術人員所必備的技能。


10月27日,為了幫助資料庫技術人員能夠更好的掌握雲端資料庫技術,騰訊雲攜手中國專業的IT技術社群CSDN在深圳市騰訊大廈2樓多功能廳舉辦“賦能業務創新-雲資料庫最佳應用實踐

”沙龍,以雲端資料庫具體的應用實踐,為與會的眾多資料庫技術人員分享了包括如何設計出高可用的MySQL系統,解讀最流行的Redis快取類資料庫在雲端的技術運用以及Elassticsearch調優在內的應用實踐,並深度結合小程式和珍愛網在利用騰訊云云資料庫過程中的實踐經驗,介紹如何在降低開發與運維成本的情況下,打造爆款應用程式。


640?wx_fmt=jpeg

     

騰訊高階工程師王甲坤首先為擠滿整個會場的觀眾介紹瞭如何設計高可用的MySQL系統,王甲坤認為,高可用的關鍵指標是RPO和RTO,而設計高可用的MySQL系統,通常有三種模式:

模式一,Shared Everthting方式:

基於單機儲存的模式,一般是針對單個主機,完全透明共享CPU/MEMORY/IO,並行處理能力是較差的。

模式二,Shared Disk方式:

基於共享儲存的模式,各個處理單元使用自己的私有CPU和Memory,共享磁碟系統。典型的代表Oracle Rac,它是資料共享,可通過增加節點來提高並行處理的能力,擴充套件能力較好。

模式三,Shared Nothing方式:

基於資料複製的模式,各個處理單元都有自己私有的CPU/記憶體/硬碟等,不存在共享資源,類似於MPP(大規模並行處理)模式,各處理單元之間通過協議通訊,並行處理和擴充套件能力更好。


640?wx_fmt=jpeg

     

對於基礎設施的高可用,通常採用同城雙活、兩地三中心等方式,而對於MySQL系統的高可用,首先備份是最基礎最保底的保障,建議必須保留。

MySQL備份分為邏輯備份、物理備份和快照三類。騰訊雲主要採用基於xtrabackup開發的實現可並行備份加流式壓縮的物理備份,成功率與速度都比較高。另外,騰訊雲MySQL基礎版,架構於CVM和CBS之上,支援快照備份功能。其次,基於資料複製模式是MySQL高可用的常見熱備方案,通過MySQL複製協議和故障自助發現與轉移來實現資料在節點間的一致性。 騰訊雲MySQL先支援最多掛載5個只讀例項,來滿足讀寫分離的場景。


王甲坤還介紹了複製相關的Binlog知識,主從複製的大體流程,以及三種複製方式:非同步、半同步、強同步。而對於在複製中SQL執行緒的瓶頸,通過各個版本MySQL的並行複製功能也能得到解決。但DRBD(Distributed Replicated Block Device),這款基於塊裝置級在遠端伺服器直接同步和映象資料的工具則是MySQL官方文件手冊中作為推薦的高可用的方案之一。


640?wx_fmt=jpeg

     

王甲坤提到,由於MySQL並沒有提供故障轉移功能,一般需要藉助第三方工具進行故障恢復。業界普遍採用的方案是Keepalived、MMM和MHA,但都有一定的缺點,而騰訊雲用的是自己實踐的一套故障檢測,不存在單點的問題,能做到故障檢測恢復到30秒鐘以內,大大提高了MySQL的高可用。王甲坤最後還介紹了保證PXC、 MGC、MGR等另外三種MySQL高可用架構。


騰訊云云資料庫Redis產品負責人鄒鵬針對大規模Redis叢集架構設計進行了講解,他表示,Redis的使命就是更快更簡單,遵循這個使命的Redis資料庫的排名已經超過了ES了,位列第七。Redis的特點,第一是快,可以達到單核10W QPS,第二是in-memory cache,即Redis不用建表。鄒鵬認為,Redis主要場景還是在於快取,如果拋開遊戲的場景,80%的場景都是快取,所以它還是快取資料庫。


鄒鵬接著介紹了騰訊雲基於社群4.0版本+自研打造的Redis4.0 Cluster分散式資料庫。Redis官方的Cluster具有兩個特徵:Sharding以及自治管理。而騰訊認為Redis Cluster一定要做一個Proxy方案,第一源生叢集版必須有一個智慧客戶端支援,這是因為智慧客戶端支援有限,無法直接遷移到叢集版,而客戶端需要感知後端架構,並進行網路流量隔離,承載更豐富的功能,減少對Redis程式碼的入侵,而如果沒有代理這些都不容易實現。


騰訊雲採用的Smart Proxy 方案,後端是官方源生的Cluster,完全是自治的版本,並進行了一些優化。前端的智慧客戶端會完成代理轉發,做大量定製化監控以及資料、節點的選擇判斷的情況,再往前面就是LB,把所有細節都遮蔽到了後端。


640?wx_fmt=jpeg

     

在資料遷移方面,針對大Key和熱Key的遷移難題,騰訊雲通過採用訪問監控、Key分析、指標監控、慢查詢、告警配置、流量隔離等手段充分發揮Proxy的作用,從而解決了資料遷移中大Key和熱Key的問題,最終的架構如圖所示。

       

640?wx_fmt=jpeg

     

鄒鵬還介紹了騰訊雲CKV,它是一種原生分散式的叢集解決方案,突破單執行緒,時延只有0.2毫秒,但可以使記憶體使用率提升15~25%。


640?wx_fmt=jpeg


騰訊雲產品經理李曉慧以MongoDB在小遊戲中的實踐應用,分享了MongoDB在小遊戲開發方面為開發者帶來的便利。李曉慧表示,遊戲開發中一個最主要的特點是需求變化非常快,因為在遊戲和開發不同的階段會加入一些新的元素黏住使用者,像一種道具的場景,就需要在遊戲上線的不同階段載入不同的道具,用傳統的關係型資料庫則需要對錶結構進行修改的DDL操作,而MongoDB不需要改變表結構,這對開發者是非常友好的。


李曉慧強調,現在大多數遊戲都會新增社交元素增強使用者的活躍度,黏住使用者。騰訊雲提供了地理位置索引以及配套的API,不需要在業務層操作,就可獲得資料庫層的支援。對於海量資料,騰訊雲提供了分片的功能,例如遊戲開始上線時,其實並不知道業務上線需要的資料量。而當遊戲上線後期,由於資料量的增多,如果用關係型資料庫的話,就避免不了進行分部分表擴容,而MongoDB提供了分片叢集,可以在不影響業務的同時進行水平的擴容,這對運維來說是非常好的解決方案。至於運營分析,MongoDB源生即支援,開發者可以直接套用。更重要的是,MongoDB支援JavaScript全棧MERN、MEAN。因此,MongoDB特別適合遊戲開發場景。


李曉慧還介紹瞭如何優化MongoDB的連線,她表示,首先,騰訊雲對MongoDB的連線進行了優化。MongoDB的連線其實分為兩部分,第一部分是Mongos對前端的連線,第二部分是Mongos對後端的連線,有兩個關鍵引數,最小連線數引數minConnections 和連線IdleTime引數refreshRequirement的設定對於MongoDB的連線效率非常重要,針對這兩個引數,騰訊云為開發者提供了可計算的公式,並建議對於refreshRequirement的引數設定至少是包含兩個連線峰值的頭。


其次,騰訊雲MongoDB通過讀寫分離策略減少了慢查詢, 從而將MongoDB的讀延時從官方版的85毫秒左右縮短到10毫秒左右,效率提升了將近9倍。

 

640?wx_fmt=jpeg

   

第三,通過分片群集,提供靈活可擴充套件的特性,從而大大減輕了運維人員的負擔。

   

640?wx_fmt=jpeg

 

第四,對於令遊戲運維非常頭疼的庫表回檔方面, 騰訊雲MongoDB是唯一提供庫表回檔的,而且可以支援細化到一定級別,對運維人員是非常方便的功能。


第五,在監控方面,騰訊雲MongoDB也是唯一支援表級監控,表級監控內容比較分散,有CRUD操作監控,請求時延監控,包括10毫秒到50毫秒,50毫秒到100毫秒,以及超過100毫秒三種力度。請求個數也有監控,還有比較重要的容量和記錄監控,騰訊雲MongoDB都支援。


針對目前火熱的小程式開發,李曉慧介紹了騰訊雲的TCB小遊戲解決方案,該方案可以為開發者提供完整的雲端流程,弱化後端和運維概念,無需開發者搭建後端服務。開發者可以直接使用小程式的 JS-API 進行核心業務開發,即可實現小遊戲快速上線和迭代,還可以根據自身需求建立多個環境,以用於開發、測試及生產等多種場景,並且每個環境的資源是獨立且相互隔離的。這種方案特別適合個人開發者、初創團隊,對於成熟團隊的專案的話,可以立即使用。


騰訊高階工程師陳曦則分享了Elasticsearch的調優經驗,陳曦首先介紹了Elasticsearch的基本原理。Elasticsearch是一個搜尋引擎,它具有高效能、高可靠、易管理、易使用的特點,有很強大的綜合分析能力,可以通過指令碼進行復雜的計算。Elastic Stack是集資料採集、清洗、儲存、視覺化為一體的完整解決方案。ES有比較廣泛的應用領域,主要的應用場景是日誌分析、資料分析統計,還有全文檢索,功能比較強大。Elasticsearch的資料模型如下圖所示。


640?wx_fmt=jpeg


陳曦表示,Elasticsearch的調優主要基於三個層面:降低儲存成本、提升叢集穩定性和提高叢集效能。


在降低成本方面,也包括兩方面,一方面是對欄位儲存的優化,另一方面是對字串欄位的優化,在對倒排索引、行存、列存三個欄位的儲存中,對於CPU監控這種場景,可以通過關閉索引欄位來進行儲存優化,對於統計分析場景,只需列存即可。而對於日誌類場景,則僅需行存即可。通過這樣的優化,行存的成本能夠降低40%左右。

     

640?wx_fmt=jpeg


對於字串欄位的優化,也是分兩部分,text和keyword,text可以做分詞,然後對每個詞都可以高排索引,拿一個詞可以搜到一整段話。如果僅僅是想把文字存進去並且取出來的話,後面都是可以去掉的。至於keywork,可以模糊匹配,但不能拿一個詞搜尋整段話,由於它不需要做分詞,所以速度會比較快。


要提升叢集穩定性方面,最有效的方法就是控制index的分片數,陳曦介紹,一個index是由多個shard組成的,一個index有三個shard,分佈在不同節點上,一個請求寫幾百個幾千個文件在裡面,當請求到達ES某個節點的時候,會計算對於幾千個文件,分別屬於哪個shard,然後這個時候會放到BulkQueue儲存中。BulkQueue的預設值是100,如果shard數量過大BulkQueue就很容易被填滿,shard數值過小的話,就無法充分利用節點資源,陳曦給出的建議是100GB以下的index設定3-5個shard,但這並不是可以適用每個場景,具體還要看業務的實際情況。


在提升叢集效能方面,分為四方面,一方面是控制index的副本數量,另一個是優化永續性引數,第三方面是寫入方式優化,第四方面是查詢優化。

而騰訊雲是通過雲管平臺、降低儲存成本、提升叢集穩定性和提高叢集效能等四方面對ES進行優化。


首先,騰訊雲的雲管平臺是一套自動化運維繫統、它本身可以預裝一些外掛,包括中文分詞外掛、SQL外掛、資料匯出外掛等,系統會自動按照一定時間間隔建立index,而不需關心有多少index。此外,還通過Kibana、跨機房容災、Dedicated Master等方式,提升叢集的穩定性。

   

640?wx_fmt=jpeg

 

在降低儲存成本方面,通過倒排索引記憶體優化、冷熱分離對儲存成本進行優化。實際上,在查詢過程中,有一個詞典和一個倒排表,ES為了加速查詢過程,把詞典華分成一個個的block,字首相同的詞可以放到block裡面,字首相同的字首數會指向block,而實際上,在這個小範圍內一個匹配詞典就可以了,這樣就可以快速加大效能。

     

640?wx_fmt=jpeg


冷熱分離是指,ES本身可以對於每個NODE加一些屬性在裡面,通過ES的一個命令可以強制把一個表所有資料搬遷到指定的一個屬性的節點上面,所以在集體上架的時候可以同時上兩個,使用者可以在WEB介面配置哪類的index多久之後降低使用成本,騰訊雲後臺就有這樣一個調速器,會發送命令,從而降低使用者的使用成本。

     

640?wx_fmt=jpeg


在提升叢集穩定方面,通過叢集均衡策略優化、自研限流功能,使得叢集穩定性得到較大的提升。 叢集均衡策略是指在通常情況下隨著業務的增長,ES預設會把大的Shard放在小的節點上面,新增的shard讀寫壓力就會比較大,這種情況下就會造成單點過熱的問題,騰訊雲對此進行了優化,去掉重複上報的shardfailed資訊,從而大大降低了Master的壓力。

     

640?wx_fmt=jpeg


自研限流功能主要針對ES本身對於JVM判斷不準,在寫入量大的情況下會導致OOM的情況而推出的,為此,騰訊雲做了一個曲線限流的功能。通過這個優化,有效避免了OOM情況的出現。

     

640?wx_fmt=jpeg


在查詢優化方面,騰訊雲ES系統可以根據查詢到的資料量進行預估,超過一定量就不做快取,從而避免了載入過大快取,拖慢查詢速度的問題。


640?wx_fmt=jpeg

     


來自珍愛網的DBA周耀榮最後一個登場,他分享了珍愛網雲資料庫的使用經驗,周耀榮首先談了自己對於雲資料庫與DBA之間關係的看法,並以幾個例項說明了雲資料庫的作用,他認為, 雲上提供的服務就是重複性高的工作的標準化和自動化。


對於DBA來說,周耀榮認為應該考慮六方面的問題,第一是從業務整體運維的角度,就是說當購買雲服務的時候差異性體現在哪裡,需要考慮清楚。第二是異常的處理,就是DBA需要具有異常處理的能力,這樣才能在雲資料庫時代仍然有競爭力。第三是效能容量管理,DBA要從整個業務的視角,對效能容量進行管理。第四是故障透視能力,故障的透視能力,是作為DBA管理員很重要的能力。第五,架構規劃,比如高可用架構,要怎麼拆分,容災如何考慮,這都是需要DBA考慮的問題。第六,SQL上線稽核。當公司業務發生變更的時候,怎麼把控上線的風險會不會對資料造成誤刪除,這些都是需要DBA考慮的。


周耀榮總結到,規劃類的、優化類、主動管理類的工作,在未來比較長的一段時間內還是需要DBA解決的,因此,DBA大可不必擔心失業問題。

周耀榮最後給到場的觀眾分享了珍愛網目前在資料庫方面正在做和計劃要做的事情,談到了涉及的相關技術,併為到場的觀眾展示了珍愛網在資料庫建設方面的成果。

       

640?wx_fmt=jpeg

     

最後,沙龍活動在一片熱烈的掌聲中落下了帷幕,而騰訊雲+社群技術沙龍活動將會繼續延續下去,而下一站將是,對此感興趣的朋友們可千萬不要錯過啊!


1.微信群:

新增小編微信:color_ld,備註“進群+姓名+公司職位”即可,加入【雲端計算學習交流群】,和志同道合的朋友們共同打卡學習!


2.徵稿:

投稿郵箱:[email protected];微訊號:color_ld。請備註投稿+姓名+公司職位。


推薦閱讀

640?wx_fmt=jpeg


掃描以下二維碼即可參與“2018 年 CSDN 軟體開發者大調查活動”!我們還為你準備了精美的禮品,華為 nova3 智慧手機、小愛智慧音箱、CSDN 揹包、CSDN 定製T恤、數百本技術圖書等你來拿!參與即有機會獲贈,還等什麼,快來試試吧!

640?wx_fmt=jpeg


↓↓↓  點選【閱讀原文】檢視「CSDN雲端計算」往期精彩內容