溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ddbs簡介

發(fā)布時間:2020-04-27 07:33:50 來源:網絡 閱讀:1123 作者:于金冶 欄目:數據庫

    本文從個人項目經歷來說一點自己對ddbs的理解,包括催生ddbs的原因ddbs的基本原理,其解決了哪些問題,還有哪些不足。歡迎大家討論、斧正。

    業(yè)務規(guī)模較小時,使用單機mysql作存儲。但伴隨業(yè)務發(fā)展,存儲容量和并發(fā)能力會有瓶頸。

    首先,假設單機的硬盤為1.8T,也可以掛更大容量硬盤,但仍有限。

    其次,單機的讀寫并發(fā)能力有限,假設峰值寫入qps1000,峰值讀取qps3000,網卡對讀取時流量也有要求,單次訪問的讀取量不應過大。

    單機的鏈接數也有限。


    那么,當使用單機mysql的業(yè)務發(fā)展,受到以上瓶頸時,一般的思路會是什么呢?一臺機器不行,用兩臺呢,再不行,擴展更多臺。


    一臺擴展為兩臺,磁盤容量擴大了,通過分表,將表打散在不同機器上,共同承擔寫入任務,并發(fā)也提高了,感覺這個思路是對的。


    那么在這個過程中,我們需要做什么?

    業(yè)務發(fā)展到單機無法承受,即使在單機上,很多表應該也做過分表了。一般會根據業(yè)務選擇分表鍵。單個表的大小mysql也有一定要求,一般存儲量不大于1G,單條記錄小一些,一般不超過1k,條數一般不超過1000萬條,最多不超過5000萬條,否則表的使用和維護效率都很低。假設業(yè)務已經做了足夠多的分表,滿足三年的數據增長需要,第一年過后,每個分表的條數達到200萬條,整機存儲容量使用了一半,此時我們想拆分為兩臺機器。

    此時我們可以將原機器上部分表數據同步到新機器上,并在model層抽象一個路由層,將對數據庫的操作發(fā)到不同的機器上,上層業(yè)務仍可以認為在使用單機。此時可以將原機器上不歸屬自己管理范圍的表刪除,騰出空間。

    一臺變成了兩臺,向分布式走了一步。此時存儲容量和并發(fā)都提高了,由路由層管理兩臺機器。如果兩臺或今后的多臺機器,并發(fā)數高于路由層處理能力怎么辦?那還要把路由層機器也擴一下,把路由規(guī)則都寫進去,大家按一個格則辦事。

    

    經過上面的一番折騰,數據庫機器水平擴展,解決了單機存在的一些問題。在這個擴展的過程中,是否會對業(yè)務產生中斷影響呢?

    會有一點影響。至少在路由層改路由表時,會中斷數據庫的寫入,讀取此時可以不中斷。


    ddbs中,使用到的多臺機器,都叫做分片。分片提高了系統(tǒng)存儲容量和并發(fā)能力,引入分片,也是系統(tǒng)的復雜度提高了,需要引入路由層機器,路由機器也可能需要擴展,復雜操作,還需要添加更多邏輯功能。但至少可以可業(yè)務邏輯區(qū)分開,業(yè)務可以把ddbs當做單機在使用。


    那么ddbs有哪些不足呢?

    ddbs還是要基于分表、分片實現的。那么對數據庫的任何操作,首要條件是需要指明操作的分表鍵。沒有這個維度的準確值,就不能對數據庫操作,當然除非是備用庫,那你隨便掃表,因為備用庫可以轉為冗余安全,不走線上流量,可以做統(tǒng)計任務。

    單指明分表鍵還不行,還要注意操作的數據可能會分布在不同分表、不同分片中,這樣的操作會引發(fā)ddbs產生大量并發(fā)操作,業(yè)務的一個請求就會占用多個機器多個鏈接,使ddbs得并發(fā)能力大打折扣。比如‘where 分表鍵 in ()’操作,這種操作要慎重,in中個數不可太多。

     分表鍵最好選用×××,字符串型,可能hash后分配不均,表大小不均衡。


    事物操作在ddbs中的實現,非常耗費系統(tǒng)性能。事務類操作需要路由控制層控制整個操作過程,期中可能涉及多個分片,多個不同的表的操作,對系統(tǒng)整體可用性要求高。


    

    

    


    



向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI