穀粒商城-微服務架構圖
原文 :穀粒商城-微服務架構圖 上帝視角分析 - osc_9reytqkm的個人空間 - OSCHINA - 中文開源技術交流社群
https://my.oschina.net/u/4346209/blog/4950015
整個專案採用前後端分離開發,外網部署前臺專案、內網部署後臺專案。本文以客戶使用客戶端訪問網站,向後臺傳送請求這一條線索對上圖進行分析。
文章目錄
一、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
實時得到服務的告警資訊,以郵件或者簡訊的方式通知開發或運維人員。
八、持續整合&持續部署
專案釋出時,由於微服務眾多,每一個都打包部署到伺服器上過於麻煩,使用持續整合與持續部署可以簡化這些流程。
sentinelnginxdockernacosspring cloud alibabagithubspring cloudribbonelasticsearchrabbitmq
持續整合CI/持續部署CD
:開發人員可以將修改後的程式碼提交給Github,運維人員通過自動化工具Jenkins從Github中獲取程式碼,將其打包成Docker映象。最終使用k8s整合整個Docker服務。以服務Docker容器的方式來執行。
本文轉載自:https://blog.csdn.net/weixin_43691058/article/details/113725349