1. SpringCloud 與SpringBoot的關(guān)系
SpringBoot專注與微服務的構(gòu)建,SpringCloud是用于治理微服務,為微服務提供:配置管理,服務發(fā)現(xiàn),路由等服務。
SpringBoot可以離開SpringCloud,但SpringCloud離不開SpringBoot
2.大體網(wǎng)站架構(gòu)圖

解釋:
NDS(Content Distribution Service): 就是負責緩存一些網(wǎng)站數(shù)據(jù),用戶不用直接去源網(wǎng)站獲取數(shù)據(jù),而是去離自己較近的服務器拿就行
LVS(Linux Virtual Server): Linux 虛擬服務
NGINX: 用于負載均衡,反向代理
3. Dubbo與SpringCloud對比
| Dubbo | SpringCloud | |
|---|---|---|
| 服務注冊中心 | Zookeeper | Spring Cloud Netflix Eureka |
| 服務調(diào)用方式 | RPC | REST API |
| 服務監(jiān)控 | Dubbo-monitor | SpringBoot Admin |
| 斷路器 | 不完善 | Spring Cloud Netflix Hystrix |
| 服務網(wǎng)關(guān) | 無 | Spring Cloud Netflix zuul |
| 分布式配置 | 無 | Spring Cloud Config |
| 服務跟蹤 | 無 | Spring Cloud Sleuth |
| 消息總線 | 無 | Spring Cloud Bus |
| 數(shù)據(jù)流 | 無 | Spring Cloud Stream |
| 批量任務 | 無 | Spring Cloud Task |
套路
導入依賴
編寫配置文件
注解開啟功能
編寫配置類
4. Eureka 服務注冊與發(fā)現(xiàn)

5. Eureka與Zookeeper
CAP:Consistency(強一致性),Available(可用性),Partition Tolerance(容錯性)
一個系統(tǒng)最多滿足兩項
5.1 Eureka(AP)
Eureka所有節(jié)點都是平等的,即使down掉某個節(jié)點,只要存在一個可用節(jié)點便可繼續(xù)使用。除此之外,Eureka還有自我保護機制,若是15分鐘檢測到85%以上的節(jié)點沒有心跳,Eureka就認為網(wǎng)絡發(fā)生問題了。就會采用下面措施。
不移除沒有心跳的服務
接受新的服務注冊,但不會同步
網(wǎng)絡穩(wěn)定時,同步到其他節(jié)點
5.2 zookeeper(CP)
zookeeper存在一個主節(jié)點,若是down掉,這會在其他節(jié)點選取出一個主節(jié)點,期間網(wǎng)絡不可用。zookeeper可保證每一次的訪問請求都能得到一致性的結(jié)果
6. Ribbon

6.1 基礎理解
Ribbon能做負載均衡,也就是請求平攤給多臺機器,系統(tǒng)達到高可用的狀態(tài)
常見的負載均衡軟件有nginx,lvs等
負載均衡的分類:
1)集中式LB: 消費方與提供方由某個獨立的設施進行負載均衡,如nginx,只把請求用某種策略分發(fā)給服務方
2)進程式LB: 消費方去注冊中心找到可用的提供方地址,然后自己選用合適的算法去調(diào)用。
6.3 負載均衡算法

個別解釋:
AvailabilityFilteringRule: 過濾掉無用的服務,剩下輪詢
RoundRobinRule: 輪詢
7. Feign
Feign也是用于負載均衡, 但不同的是不用去寫一個RestTemplate,直接面向接口編程
8. Hystrix
Hystrix是用于解決服務熔斷的開源庫,服務發(fā)生異常時,可調(diào)用備選方案
8.1 服務熔斷
服務在遇到異常情況時,調(diào)用備選方案。如,數(shù)據(jù)庫查詢不到數(shù)據(jù),用戶訪問異常,若是有服務熔斷就可以調(diào)用備選方案,告訴用戶只是找不到數(shù)據(jù),不拋異常這種方式會更加友好。
8.2 服務降級
當遇到秒殺時,服務器的并發(fā)量較高時,可以暫停某些無關(guān)的服務,讓服務器能以減少負擔。
8.3 服務監(jiān)控
9. Zuul(路由網(wǎng)關(guān))
需要注冊進Eureka
9.1 路由
Zuul就是將請求統(tǒng)一管理,可進行路由轉(zhuǎn)發(fā)。
9.2 過濾
請求校驗,可將Eureka服務名進行隱藏,只暴露設置的標識符。
10. SpringCloud Config(配置)
由于每個微服務都有自己配置application.yml, 沒有集中管理的話,修改特別麻煩。
可以將本地的配置文件如.yml,上傳到遠端如github,通過SpringCloudConfig里的Server進行讀取,那么我們本地只需訪問Server讀取配置文件,加載就行。
