您好,登錄后才能下訂單哦!
怎樣解析微服務架構SpringCloud,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
努力,不是為了要感動誰,也不是要做給某些人看,而是有能力跳出自己厭惡的圈子,并擁有自己選擇的權力,用自己喜歡的方式,過一生。
微服務架構 (一般采用AP架構)
A:服務可用性
P:分區(qū)容錯
C:數(shù)據(jù)的強一致性
領域驅動設計:通過代碼和數(shù)據(jù)分析找到合理的切分點,并通過數(shù)據(jù)分析來判斷服務的劃分邊界和劃分粒度。
微服務核心:Docker為容器中心,DevOps是一種部署手段或理念(DevOps就是開發(fā)(Development)和運維(Operations)這兩個領域的合并)
微服務架構中的三大難題:服務故障的傳播性、服務的劃分、分布式事務
雪崩效應:服務不可用導致系統(tǒng)處于癱瘓狀態(tài)(通過熔斷器解決)
微服務具備功能:
服務的注冊與發(fā)現(xiàn)
服務的負載均衡
服務的容錯
服務網(wǎng)關
服務配置中心
服務鏈路追蹤
與其他服務框架比較
Dubbo:非常優(yōu)秀的服務治理和服務調(diào)用框架
Kubernets:通過容器編排實現(xiàn)所有的微服務功能,更像一個平臺
Maven配置
.settings.xml 本地倉庫目錄、遠程下載服務器(國外服務器、阿里云鏡像庫、自己搭建鏡像庫--Sonatype Nexus Repository Manager)
pom.xml文件:groupid、artifactid、version、parent、properties、dependencies、build
maven命令:mvn clean 、mvn package、mvn compile、mvn install
spring boot:
三大特點:自動配置、起步依賴、Actuator對運行狀況監(jiān)控
//@RestController = @Controller+@ResponseBody
@RestController
public class HelloController {
@RequestMapping("/hello")
public String index(){
return "hello spring boot";
}
}
springboot 配置文件
application.yml 配置文件裝載到配置類,自定義配置文件裝載到類
多個環(huán)境的配置文件:application-{profile}.properties test、dev、prod
需要在application.yml 中添加spring.profiles.active = dev 配置
Actuator監(jiān)控
配置application.yml 屬性支持 management.port 和management.security.enabled
http://localhost:9091/health 查看程序運行狀態(tài)
/beans 查看運行程序的bean
springboot 整合jpa、redis
springboot 整合swagger2,搭建RestfulAPI在線文檔,@API @ApiOperation(value="用戶列表",notes="用戶列表")
服務注冊和發(fā)現(xiàn)Eureka
Register Service:服務注冊中心
Provider Service 服務提供者 application server
Consumer Service 服務消費者 client sever
一些概念:
Register:服務注冊 -ip、duank、狀況、主頁訪問地址
Renew:服務續(xù)約 client默認情況下30秒發(fā)送一次心跳進行服務續(xù)約
Fetch Registries:獲取服務注冊列表信息 client 默認30更新一次
Cancel:服務下線
Eviction:服務剔除 ,默認client 90秒沒有發(fā)送續(xù)約服務,sever從服務列表剔除
構建高可用Eureka Server集群:application.yml 采用多profile格式,分host和端口
//*****************防止自己注冊自己************
eureka:
client:
register-with-eureka: false
fetch-registry: false
//******************
負載均衡Ribbon
負載均衡有兩種實現(xiàn)方式:一種是獨立進程單元,通過負載均衡轉發(fā)到不同的執(zhí)行單元上,eg:nginx,另一種是將負載均衡邏輯以代碼的方式封裝到服務消費者的客戶端上,eg:Ribbon
RestTemplate與Ribbon進行結合,在resttemplate bean 上加上@LoadBalanced注解就開啟了負載均衡功能
2個eureka-client 服務消費者根據(jù)Eureka 服務名訪問就可以
聲明書調(diào)用Feign
Feign目標是將java Http 客戶端調(diào)用過程變得簡單
@FeignClient(value="eureka-client",configuration=FeignConfig.class)
熔斷器Hystrix
具有自我修復功能
@EnableHystrix
@HystrixCommand(fallbackMethod=“hiError”)
Hystrix Dashboard 監(jiān)控
路由網(wǎng)關Spring Cloud zuul
所有api接口統(tǒng)一聚合
可以做用戶身份和權限認證
實時監(jiān)控、日志書瑞
流量監(jiān)控
Zuul包括4種過濾器:
PRE過濾器:請求到具體服務之前執(zhí)行,可以用于身份認證、參數(shù)驗證
ROUTING過濾器:請求路由到具體微服務實例時執(zhí)行
POST過濾器:請求已被路由到微服務后執(zhí)行的,可以用于收集日志信息、指標、響應
ERROR過濾器:在其他過濾器發(fā)生錯誤時執(zhí)行
路由分發(fā),支持版本號
路由上可以配置熔斷器
Zuul很容易實現(xiàn)負載均衡、智能路由、熔斷器,橫向擴展能力非常好
常用實現(xiàn)方式:1、不同渠道使用不同路由(app、web、其它)
2、與nginx相結合,暴露在最外面是Nginx 主從雙熱備份進行keepalive,Nginx通過某種策略將請求轉發(fā)到Zuul集群上,Zuul最終將請求分發(fā)到具體服務上。
配置中心Spring Cloud Config
@EnableConfigServer
1、從本地讀取配置文件
2、從git服務器讀取配置文件
使用Spring Cloud Bus 刷新配置,可選的消息代理組件包括RabbitMQ、AMQP和Kafka。
更改配置文件,Bus一個功能讓這個過程變得簡單,只需要向一個微服務實例發(fā)送一個Post請求,通過消息組件通知其他微服務實例重新拉取配置文件。
config-client,通過RabbitMQ實現(xiàn),需要搭建MQ服務,client主類添加@RefreshScope,通過Postman或者其它工具發(fā)送一個請求,http://ip:port/bus/refresh
服務鏈路追蹤SpringCloud Sleuth
使用Zipkin 提供UI展示,使用Http或者RabbitMQ傳遞鏈路數(shù)據(jù),使用mysql、ElasticSearch(適用于大數(shù)據(jù)量訪問,可以使用Kibana展示鏈路數(shù)據(jù))、Cassandra數(shù)據(jù)庫存儲鏈路數(shù)據(jù)
微服務監(jiān)控Spring Boot Admin
監(jiān)控Spring Cloud 微服務、聚合監(jiān)控微服務系統(tǒng)中熔斷器狀況、集成Security安全登錄界面
Spring Boot Security 安全組件
系統(tǒng)安全也需要考慮傳輸層和系統(tǒng)層,eg:https、服務器防火窗
同行優(yōu)秀安全框架 Apache Shiro ,一般用于單體應用。
用戶信息可以存內(nèi)存里也可以存數(shù)據(jù)庫
Spring Cloud OAuth3 保護微服務系統(tǒng)
OAuth3是一個標準授權協(xié)議
OAuth3認證流程,獲取Token過程,拿token去請求認證,認證通過走用戶權限
框架的缺陷是每次都要遠程請求auth-service驗證token的有效性
JWT(JSON WEB TOKEN)一種開放標準,數(shù)據(jù)體積非常小
應用場景:認證、信息交換,可以利用JWT實現(xiàn)單點登錄
大量api訪問日志可以使用ELK組件進行處理
關于怎樣解析微服務架構SpringCloud問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業(yè)資訊頻道了解更多相關知識。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。