項目介紹:
谷粒商城是一個B2C模式的電商平台,銷售自營商品給客戶。
項目微服務架構圖:
項目微服務架構說明:
1. 前后分離開發,分為內網部署(后端集群)和外網部署(前端項目,包括手機APP),外網是面向公眾訪問的。
2. 前端在頁面上操作發送請求到后端,在這途中會經過Nginx集群,Nginx把請求轉交給API網關(springcloud gateway)(網關可以根據當前請求動態地路由到指定的服務,看當前請求是想調用商品服務還是購物車服務還是檢索服務),從路由過來如果請求很多,可以負載均衡地調用商品服務器中一台(商品服務復制了多份),當商品服務器出現問題也可以在網關層面對服務進行熔斷或降級(使用阿里的sentinel組件),網關還有其他的功能如認證授權、限流(只放行部分到服務器)等。
3. 到達服務器后進行處理(springboot為微服務),服務與服務可能會相互調用(使用feign組件),有些請求可能經過登錄才能進行(基於OAuth2.0的認證中心。安全和權限使用springSecurity控制)
4. 服務可能保存了一些數據或者需要使用緩存,我們使用redis集群(分片+哨兵集群)。持久化使用mysql,讀寫分離和分庫分表。
5. 服務和服務之間會使用消息隊列(RabbitMQ),來完成異步解耦,分布式事務的一致性。有些服務可能需要全文檢索,檢索商品信息,使用ElaticSearch。
6. 服務可能需要存取數據,使用阿里雲的對象存儲服務OSS。
7. 項目上線后為了快速定位問題,使用ELK對日志進行處理,使用LogStash收集業務里的各種日志,把日志存儲到ES中,用Kibana可視化頁面從ES中檢索出相關信息,幫助我們快速定位問題所在。
8. 在分布式系統中,由於我們每個服務都可能部署在很多台機器,服務和服務可能相互調用,就得知道彼此都在哪里,所以需要將所有服務都注冊到注冊中心。服務從注冊中心發現其他服務所在位置(使用阿里Nacos作為注冊中心)。
9. 每個服務的配置眾多,為了實現改一處配置相同配置就同步更改,就需要配置中心,也使用阿里的Nacos,服務從配置中心中動態取配置。
10. 服務追蹤,追蹤服務調用鏈哪里出現問題,使用springcloud提供的Sleuth、Zipkin、Metrics,把每個服務的信息交給開源的Prometheus進行聚合分析,再由Grafana進行可視化展示,提供Prometheus提供的AlterManager實時得到服務的警告信息,以短信/郵件的方式告知服務開發人員。
11. 還提供了持續集成和持續部署。項目發布起來后,因為微服務眾多,每一個都打包部署到服務器太麻煩,有了持續集成后開發人員可以將修改后的代碼提交到github,運維人員可以通過自動化工具Jenkins Pipeline將github中獲取的代碼打包成docker鏡像,最終是由k8s集成docker服務,將服務以docker容器的方式運行。
微服務划分圖:
微服務划分圖說明:
1. 反映了需要創建的微服務以及相關技術。
2. 前后分離開發。前端項目分為admin-vue(工作人員使用的后台管理系統)、shop-vue(面向公眾訪問的web網站)、app(公眾)、小程序(公眾)
3. 商品服務:商品的增刪改查、商品的上下架、商品詳情
4. 支付服務
5. 優惠服務
6. 用戶服務:用戶的個人中心、收貨地址
7. 倉儲服務:商品的庫存
8. 秒殺服務
9. 訂單服務:訂單增刪改查
10. 檢索服務:商品的檢索ES
11. 中央認證服務:登錄、注冊、單點登錄、社交登錄
12. 購物車服務
13. 后台管理系統:添加優惠信息等
項目技術:
1. 前后分離開發,並開發基於vue的后台管理系統
2. SpringCloud全新的解決方案
3. 應用監控、限流、網關、熔斷降級等分布式方案
4. 分布式事務,分布式鎖等
5. 壓力測試與性能優化
6. 各種集群技術的區別以及使用
7. CI/CD 使用