javascript
菜鸟Spring Cloud入门教程
1、什么是Spring Cloud?
Spring cloud流應(yīng)用程序啟動(dòng)時(shí)基于Spring Boot的Spring集成應(yīng)用程序,提供與外部系統(tǒng)的集成。Spring Cloud Task,一個(gè)生命期短暫的微服務(wù)框架,用于快速構(gòu)建執(zhí)行有限數(shù)據(jù)處理的應(yīng)用程序。
2、使用Spring Cloud的優(yōu)勢?
1、易于開發(fā)和維護(hù)
2、單個(gè)微服務(wù)啟動(dòng)較快
3、技術(shù)棧不受限
4、按需伸縮
3、Spring Cloud的劣勢
1、運(yùn)維要求較高
2、分布式固有的復(fù)雜性
3、接口調(diào)整成本高(修改某一微服務(wù)的API,所有引用都要調(diào)整)
4、重復(fù)勞動(dòng)(某一個(gè)功能未達(dá)到微服務(wù)的程度,各個(gè)服務(wù)會(huì)開發(fā)此功能。方案是公共組件,但多語言環(huán)境不一定適用)
4、Spring Cloud設(shè)計(jì)原則
1、單一職責(zé)原則
2、服務(wù)自治原則
3、輕量級通信機(jī)制
4、微服務(wù)粒度
5、Spring Cloud的5個(gè)常用組件
Netflix Eureka - 服務(wù)發(fā)現(xiàn)
Netflix Ribbon - 客戶端負(fù)載均衡
Netflix Hystrix - 斷路器
Netflix Zuul - 服務(wù)網(wǎng)關(guān)
Spring Cloud Config - 分布式配置
Netflix Eureka
作用:實(shí)現(xiàn)服務(wù)治理(服務(wù)注冊和發(fā)現(xiàn))
說明:Spring Cloud Eureka是Spring Cloud Netflix項(xiàng)目下的服務(wù)治理模塊。有兩個(gè)組件組成:Eureka服務(wù)端和Eureka客戶端。
Eureka服務(wù)端作用服務(wù)注冊中心,支持集群部署。
Eureka客戶端是一個(gè)java客戶端,用來處理服務(wù)注冊和發(fā)現(xiàn)。
原理:在應(yīng)用啟動(dòng)時(shí),Eureka客戶端向服務(wù)端注冊自己的服務(wù)信息,同時(shí)將服務(wù)端的服務(wù)信息緩存到本地,客戶端會(huì)和服務(wù)端周期性買的進(jìn)行心跳交互,以便更新服務(wù)租約和服務(wù)信息。
Netflix Ribbon
作用:Ribbon 主要提供客戶側(cè)的軟件負(fù)載均衡算法。
說明:Spring Cloud Ribbon是一個(gè)基于HTTP和TCP的客戶端負(fù)載均衡工具,它基于Netflix Ribbon實(shí)現(xiàn)。通過Spring Cloud的封裝,可以輕松的將面向服務(wù)的REST模板請求自動(dòng)轉(zhuǎn)換成客戶端負(fù)載均衡的服務(wù)調(diào)用。
關(guān)鍵點(diǎn)就是將外界的rest調(diào)用,根據(jù)負(fù)載均衡策略轉(zhuǎn)換為微服務(wù)的調(diào)用。Ribbon有比較多的負(fù)載均衡策略。
Netflix Hystrix
作用:斷路器,保護(hù)系統(tǒng),控制故障范圍。
說明:為了保證其高可用,單個(gè)服務(wù)通常會(huì)集群部署。由于網(wǎng)絡(luò)原因或者自身的原因,服務(wù)并不能保證100%可用,如果單個(gè)服務(wù)器出現(xiàn)問題,調(diào)用這個(gè)服務(wù)就會(huì)出現(xiàn)線程阻塞,此時(shí)若大量的請求涌入,Servlet容器的線程資源會(huì)被消耗完畢,導(dǎo)致服務(wù)癱瘓。服務(wù)于服務(wù)之間的依賴性,故障會(huì)傳播,會(huì)對整個(gè)微服務(wù)系統(tǒng)造成災(zāi)難性的嚴(yán)重后果,這就是服務(wù)器故障的“”“雪崩”效應(yīng)。
Netflix Zuul
作用:api網(wǎng)關(guān),路由,負(fù)載均衡等多種作用
說明:類似nginx,方向代理的功能,不過netflix自己增加了一些配合其他組件的特性。
在微服務(wù)架構(gòu)中,后端服務(wù)往往不直接開發(fā)給調(diào)用端,而是通過一個(gè)api網(wǎng)關(guān)根據(jù)請求的url,路由到相應(yīng)的服務(wù)。當(dāng)添加API網(wǎng)關(guān)后,在第三方調(diào)用端和服務(wù)提供方之間就創(chuàng)建了一面墻,在這面墻直接與調(diào)用方通信進(jìn)行權(quán)限控制,后將請求均衡分發(fā)給后臺(tái)服務(wù)端。
Spring Cloud Config
作用:配置管理
說明:Spring Cloud Config提供服務(wù)端和客戶端。服務(wù)器存儲(chǔ)后端的默認(rèn)實(shí)現(xiàn)使用git,因此它輕松支持標(biāo)簽的配置環(huán)境,可以訪問作用于管理內(nèi)部的各種工具。這個(gè)是靜態(tài)的,得配合Spring Cloud Bus實(shí)現(xiàn)動(dòng)態(tài)的配置更新。
6、Eureka和Zookeeper區(qū)別
eureka基于AP。
zookeeper基于CP。
由于作為注冊中心可用性的需求要高于一致性,所以eureka貌似要比zookeeper更合理一些。
7、搭建Spring Cloud項(xiàng)目
1、新建一個(gè)maven項(xiàng)目,項(xiàng)目名為demo-spring-cloud,此項(xiàng)目作為一個(gè)總項(xiàng)目,后面在此項(xiàng)目下新建五個(gè)子模塊。
demo-spring-cloud項(xiàng)目的pom文件如下
spingcloud中針對依賴包的版本并不像傳統(tǒng)項(xiàng)目一樣使用的是數(shù)字形式定義,反而是使用了一系列英國的地鐵或者城市名字來定義,springcloud使用了springboot,其中對于的版本如下
Release Train Boot Version
Greenwich 2.1.x
Finchley 2.0.x
Edgware 1.5.x
Dalston 1.5.x
2、 新建一個(gè)子模塊demo-common,簡歷一個(gè)公共模塊(maven項(xiàng)目),這個(gè)模塊的主要功能是提供公共處理的工具類、實(shí)體、接口等。
pom文件如下,在pom文件中為此模塊添加上版本信息
3、新建一個(gè)子模塊demo-provider-product,作為服務(wù)的提供者此模塊使用mybatis對數(shù)據(jù)庫進(jìn)行操作,pom文件如下,在pom文件中引入了demo-common模塊,并為demo-provider-product模塊提供了一個(gè)版本號。
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>demo-spring-cloud</artifactId><groupId>com.nelson.org</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>demo-provider-product</artifactId><version>1.0.0</version><dependencies><dependency><groupId>com.nelson.org</groupId><artifactId>demo-common</artifactId><version>1.0.0</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId></dependency></dependencies></project>4、建立一個(gè)子模塊demo-consumer作為服務(wù)的消費(fèi)者
這個(gè)模塊作為服務(wù)的消費(fèi)方,用于調(diào)用前面的demo-provider-product服務(wù)
pom文件如下,此模塊中也引入了demo-common模塊
啟動(dòng)demo-provider-product和demo-consumer調(diào)用測試。
總結(jié)
以上是生活随笔為你收集整理的菜鸟Spring Cloud入门教程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring 菜鸟教程 Introspe
- 下一篇: Spring新手教程