微服務
微服務將單體應用分割成更小的的獨立服務,部署在不同的服務器上。服務間的關聯通過暴露的api接口來實現
優點:高內聚低耦合,一個模塊有問題不影響整個應用,增加可靠性,更新技術方便
缺點:增加運維難度,分布式系統復雜,測試開發部署較于單體應用不便
常見微服務架構的技術棧
1.Dubbo 阿里出品,后捐贈Apache
2.SpringCloud Netfilx (逐漸淘汰)
3.SpringCloud Spring官方
4.SpringCloudAlibaba
注冊中心
微服務通過http協議使不同的服務進行通信,這些服務需要放在一個池子里進行管理,這就是服務的注冊中心,并且其本身也是一個微服務
特點
1.可以對所有微服務信息存儲,IP地址端口號,名稱
2.查詢可用的微服務和對應的網絡地址進行服務的調用(進網吧分配機子)
3.對微服務進行心跳檢測,如果某個微服務宕機,從注冊表中移除
常用的注冊中心
Eureka
Consul
Zookeeper
Nacos
CAP定理:不能同時滿足以下三原則
C:一致性,數據的一致,所有節點的數據副本都是最新的
A:可用性,一定時間內保證獲取數據,即使某些結點發生故障,及時反饋
P:分區容錯性,必須滿足的條件
為了保證一致性,所有數據一致,發生網絡故障就需要阻塞相關資源,也滿足不了可用性,因此兩者矛盾
Eureka:
1.向服務端和客戶端分別引入各自依賴
2.配置文件中向注冊中心中注冊
3.服務端取消迫切注冊,取消自身注冊
4.客戶端需要加上@EanableEurakaClient注解,表示是客戶端
5.服務端有自我保護機制,心跳檢測,90秒是否在線,也可以關閉
6.不能保證數據一致性,逐漸被淘汰
Consul:
1.用于代替Eureka,它保證了一致性和分區容錯性?
2.啟動consul,默認端口是8500
3.注冊客戶端,引入consul依賴同時引入健康檢查依賴,否則即使服務可用,consul也獲取不到狀態
微服務中模塊間相互調用
1.必須在注冊中心注冊過
2.使用RestTemplate調用接口
3.服務間其實是跨域請求,但是因為在注冊中心注冊過,可以接受請求
負載均衡
將請求通過特定的算法(默認是輪詢策略),均勻的分配到服務器集群中,優化資源的使用,提升可靠性
OpenFeign
一種解決集群負載均衡的技術,相較于RestTemlpate + Ribbon這種實現,它不需要具體的發送http請求,簡化操作
1.引入OpenFeign依賴,在主啟動類加上@EnableFeignClients注解
2.創建接口,在接口上加上@FeignClient注解,寫上集群的名稱
3.創建請求方法,與對應請求服務的路徑一致,之后在其他服務中注入該接口調用方法
4.get請求傳參即使只有一個參數也要加上@RequstParam注解