自己作圖分析分散式技術架構演化的常用套路
阿新 • • 發佈:2020-09-07
[toc]
## 背景
- 大型網際網路網站及應用是隨著業務的逐步發展與不斷創新慢慢演化而成的。在這個進化過程中,會有一些通用的問題需要解決,也會有一些常規的中介軟體需要構建,本文將對這個演化過程中涉及的分散式技術架構常用套路進行說明與分析。
## 1、單機架構
- 上線初期,負載較小,應用程式、資料庫、檔案等所有的資源都部署在一臺伺服器上。
- 架構上一般採用LAMP(Linux+Apache+Mysql+PHP)技術或Java MVC技術。
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200904090444960.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2pwZ3podQ==,size_16,color_FFFFFF,t_70#pic_center)
## 2、應用服務與資料服務分離
- 隨著訪問量的不斷增多,伺服器的負載持續升高,越來越多的資料及檔案資源導致儲存不足,這時候需要將應用服務與資料服務進行分離。
- 應用和資料分離後,不同特性的伺服器承擔不同的角色,併發處理能力和資料儲存空間得到了改善。
- 原有的LAMP(Linux+Apache+Mysql+PHP)技術或MVC技術仍然能支撐這種架構。
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/2020090409350486.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2pwZ3podQ==,size_16,color_FFFFFF,t_70#pic_center)
## 3、應用伺服器叢集架構
- 單一應用伺服器能夠處理的請求連線有限,在業務訪問高峰期內,應用伺服器成了網站的最大瓶頸。
- 使用叢集架構是解決高併發問題的常用套路:將來自使用者的訪問請求分發到應用伺服器叢集中的任何一臺伺服器上,使得單位時間內可以接納更多的訪問請求。
- 加入負載均衡排程服務:通過成熟的負載均衡系統可以有效分配外部請求的流量,使應用伺服器的負載壓力不再成為整個網站的瓶頸。
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200904094411147.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2pwZ3podQ==,size_16,color_FFFFFF,t_70#pic_center)
### 3.1 應用伺服器叢集架構下的Session管理
- **問題**:同一客戶的請求在負載均衡機制下,會被分配到不同的應用伺服器,造成產生不同的Session,即同一個客戶在同一網站下產生了不同的狀態。
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200904101753392.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2pwZ3podQ==,size_16,color_FFFFFF,t_70#pic_center)
- **解決方案**:引入基於Redis的K-V記憶體資料庫,將使用者請求產生的Session集中儲存並共享,可解決Session不同步的問題。
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200904102505581.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2pwZ3podQ==,size_16,color_FFFFFF,t_70#pic_center)
## 4、資料庫讀寫分離
- 業務量的急速增加,對於資料庫的讀寫頻率也會明顯升高,資料庫因為負載壓力過高也成為網站的瓶頸。大多數業務對資料庫的操作是讀多寫少,將資料庫讀庫與寫庫分離,是解決此問題的常用套路。
> 應用伺服器在寫資料的時候,訪問主資料庫,主資料庫通過主從複製機制將資料更新同步到讀資料庫,即讀資料庫的資料與主資料庫保持同步,這樣當應用伺服器讀資料的時候,就可以通過讀資料庫獲得資料。
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200904105317388.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2pwZ3podQ==,size_16,color_FFFFFF,t_70#pic_center)
- 應用伺服器端使用專門的資料訪問模組,比如通過Spring+Mybatis配置多資料來源,實現應用端的讀寫分離。
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200904110027995.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2pwZ3podQ==,size_16,color_FFFFFF,t_70#pic_center)
## 5、利用快取技術進行加速
- 資料快取:將業務系統中的“熱資料”放入快取中,應用服務在讀取這些資料中,直接從快取中讀取,可以減少資料庫的訪問壓力,從而提高整個網站的資料訪問速度。
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200904111206754.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2pwZ3podQ==,size_16,color_FFFFFF,t_70#pic_center)
- 使用反向代理和CDN加速網站響應:既加快了使用者訪問速度,也減輕後端伺服器的負載壓力。
> CDN和反向代理的基本原理都是快取,區別在於CDN部署在網路提供商的機房,使使用者在請求網站服務時,可以從距離自己最近的網路提供商機房獲取資料;而反向代理則部署在網站的中心機房,當用戶請求到達中心機房後,首先訪問的伺服器是反向代理伺服器,如果反向代理伺服器中快取著使用者請求的資源,就將其直接返回給使用者。
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200904112324880.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2pwZ3podQ==,size_16,color_FFFFFF,t_70#pic_center)
## 6、分散式資料庫系統與分散式檔案系統
- 與應用服務一樣,任何強大的單一伺服器都滿足不了持續增長的業務需求,單機的資料庫系統與檔案系統同樣也會遇到瓶頸。
1. 將不同的業務資料拆分到不同的資料庫中,並將對應不同的業務資料庫部署在不同的物理伺服器上,形成分散式資料庫系統。
2. 同理儲存的檔案也可以按檔案的業務屬性進行拆分,並部署在不同的物理伺服器上,形成分散式檔案系統。
3. Mycat是現階段流行的分散式資料庫系統;常見的分散式檔案系統有FastDFS等。
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200904113952455.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2pwZ3podQ==,size_16,color_FFFFFF,t_70#pic_center)
## 7、NoSQL資料庫作為補充
- 網際網路與大資料的高速發展,需要面對高效儲存、高可擴充套件性等難題,NoSQL(Not Only SQL)資料庫快速的查詢響應,靈活的資料模型等特性,正好可以作為傳統關係型資料的一個有力補充。
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/2020090412342980.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2pwZ3podQ==,size_16,color_FFFFFF,t_70#pic_center)
## 8、使用搜索引擎
- 隨著網站業務越來越複雜,對資料儲存和檢索的需求也越來越複雜,大型網際網路應用需要非資料庫查詢技術如搜尋引擎。
- Elasticsearch是一個實時的分散式搜尋和分析引擎,可以用於全文搜尋,結構化搜尋以及分析,該技術目前在網際網路行業得到了廣泛應用。
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200904123316287.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2pwZ3podQ==,size_16,color_FFFFFF,t_70#pic_center)
## 9. 分散式服務
- 將大型應用中的功能按單一職責的原則進行拆分,每個拆分出來的功能都可被稱為一項服務,通過中介軟體技術(RPC、訊息佇列、分散式事務等)實現各個服務之間的相互連線與通訊。
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200905081910885.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2pwZ3podQ==,size_16,color_FFFFFF,t_70#pic_center)
### 9.1 微服務
- 微服務也是一種分散式服務:把服務按單一職責原則進行拆分,形成更小的粒度,獨立部署與執行,並由獨立的團隊負責服務的生命週期管理。
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200907091437258.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2pwZ3podQ==,size_16,color_FFFFFF,t_70#pic_center)
## 分散式架構設計常用的中介軟體技術
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200905094442945.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2pwZ3podQ==,size_16,color_FFFFFF,t_70#pic_