成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

58沈劍:數據庫秒級平滑擴容架構方案

開發 開發工具
今天主要給大家介紹一下關于數據庫秒級平滑擴容架構方案的內容。

數據庫

一、緣起

(1)并發量大,流量大的互聯網架構,一般來說,數據庫上層都有一個服務層,服務層記錄了“業務庫名”與“數據庫實例”的映射關系,通過數據庫連接池向數據庫路由sql語句以執行:

數據庫連接池

如上圖:服務層配置用戶庫user對應的數據庫實例物理位置為ip(其實是一個內網域名)。

(2)隨著數據量的增大,數據要進行水平切分,分庫后將數據分布到不同的數據庫實例(甚至物理機器)上,以達到降低數據量,增強性能的擴容目的:

增強性能的擴容

如上圖:用戶庫user分布在兩個實例上,ip0和ip1,服務層通過用戶標識uid取模的方式進行尋庫路由,模2余0的訪問ip0上的user庫,模2余1的訪問ip1上的user庫。

關于數據庫水平切分,垂直切分的更多細節,詳見《一分鐘掌握數據庫垂直拆分》 。

(3)互聯網架構需要保證數據庫高可用,常見的一種方式,使用雙主同步+keepalived+虛ip的方式保證數據庫的可用性:

兩個相互同步的主庫使用相同的虛ip

如上圖:兩個相互同步的主庫使用相同的虛ip。

主庫掛掉的時候,虛ip自動漂移到另一個主庫

如上圖:當主庫掛掉的時候,虛ip自動漂移到另一個主庫,整個過程對調用方透明,通過這種方式保證數據庫的高可用。

關于高可用的更多細節,詳見《究竟啥才是互聯網架構“高可用”》。

(4)綜合上文的(2)和(3),線上實際的架構,既有水平切分,又有高可用保證,所以實際的數據庫架構是這樣的:

數據庫架構

提問:如果數據量持續增大,分2個庫性能扛不住了,該怎么辦呢?

回答:繼續水平拆分,拆成更多的庫,降低單庫數據量,增加庫主庫實例(機器)數量,提高性能。

最終問題拋出:分成x個庫后,隨著數據量的增加,要增加到y個庫,數據庫擴容的過程中,能否平滑,持續對外提供服務,保證服務的可用性,是本文要討論的問題。

二、停服務方案

在討論平滑方案之前,先簡要說明下“x庫拆y庫”停服務的方案:

(1)站點掛一個公告“為了為廣大用戶提供更好的服務,本站點/游戲將在今晚00:00-2:00之間升級,屆時將不能登錄,用戶周知”

(2)停服務

(3)新建y個庫,做好高可用

(4)數據遷移,重新分布,寫一個數據遷移程序,從x個庫里導入到y個庫里,路由規則由%x升級為%y

(5)修改服務配置,原來x行配置升級為y行

(6)重啟服務,連接新庫重新對外提供服務

整個過程中,最耗時的是第四步數據遷移。

回滾方案:

如果數據遷移失敗,或者遷移后測試失敗,則將配置改回x庫,恢復服務,改天再掛公告。

方案優點:簡單

方案缺點:

(1)停服務,不高可用

(2)技術同學壓力大,所有工作要在規定時間內做完,根據經驗,壓力越大約容易出錯(這一點很致命)

(3)如果有問題***時間沒檢查出來,啟動了服務,運行一段時間后再發現有問題,難以回滾,需要回檔,可能會丟失一部分數據

有沒有更平滑的方案呢?

三、秒級、平滑、帥氣方案

擴容前的架構

再次看一眼擴容前的架構,分兩個庫,假設每個庫1億數據量,如何平滑擴容,增加實例數,降低單庫數據量呢?三個簡單步驟搞定。

(1)修改配置

修改配置

主要修改兩處:

a)數據庫實例所在的機器做雙虛ip,原來%2=0的庫是虛ip0,現在增加一個虛ip00,%2=1的另一個庫同理

b)修改服務的配置(不管是在配置文件里,還是在配置中心),將2個庫的數據庫配置,改為4個庫的數據庫配置,修改的時候要注意舊庫與辛苦的映射關系:

%2=0的庫,會變為%4=0與%4=2;

%2=1的部分,會變為%4=1與%4=3;

這樣修改是為了保證,拆分后依然能夠路由到正確的數據。

