微服務-初級篇
- 認識微服務
- 1.1 單體架構
- 1.2 分布式架構
- 1.3 微服務
- SpringCloud
- 2.1 了解
- 2.2 服務拆分原則
- 2.3 服務拆分效果
- Nacos注冊中心
- 3.1 認識和安裝Nacos
- 3.1.1 Nacos下載
- 3.1.2 Nacos安裝
- 3.2 服務注冊到Nacos
- Feign遠程調用
- 4.1 Feign引入
- 4.2 Feign配置
認識微服務
1.1 單體架構
特點:
- 共用一個啟動類
- 共用一個端口號
- 共用一個數據庫
優點:
- 架構簡單
- 部署成本低
- 開發成本低
缺點:
- 耦合度高(維護困難、升級困難)
- 升級困難
- 維護成本高
1.2 分布式架構
優點:
- 降低服務耦合
- 有利于服務升級和拓展
- 方便升級改造
- 維護成本低
缺點:
- 架構復雜度高
- 開發困難
1.3 微服務
特征:
- 單一職責:微服務拆分粒度更小,每一個服務都對應唯一的業務能力,做到單一職責
- 自治:團隊獨立、技術獨立、數據獨立,獨立部署和交付
- 面向服務:服務提供統一標準的接口,與語言和技術無關
- 隔離性強:服務調用做好隔離、容錯、降級,避免出現級聯問題
以上四個關于微服務的特征能夠進一步降低服務之間的耦合度,提供服務的獨立性和靈活性。做到高內聚,低耦合。
SpringCloud
2.1 了解
SpringCloud是目前國內使用最廣泛的微服務框架,官網地址: https://spring.io/projects/spring-cloud
SpringCloud集成了各種微服務功能組件,并基于SpringBoot實現了組件的自動裝配。
常見的組件包括:
基于Spring Cloud分布式微服務的優點主要包括:
-
彈性和可擴展性:Spring Cloud提供了各種解決方案,如服務注冊與發現、負載均衡、斷路器、限流等,使得微服務架構更加彈性和可擴展。可以根據實際需求動態增加或減少微服務實例,根據流量和負載情況自動調整服務的規模。
-
高可用性:通過使用分布式架構,將應用程序拆分為多個小型服務,每個服務都有自己的獨立部署和運行環境。當一個服務發生故障時,其他服務仍然可以繼續運行,確保整個系統的高可用性。
-
增強開發效率:Spring Cloud提供了一系列的開發工具和解決方案,如服務注冊與發現(Eureka)、配置中心(Config)、服務網關(Zuul)等。這些工具能夠簡化分布式系統的開發和部署過程,提高開發效率。
-
系統解耦:采用微服務架構可以將一個大型復雜系統拆分為多個小型服務,每個服務只關注自己的業務邏輯,降低了系統的復雜性,并使得各個服務之間的開發、測試和維護更加獨立和靈活。
-
技術棧靈活性:Spring Cloud是一個開放的框架,可以與各種技術組件和平臺集成,如Netflix的Eureka、Ribbon、Hystrix等,使得開發團隊可以根據具體需求選擇合適的技術棧來搭建分布式系統。
總的來說,基于Spring Cloud分布式微服務可以提供彈性和可擴展性、高可用性、增強開發效率、系統解耦和技術棧靈活性等優點,使得開發和維護分布式系統更加方便和可靠。
2.2 服務拆分原則
原則:
- 不同微服務,不要重復開發相同業務
- 微服務數據獨立,不要訪問其它微服務的數據庫
- 微服務可以將自己的業務暴露為接口,供其它微服務調用
2.3 服務拆分效果
Nacos注冊中心
3.1 認識和安裝Nacos
3.1.1 Nacos下載
Nacos官方地址:https://nacos.io/zh-cn/docs/quick-start.html
3.1.2 Nacos安裝
具體安裝教程可參考: 阿里Nacos系列——Nacos安裝教程(帶圖–手把手教學
3.2 服務注冊到Nacos
1)引入依賴
在父工程的pom文件中的中引入SpringCloudAlibaba的依賴:
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2.2.6.RELEASE</version><type>pom</type><scope>import</scope>
</dependency>
在子工程的pom文件中引入nacos-discovery依賴:
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><version>4.0.2</version>
</dependency>
2)配置nacos地址
在上圖標注的application.yml中添加nacos地址:
spring:cloud:nacos:discovery:server-addr: localhost:8848username: nacospassword: nacos
Feign遠程調用
4.1 Feign引入
Feign是一個聲明式的http客戶端,官方地址:
https://github.com/OpenFeign/feign
4.2 Feign配置
1)引入依賴
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId><version>4.0.2</version>
</dependency>
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId><version>4.0.2</version>
</dependency>
2)在啟動類上添加注解
@EnableFeignClients // 開啟fegin調用
3)編寫Feign的客戶端
新建一個interface
@FeignClient("type-service") // 被調用者服務的配置文件里面的名字
public interface TypeFeign {@RequestMapping("type/findTypeAll") // 注意:路徑補全List<Type> findTypeAll();
}
4)優化
將Feign接口抽取到統一的模塊中,這樣可以降低服務之間的耦合性
5)小結
使用Feign的步驟:
① 引入依賴
② 添加@EnableFeignClients注解
③ 編寫FeignClient接口