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

憑什么,給了你 DB,你卻擴不了容?

開發
好不容易找運維申請了兩臺機器,讓DBA部署了幾個實例,想把一些業務庫拆分出來,卻發現拆不出來,擴不了容,尷尬!

隨著業務越來越復雜,數據量越來越大,并發量越來越大,數據庫的性能越來越低。好不容易找運維申請了兩臺機器,讓DBA部署了幾個實例,想把一些業務庫拆分出來,卻發現拆不出來,擴不了容,尷尬!

因為數據庫強關聯在一起,無法通過增加數據庫實例擴容,就是一個耦合的典型案例。

場景還原

有一個公共用戶數據庫DB_USER,里面table_user存放了通用的用戶數據:

table_user (uid, name, passwd, …)

在數據量比較小,并發量比較小,業務還沒有這么復雜的時候,為了提高資源利用率(程序員才沒有考慮什么資源利用率,更多的是圖方便),業務A把用戶個性化的數據也放在這個庫里:

table_A(uid, A業務的個性化屬性)

業務A有一個需求,即要展現用戶公共屬性,又要展現業務A個性化屬性,程序員經常這么實現的:

select * from table_user, table_A

      where table_user.uid = table_A.uid

      and table_user.uid = $uid

初期關聯查詢沒有任何問題,單條記錄訪問,命中索引,一次查詢所有數據,簡單高效。

如何產生各業務數據耦合?

通過join實現業務,導致通用表table_user和業務表table_A必須存在于一個數據庫實例里。

如果業務B也這么做,業務C也這么做,會導致公用業務,業務A,業務B,業務C都必須存在于一個數據庫實例里。

會產生什么潛在問題呢?

假如A業務線上線了一個新功能,不小心進行了全表掃描,導致數據庫CPU100%,數據庫實例性能下降,由于實例共用,通用業務,業務B和業務C都會受影響。

即某個業務線的數據庫性能急劇下降導致所有業務都受影響,這種耦合,歷史總是驚人的相似:

  • 業務B的大boss在群里首先發飆:“技術都干啥了,怎么系統掛了”;
  • 業務B的rd一臉無辜:“業務A上線了,所以我們掛了”;

額,然而,這個理由,好像在大boss那解釋不通…

  • 業務B的大boss:“趕緊加幾臺機器,拆分開”;
  • 業務B的rd一臉無奈:“加機器加實例也擴容不了”;
  • 業務B的大boss對業務2的rd吼道“還想甩鍋,拖出去祭天”;
  • ...

唉,加了幾臺機器,加了幾個實例,然而并沒有什么卵用,都耦合在一個實例里,完全擴不了容。

那,如何解除公共數據庫與業務數據庫的耦合?

第一步:公共數據訪問下沉服務化。

還是上面的例子,當公共的user數據訪問服務化之后,依據服務化的原則:

  • 業務層只能通過服務RPC接口訪問數據;
  • 底層user庫屬于user服務私有;
  • 任何上游不允許跨過服務訪問底層的user庫;

第二步:垂直拆分,個性化數據訪問上浮

原來業務方:

  • 通過join一次性獲取通用的數據和個性化的業務數據數據;

服務化+垂直拆分后,變成兩次訪問:

  • 一次取得業務數據(業務可以直接調用自己的數據庫,也可以自己做業務服務調用RPC接口);
  • 一次取得共性數據(調用通用的RPC接口);

兩種方式相比:

  • 之前的方式其實業務代碼可能會更簡單一些,因為它是將這個業務邏輯放在了SQL語句中,但是導致數據庫耦合在了一起;
  • 后面這種方式就是業務的代碼會更復雜,會變成多次訪問,將原來在SQL中進行的邏輯計算變成業務代碼中的邏輯計算,但是數據庫解耦了;

業務復雜,數據量大,并發老大,對擴展性要求更高的架構,一定是后者。

此時各業務有自己的庫,公共有公共的庫:

  • 早期:可以放在一個數據庫實例里;
  • 后期:可以很容易地通過新增數據庫實例,把user庫或者業務A/B/C的庫拆分出來,實現增加機器增加實例就實現擴容;

個性業務數據訪問垂直拆分,共性數據訪問服務化下沉,只是一個很小的優化點,但對于數據庫解耦卻是非常的有效。

知其然,知其所以然。

思路比結論更重要。

責任編輯:趙寧寧 來源: 架構師之路
相關推薦

2017-12-01 06:02:14

耦合數據庫CA

2017-04-17 11:50:13

51CTO 學院

2021-11-12 05:59:23

容災備份5G

2023-11-06 18:33:19

分庫分表數據庫

2024-01-30 18:07:22

Linux命令行工具

2024-03-15 09:06:48

HTTPSCA私鑰

2019-08-08 17:25:20

裁員計劃程序員

2012-02-23 15:02:20

架構師介紹

2017-12-26 11:37:32

云原生CNCF容器

2013-10-10 15:41:38

綠色數據中心數據中心

2021-04-06 15:38:01

手機國產蘋果

2009-09-04 05:34:57

KVM性能紅帽KVM

2017-02-07 09:37:46

2024-04-07 00:00:03

2017-04-26 16:03:20

2017-03-21 15:16:57

IBM

2013-01-22 11:15:40

GitHub

2023-01-05 23:18:06

CPU線程

2021-04-15 21:55:38

電腦磁盤微軟

2011-12-07 10:16:45

Firefox新聞
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 高清免费在线 | 亚洲国产精品日本 | 成人性视频免费网站 | 国产成人精品a视频一区www | 午夜精品一区二区三区免费视频 | 91视频免费黄 | 国产精品中文字幕在线 | 成人av在线网站 | 国产成人精品一区二区三区网站观看 | 国产精品欧美精品 | 欧美专区在线视频 | 欧美一区二区三区免费电影 | 日韩精品一区二区三区四区视频 | 中文字幕三区 | 美国黄色毛片 | 黑人巨大精品欧美一区二区一视频 | 久久久国产一区二区三区 | 日本午夜精品 | 国产综合久久 | 色综合久久久久 | 久久精品视频网站 | av影片在线| 特级一级黄色片 | 亚洲黄色一区二区三区 | 91麻豆精品国产91久久久久久 | 国产精品久久久久久一区二区三区 | 精品粉嫩aⅴ一区二区三区四区 | 中文字幕亚洲在线 | 青青久视频 | 波多野结衣中文字幕一区二区三区 | 亚洲欧美一区二区在线观看 | 国产丝袜一区二区三区免费视频 | 免费一区 | 九九热精品在线 | 97福利在线 | 自拍偷拍一区二区三区 | 久久99蜜桃综合影院免费观看 | 欧美日韩免费 | 日日夜夜草 | 国产成在线观看免费视频 | 国产精品一区二区三区四区 |