項目架構圖如下:
項目結構圖的說明:
客戶端可以是pc端,也可以是手機,或者其它的移動設備,當客戶端向后臺發送請求的時候,首先需要經過我們的路由器,路由器根據我們的VIP(虛擬IP地址)將請求轉換給具體的虛擬路由器(keepalived+Nginx),為了保證高可用,此時的虛擬路由器是需要做高可用配置的(至少兩臺以上的服務)。主要用來解決單點故障。
Nginx單點可以解決5萬的并發,并且Nginx還能夠做限流(IP限流,或者訪問速率限流),并且Nginx還具備緩存的功能。后期為了解決更高的并發,我們可以加入openResty,這樣單點就可以解決10k到1000k的并發。
虛擬路由器將請求轉發給我們的網關(Gateway) GateWay的主要作用如下
1. 將用戶的請求轉發給具體的微服務。
2. 限流,微服務網關需要使用服務器發布,譬如Tomcat,所以這一塊所解決的并發是有限的,主要為后臺的商品,訂單,用戶微服務模塊提供保護。
3. 統一的鑒權。從而判斷用戶是否能夠進行對應的操作。
請求這個時候,就會到達具體的微服務,因為微服務與微服務之間需要進行相互的調用,所以我們需要使用Feign進行微服務的調用。模塊與模塊之間需要有公用的JAVABean和工具類。所以我們把Feign和通用JavaBean和工具類,都封裝成一個一個的微服務。
還有Ribbon負載均衡,和HyStrix服務的熔斷降級,我們都需要做成一個一個的微服務。
我們會把分布式的事務處理,oauth2.0的授權服務,消息服務,canel數據同步監聽服務,支付等等其它的功能,都做成我們的公共的微服務組件。方便調用。
我們使用spring cloud Bus 來做微服務各個文件的監聽服務。
整個項目,我們使用服務的注冊與發現組件(Nacos/Consul/Eureka/Zookeeper........),服務的監控組件Hystraix DashBorad,我們使用統一的服務配置中心ConfigServer.我們使用的遠程倉庫是GitHub.
整個項目,我們數據層的支持如下:
1. 數據的檢索,使用的是ES集群。
2. 項目中的文件采用的是FastDFS集群。
3. 數據持久化層采用的MySQL集群,底層采用的是分庫分表。
4. 緩存使用的redis集群。