
整個專案采用前后端分離開發,外網部署前臺專案、內網部署后臺專案,本文以客戶使用客戶端訪問網站,向后臺發送請求這一條線索對上圖進行分析,
文章目錄
- 一、Nginx集群→API網關
- 二、API網關→服務模塊
- 1.Ribbon實作負載均衡
- 2.Sentinel進行熔斷降級
- 三、服務模塊對請求進行處理
- 四、資料存盤解決方案
- 1.存盤資料
- 2.訊息佇列
- 3.全文檢索
- 4.OSS云存盤
- 五、日志管理
- 六、注冊中心&配置中心
- 七、服務追蹤
- 八、持續集成&持續部署
一、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容器的方式來運行,

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/257881.html
標籤:其他

