穀粒商城-微服務架構圖 上帝視角分析

在這裏插入圖片描述

整個項目採用前後端分離開發,外網部署前臺項目、內網部署後臺項目。本文以客戶使用客戶端訪問網站,向後臺發送請求這一條線索對上圖進行分析。


一、Nginx集羣→API網關

請求首先到達Nginx集羣,並由Nginx將請求轉交給API網關

項目中使用SpringCloud Gateway技術作爲API網關。

在這裏插入圖片描述

二、API網關→服務模塊

第二步,API網關拿到請求後進行認證授權,如果認證合法,就由API網關將請求動態路由到指定的業務模塊

動態路由:因爲這條請求可能是調用商品服務、購物車服務、搜索服務、等衆多服務中的一種,所以需要動態路由。
認證授權:由網關進行。

在這裏插入圖片描述

1.Ribbon實現負載均衡

API網關將請求動態路由到指定的業務模塊時,如果該業務模塊存在多個,就需要在業務集羣中使用負載均衡技術進行統籌管理。

業務集羣中使用Ribbon組件實現負載均衡。

2.Sentinel進行熔斷降級

API網關將請求動態路由到指定的業務模塊時,如果某些服務出現問題,就需要在API網關中使用熔斷降級進行管理。

API網關中使用Sentinel組件進行熔斷降級。(該技術由 Spring Cloud Alibaba提供)

  • 注:Sentinel組件在本項目中還實現了令牌限流的功能。

三、服務模塊對請求進行處理

請求路由到服務模塊後,服務模塊對請求進行處理。

SpringBoot:每個微服務模塊都是使用SpringBoot技術進行編寫。

遠程調用:使用SpringCloud 的 Feign組件進行遠程調用。(服務之間可能會有互相調用,如訂單服務調用商品服務查詢商品信息。)

OAuth2.0認證中心:除了一般的登錄,還使用OAuth2.0整合了社交登錄。(額外判斷了某些請求是否需要登陸後才能進行處理)
SpringSecurity:使用SpringSecurity進行安全與權限控制。

在這裏插入圖片描述

四、數據存儲解決方案

1.存儲數據

服務處理請求時,免不了要使用數據庫與緩存進行數據的存儲

Redis集羣:使用Sentinel分片集羣+Shard哨兵集羣進行緩存處理。
MySQL集羣:持久化數據使用MySQL集羣,可以使用 讀寫分離 也可以使用 分庫分表。

在這裏插入圖片描述

2.消息隊列

模塊集羣中,服務模塊與服務模塊之間的通信,需要使用消息隊列進行異步解耦,和分佈式事務的最終一致性。

RabbitMQ集羣:使用RabbitMQ集羣做消息對立,完成服務與服務之間的 異步解耦 、分佈式事務的最終一致性。

在這裏插入圖片描述

3.全文檢索

有些服務模塊需要進行檢索,如對商品信息進行檢索。

ElasticSearch:使用ElasticSearch進行檢索。

在這裏插入圖片描述

4.OSS雲存儲

有些服務需要存儲圖片,視頻等大文件,可以使用阿里雲的對象存儲服務OSS。

OSS:使用阿里雲的對象存儲服務OSS進行圖片、視頻的雲存儲。

在這裏插入圖片描述

五、日誌管理

項目上線以後,爲了快速定位項目中可能出現的問題,需要進行日誌管理。

ELK:使用ELK對日誌進行處理。
LogStash:使用LogStash蒐集業務中的各種日誌,將他們放入ES中。再使用Kibana可視化界面,從ES中檢索出相關的日誌信息。快速定位項目中的問題。

在這裏插入圖片描述

六、註冊中心&配置中心

分佈式系統中,由於每一個服務都可能部署在很多臺機器,服務與服務之間要互相調用,這就需要指導彼此都在哪裏。推薦將所有服務註冊到註冊中心,這樣服務之間就可以從註冊中心發現彼此。

每一個服務的配置衆多,爲了集中管理這些配置,也需要使用Nacos作爲配置中心,這樣,所有的服務都可以從配置中心中動態的獲取其配置。

Nacos註冊中心:使用Nacos作爲服務的註冊中心。(該技術由 Spring Cloud Alibaba提供)
Nacos配置中心:同樣使用Nacos作爲服務的配置中心。(該技術由 Spring Cloud Alibaba提供)

在這裏插入圖片描述

七、服務追蹤

服務在調用期間,可能會出現問題。比如:...→訂單服務→商品服務→庫存服務→...,可能某一個鏈路出現了問題,就需要對整個服務調用鏈進行追蹤,查看哪裏出現了問題,這就需要使用服務追蹤。

使用Sleuth+Zipkin+Metrics進行服務追蹤,將每一個服務的信息交給開源的Prometheus進行聚合分析後,由Grafana進行可視化展示。再通過Prometheus提供的Altermanager實時得到服務的告警信息,以郵件或者短信的方式通知開發或運維人員。
在這裏插入圖片描述

八、持續集成&持續部署

項目發佈時,由於微服務衆多,每一個都打包部署到服務器上過於麻煩,使用持續集成與持續部署可以簡化這些流程。

持續集成CI/持續部署CD:開發人員可以將修改後的代碼提交給Github,運維人員通過自動化工具Jenkins從Github中獲取代碼,將其打包成Docker鏡像。最終使用k8s集成整個Docker服務。以服務Docker容器的方式來運行。

在這裏插入圖片描述

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