1. 程式人生 > 其它 >穀粒商城-微服務架構圖

穀粒商城-微服務架構圖

原文 :穀粒商城-微服務架構圖 上帝視角分析 - 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實時得到服務的告警資訊,以郵件或者簡訊的方式通知開發或運維人員。

八、持續整合&持續部署

專案釋出時,由於微服務眾多,每一個都打包部署到伺服器上過於麻煩,使用持續整合與持續部署可以簡化這些流程。

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

sentinelnginxdockernacosspring cloud alibabagithubspring cloudribbonelasticsearchrabbitmq

本文轉載自:https://blog.csdn.net/weixin_43691058/article/details/113725349