對系統演進的一點點理解

一般不會有什麼系統一上來就採用分佈式微服務,會先採用單體的形式,這時候數據庫和應用完全是有可能部署在同一臺服務器中的,接下來隨着業務發展,數據量也會隨之增多,爲了適應數據量,提高用戶體驗,會選擇適當的升級服務器的配置,比如增大CPU的核數,擴大服務器內存,使用固態硬盤等,這種提高單臺機器性能的做法叫做垂直擴容。但是單體機器的升級是有極限的,當垂直擴容到一定極限的時候,再往上升級,成本會越來越高,投入與產出不成正比,這時候可以引入水平擴容。

水平擴容簡單的理解就是加機器,通過加機器,做集羣,配合負載均衡,分流減壓,同時如果數據庫也存在着瓶頸,那麼可以考慮做數據庫主從,採用讀寫分離,實現讀數據時讀取讀數據庫,寫數據時寫主數據庫,然後主從同步。到了這步,如果業務還是持續增長,可以開始往分佈式上走了。

分佈式可以說是一種思想,分而治之,具體落地還是做技術選型的。如Spring Cloud,Dubbo。想要做成微服務,關鍵的第一步是做好應用的拆分,把一個大的單體系統拆分成多個子系統,每個子系統的業務分界線要劃分明顯,也有種單一職責的原則在裏面。通過改造成微服務,多個子系統間可以實現併發開發,同時配合微服務框架提供的各個組件功能,實現低耦合,高內聚的目標。系統微服務化後,每個子系統都會有自己對應的數據庫,隨着時間的推移,數據量會日益增多,數據庫的瓶頸會越來越明顯,這時候可以嘗試做分庫分表。

分庫分表是一種水平拆分數據的思路,可以根據業務需求按照id,時間等不同緯度來拆分,而既然做了數據的拆分,那麼查詢數據時肯定也是要用相同的規則去查找,簡單的說,就是算法要相同,而拆分算法可以用hash,取模,路由等等。關於分庫分表,也有許多技術可供選擇,如mycat中間件,sharding-jdbc以及最近剛成爲Apache歷史上第一個分佈式數據庫中間件項目的shardingSphere等,分庫分表被拆分後,很多單庫裏能做的操作就不好實現了,比如表join,數據排序分頁,分佈式事務等,這時候可以參試着做數據異構。

數據異構的話,可以把這方式想象成爲了滿足某種業務的要求,對數據做了另一個結構的改造和展示,比如一個訂單表,原來是按照id分類的,但是業務要求還要能根據用戶和商家這兩個維度來處理數據,那麼就可以根據用戶和商家這兩個維度來異構數據庫,分爲商家維護的訂單分庫和用戶維度的訂單分庫。而有時候因爲分庫分表了,一個頁面的展示數據需要查詢好多個分庫後才能正常展示,那麼一旦有一個數據分庫出現了問題,就會影響整個頁面的體驗,這時候可以把多個分庫的數據聚合異構存儲在KV存儲集羣中,這樣只需要一次查詢就能夠獲取到所有的數據。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章