(2)reload配置,實例擴容

reload配置,實例擴容

服務層reload配置,reload可能是這么幾種方式:

a)比較原始的,重啟服務,讀新的配置文件

b)高級一點的,配置中心給服務發信號,重讀配置文件,重新初始化數據庫連接池

不管哪種方式,reload之后,數據庫的實例擴容就完成了,原來是2個數據庫實例提供服務,現在變為4個數據庫實例提供服務,這個過程一般可以在秒級完成。

整個過程可以逐步重啟,對服務的正確性和可用性完全沒有影響:

a)即使%2尋庫和%4尋庫同時存在,也不影響數據的正確性,因為此時仍然是雙主數據同步的

b)服務reload之前是不對外提供服務的,冗余的服務能夠保證高可用

完成了實例的擴展,會發現每個數據庫的數據量依然沒有下降,所以第三個步驟還要做一些收尾工作。

(3)收尾工作,數據收縮

數據收縮

有這些一些收尾工作:

a)把雙虛ip修改回單虛ip

b)解除舊的雙主同步,讓成對庫的數據不再同步增加

c)增加新的雙主同步,保證高可用

d)刪除掉冗余數據,例如:ip0里%4=2的數據全部干掉,只為%4=0的數據提供服務啦

這樣下來,每個庫的數據量就降為原來的一半,數據收縮完成。

四、總結

n庫擴2n庫的秒級、平滑擴容

該帥氣方案能夠實現n庫擴2n庫的秒級、平滑擴容,增加數據庫服務能力,降低單庫一半的數據量,其核心原理是:成倍擴容,避免數據遷移。

遷移步驟:

(1)修改配置

(2)reload配置,實例擴容完成

(3)刪除冗余數據等收尾工作,數據量收縮完成

【本文為51CTO專欄作者“58沈劍”原創稿件,轉載請聯系原作者】

戳這里,看該作者更多好文

責任編輯:趙寧寧 來源: 51CTO專欄
相關推薦

2017-03-24 14:46:50

數據架構數據庫

2019-05-27 09:56:00

數據庫高可用架構

2018-01-24 09:35:12

高并發數據庫設計水平切分

2023-11-14 08:44:55

數倍數據

2017-03-23 23:04:03

2016-11-29 08:50:17

數據庫軟件架構

2018-06-14 21:47:46

WOT沈劍58速運

2018-03-15 11:23:59

微服務架構實踐

2015-10-27 10:33:03

架構設計演進

2017-04-17 07:00:54

uiduname數據庫

2024-01-23 12:56:00

數據庫微服務MySQL

2018-01-10 09:10:10

數據庫阿里實時監控

2011-03-14 11:12:45

數據庫營銷

2017-02-16 13:46:27

可視化工具數據庫

2017-02-16 09:42:00

數據庫58到家存儲

2020-08-19 12:29:35

留存分析數據工具

2022-09-19 16:22:43

數據庫方案

2024-08-12 12:07:18

2023-03-27 09:14:34

2011-03-09 08:53:02

MySQL優化集群
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 天天干天天爱天天爽 | 国产精品视频一区二区三区, | 麻豆久久久9性大片 | 伊人性伊人情综合网 | 一级黄色毛片子 | 欧美性网 | 欧美不卡视频 | 色桃网| 亚洲精品免费视频 | 91成人在线 | 91中文| 国产精品一区二区在线 | 成人免费小视频 | 91天堂网 | 亚洲视频精品在线 | 国产精品日日做人人爱 | 欧美在线视频网 | 成人片免费看 | www.日韩| 亚洲精品乱码久久久久久蜜桃 | 日韩淫片免费看 | 中文字幕亚洲欧美 | 日韩一区二区三区视频 | 国产98色在线 | 日韩 | 成年人精品视频 | av片在线观看网站 | 亚洲黄色在线 | 欧美精品一级 | 成人在线观看欧美 | 成人一区二 | 欧美日韩国产一区二区三区 | 国产精品久久久久久久久久免费看 | 亚洲三级在线 | 91在线精品秘密一区二区 | 91pao对白在线播放 | 日韩一区二区三区在线观看 | 国产亚洲日本精品 | 日韩电影一区二区三区 | 青春草在线| 国产精品久久久久久久久免费樱桃 | 在线观看日韩精品视频 |