目錄
1.前言
1.微服務拆分及遠程調用
3.EureKa注冊中心
遠程調用的問題
eureka原理
搭建EureKaServer
服務注冊
服務發現
1.前言
分布式架構:根據業務功能對系統進行拆分,每個業務模塊作為獨立項目開發,稱為服務。
優點:
- 降低服務耦合
- 有利于服務升級和擴展
微服務:是一種經過良好架構設計的分布式架構方案,微服務架構特征
- 單一職責:微服務拆分粒度更小,每個服務都對應唯一的業務能力,做到單一職責,避免重復業務開發
- 面向服務:微服務對外暴露業務接口
- 自治:團隊獨立,技術獨立,數據獨立,部署獨立
- 隔離性強:服務調用做好隔離,容錯,降級,避免出現級聯問題
微服務技術對比:
SpringCloud
SpringCloud是目前國內使用最廣泛的微服務框架。
SpringCloud集成了各種微服務功能組件,并基于SpringBoot實現了這些組件的自動裝配,從而提供了良好的開箱即用體驗:
1.微服務拆分及遠程調用
微服務拆分注意事項
- 1.不同微服務,不要重復開發相同業務
- 2.微服務數據獨立,不要訪問其它微服務的數據庫
- 3.微服務可以將自己的業務暴露為接口,供其他微服務調用
案列:
需求:根據訂單id查詢訂單的同時,把訂單所屬的用戶信息一起返回
遠程調用方式分析:
1)注冊RestTemplate
在order-service的OrderApplication中注冊RestTemplate
要想實現一次跨服務的調用其實就是發送一次http請求
提供者和消費者:
服務提供者:一次業務中,被其它微服務調用的服務。(提供接口給其它微服務)
服務消費者:一次業務中,調用其它微服務的服務。(調用其它微服務提供的接口)
3.EureKa注冊中心
遠程調用的問題
硬編碼問題
eureka原理
Eureka架構中,微服務角色有兩類:
EureKaServer:服務端,注冊中心
記錄服務信息
心跳監控
EurekaClient:客戶端
消費者如何獲取服務提供者具體信息?
- 服務提供者啟動時向eureka注冊自己的信息
- eureka保存這些信息
- 消費者根據服務名稱向eureka拉取提供者信息
如果有多個服務提供者,消費者如何選擇?
- 服務消費者利用負載均衡算法,從服務列表中挑選一個
消費者如何感知服務提供者健康狀態?
- 服務提供者每個30秒向EurekaServer發送心跳請求,報告健康狀態
- eureka會更新記錄服務列表信息,心跳不正常就會被剔除
- 消費者就可以拉取到最新的信息
搭建EureKaServer
搭建EureKaServer服務步驟如下:
1.創建項目,引入spring-cloud-starter-netflix-eureka-server的依賴
2.編寫啟動類,添加@EnableEurekaServer注解
3.添加application.yml文件,編寫下面配置
服務注冊
將user-service服務注冊到EurekaServer步驟如下:
1.在user-service項目中引入spring-cloud-starter-netflix-eureka-client的依賴
2.在application.yml文件,編寫下面配置:
如果我們想啟動多個實例,模擬多實例部署,但為了避免端口沖突,需要修改端口設置:
服務發現
服務拉取是基于服務名稱獲取服務列表,然后在對服務列表做負載均衡
1.修改OrderService的代碼,修改訪問url路徑,用服務名代替ip,端口:
2.在order-service項目的啟動類OrderApplication中的RestTemplate添加負載均衡注解: