Spring Cloud 入門培訓(xùn)課程之運(yùn)維_第1頁
Spring Cloud 入門培訓(xùn)課程之運(yùn)維_第2頁
Spring Cloud 入門培訓(xùn)課程之運(yùn)維_第3頁
Spring Cloud 入門培訓(xùn)課程之運(yùn)維_第4頁
Spring Cloud 入門培訓(xùn)課程之運(yùn)維_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

SpringCloud入門-運(yùn)維技術(shù)能力中心尹毅03-284.服務(wù)鏈路追蹤和分析(Sleuth和zipkin)5.SpringBootAdmin的使用2.Hystrix監(jiān)控的搭建和使用3.分布式配置中心ConfigServer的搭建和使用1.微服務(wù)開發(fā)中的運(yùn)維

3微服務(wù)開發(fā)中的運(yùn)維/4微服務(wù)開發(fā)中的運(yùn)維微服務(wù)的分布式部署給運(yùn)維帶來很大的難度和挑戰(zhàn),一般有如下問題:問題查找難(服務(wù)之間調(diào)用的問題)分散的數(shù)據(jù)管理難(日志數(shù)據(jù)、配置文件等)......應(yīng)對上述問題的對策:跟蹤與監(jiān)控聚合數(shù)據(jù)、統(tǒng)一管理......

5Hystrix監(jiān)控的搭建和使用/6

創(chuàng)建Hystrix監(jiān)控創(chuàng)建一個(gè)SpringBoot工程(項(xiàng)目名demo.service.monitor),選擇模塊Hystrix、HystrixDashboard、Turbine用@EnableDiscoveryClient、@EnableHystrixDashboard、@EnableTurbine注解應(yīng)用主類在perties配置文件中增加如下信息:

=service-monitor

server.port=5001eureka.client.serviceUrl.defaultZone=http://peer1:1001/eureka/turbine.app-config=service-consumerturbine.cluster-name-expression="default"bine-host-port=true啟動工程后,訪問http://localhost:5001/hystrix/7Hystrix監(jiān)控架構(gòu)和配置參數(shù)說明部分配置參數(shù)說明:

turbine.app-config參數(shù)指定了需要收集監(jiān)控信息的服務(wù)名;turbine.cluster-name-expression參數(shù)指定了集群名稱為default,當(dāng)我們服務(wù)數(shù)量非常多的時(shí)候,可以啟動多個(gè)Turbine服務(wù)來構(gòu)建不同的聚合集群,而該參數(shù)可以用來區(qū)分這些不同的聚合集群,同時(shí)該參數(shù)值可以在Hystrix儀表盤中用來定位不同的聚合集群,只需要在HystrixStream的URL中通過cluster參數(shù)來指定;bine-host-port參數(shù)設(shè)置為true,可以讓同一主機(jī)上的服務(wù)通過主機(jī)名與端口號的組合來進(jìn)行區(qū)分,默認(rèn)情況下會以host來區(qū)分不同的服務(wù),這會使得在本地調(diào)試的時(shí)候,本機(jī)上的不同服務(wù)聚合成一個(gè)服務(wù)來統(tǒng)計(jì)。/8Hystrix監(jiān)控的使用Hystrix共支持三種不同的監(jiān)控方式:默認(rèn)的集群監(jiān)控:通過http://turbine-hostname:port/turbine.stream開啟指定的集群監(jiān)控:通過http://turbine-hostname:port/turbine.stream?cluster=[clusterName]開啟單體應(yīng)用的監(jiān)控:通過http://hystrix-app:port/hystrix.stream開啟/9Hystrix監(jiān)控的使用監(jiān)控頁面上主要元素的具體含義:實(shí)心圓:它通過顏色的變化代表了實(shí)例的健康程度,它的健康度從綠色、黃色、橙色、紅色遞減。該實(shí)心圓的大小也會根據(jù)實(shí)例的請求流量發(fā)生變化,流量越大該實(shí)心圓就越大曲線:用來記錄2分鐘內(nèi)流量的相對變化,我們可以通過它來觀察到流量的上升和下降趨勢其他一些數(shù)量指標(biāo)如圖所示

10分布式配置中心ConfigServer的搭建和使用/11

SpringCloudConfig簡介SpringCloudConfig是SpringCloud團(tuán)隊(duì)創(chuàng)建的一個(gè)全新項(xiàng)目,用來為分布式系統(tǒng)中的微服務(wù)應(yīng)用提供集中化的外部配置支持,它分為服務(wù)端與客戶端兩個(gè)部分:服務(wù)端稱為分布式配置中心,它是一個(gè)獨(dú)立的微服務(wù)應(yīng)用,用來連接配置倉庫并為客戶端提供獲取配置信息、加密/解密信息等訪問接口客戶端則是微服務(wù)架構(gòu)中的各個(gè)微服務(wù)應(yīng)用,它們通過指定的配置中心來管理應(yīng)用的配置信息,并在啟動的時(shí)候從配置中心獲取和加載配置信息配置中心默認(rèn)采用Git來存儲配置信息,所以使用SpringCloudConfig構(gòu)建的配置服務(wù)器,天然就支持對微服務(wù)應(yīng)用配置信息的版本管理可以通過Git客戶端工具來方便的管理和訪問配置內(nèi)容。它也提供了對其他存儲方式的支持,比如:SVN倉庫、本地化文件系統(tǒng)/12

SpringCloudConfig架構(gòu)和高可用配置客戶端不是采用SpringCloud技術(shù)的,需要為ConfigServer集群搭建服務(wù)端負(fù)載均衡器(比如:Nginx)配置客戶端是采用SpringCloud技術(shù)的,可以利用Ribbon提供的客戶端負(fù)載均衡對ConfigServer進(jìn)行訪問,不需要另外搭建服務(wù)端負(fù)載均衡器/13

高可用服務(wù)配置中心ConfigServer的搭建創(chuàng)建一個(gè)SpringBoot工程(項(xiàng)目名demo.config.server),選擇模塊Config

Server、EurekaDiscovery用@EnableConfigServer和@EnableEurekaClient注解應(yīng)用主類在perties配置文件中增加如下信息,配置文件存儲在本地文件:

=config-serverserver.port=6001eureka.client.serviceUrl.defaultZone=http://peer1:1001/eureka/files.active=native

#spring.cloud.config.server.native.search-locations=D:/LocalConfigProperties

在\src\main\resources目錄,增加service-consumer.properties文件:

config.demo=helloworld!/14

配置信息的加密提供了對屬性進(jìn)行加密解密的功能,以保護(hù)配置文件中的信息安全:在屬性值前使用{cipher}前綴來標(biāo)注該內(nèi)容是一個(gè)加密值,當(dāng)微服務(wù)客戶端來加載配置時(shí),配置中心會自動的為帶有{cipher}前綴的值進(jìn)行解密配置中心的JRE環(huán)境需要安裝不限長度的JCE版本(UnlimitedStrengthJavaCryptographyExtension)。雖然,JCE功能在JRE中自帶,但是默認(rèn)使用的是有長度限制的版本??梢詮腛racle的官方網(wǎng)站中下載(搜索:JCEJDK版本號),將local_policy.jar和US_export_policy.jar兩個(gè)文件復(fù)制到$JAVA_HOME/jre/lib/security目錄下,覆蓋原來的默認(rèn)內(nèi)容。/encrypt/status:查看加密功能狀態(tài)的端點(diǎn)/encrypt:對POST請求的body內(nèi)容進(jìn)行加密的端點(diǎn)/decrypt:對POST請求的body內(nèi)容進(jìn)行解密的端點(diǎn)通過encrypt.key屬性在配置文件perties中直接指定密鑰信息(對稱性密鑰)配置中心不僅可以使用對稱性加密,也可以使用非對稱性加密(比如:RSA密鑰對),用%JAVA_HOME%\bin\keytool.exe生成秘鑰,配置文件中用encrypt.key-store開頭的屬性進(jìn)行配置。/15

配置信息的熱刷新增加一些內(nèi)容和操作以實(shí)現(xiàn)配置的熱刷新:demo.service.consumer項(xiàng)目的pom.xml中新增spring-cloud-starter-config和spring-boot-starter-actuator依賴,其中actuator包含了/refresh刷新API <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency>重新啟動demo.service.consumer修改configserver的配置文件,檢查http://localhost:3001/testconfig,并沒有更新通過POST請求發(fā)送到http://localhost:3001/refresh,再檢查http://localhost:3001/testconfig,可以發(fā)現(xiàn)已經(jīng)刷新上述方法只能刷新指定服務(wù)實(shí)例的配置,無法同步刷新多個(gè)實(shí)例/16

配置信息的同時(shí)刷新機(jī)制消息總線123333刷新三階段:給ConfigServer發(fā)刷新POST/bus/refreshConfigServer給消息總線發(fā)配置變更消息各配置客戶端接收消息總線的配置刷新消息123/17

配置信息的同時(shí)熱刷新環(huán)境準(zhǔn)備:安裝kafka,/downloads下載,解壓縮,cd到bin\windows目錄,運(yùn)行zookeeper-server-start../../config/perties啟動Zookeeper服務(wù),運(yùn)行kafka-server-start../../config/perties啟動kafka服務(wù)在demo.config.centre的pom.xml中新增spring-boot-starter-actuator依賴: <dependency> <groupId>org.springframework.boot</groupId><artifactId>spring-boot-actuator</artifactId> </dependency>在demo.config.centre和demo.service.consumer項(xiàng)目的pom.xml中新增如下依賴: <dependency> <groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bus-kafka</artifactId> </dependency>啟動各服務(wù),修改configserver的配置文件,檢查http://localhost:3001/testconfig,并沒有更新通過POST請求發(fā)送到http://localhost:6001/bus/refresh,再檢查http://localhost:3001/testconfig和http://localhost:3002/testconfig,可以發(fā)現(xiàn)都已經(jīng)刷新

18服務(wù)鏈路追蹤和分析(Sleuth和zipkin)/19

分布式服務(wù)跟蹤原理主要包括下面兩個(gè)關(guān)鍵點(diǎn):為了實(shí)現(xiàn)請求跟蹤,當(dāng)請求發(fā)送到分布式系統(tǒng)的入口端點(diǎn)時(shí),只需要服務(wù)跟蹤框架為該請求創(chuàng)建一個(gè)唯一的跟蹤標(biāo)識,同時(shí)在分布式系統(tǒng)內(nèi)部流轉(zhuǎn)的時(shí)候,框架始終保持傳遞該唯一標(biāo)識,直到返回給請求方為止,這個(gè)唯一標(biāo)識就是前文中提到的TraceID。通過TraceID的記錄,我們就能將所有請求過程日志關(guān)聯(lián)起來。為了統(tǒng)計(jì)各處理單元的時(shí)間延遲,當(dāng)請求達(dá)到各個(gè)服務(wù)組件時(shí),或是處理邏輯到達(dá)某個(gè)狀態(tài)時(shí),也通過一個(gè)唯一標(biāo)識來標(biāo)記它的開始、具體過程以及結(jié)束,該標(biāo)識就是我們前文中提到的SpanID,對于每個(gè)Span來說,它必須有開始和結(jié)束兩個(gè)節(jié)點(diǎn),通過記錄開始Span和結(jié)束Span的時(shí)間戳,就能統(tǒng)計(jì)出該Span的時(shí)間延遲,除了時(shí)間戳記錄之外,它還可以包含一些其他元數(shù)據(jù),比如:事件名稱、請求信息等。Sleuth會在該請求的Header中增加實(shí)現(xiàn)跟蹤需要的重要信息,主要有:X-B3-TraceId:一條請求鏈路(Trace)的唯一標(biāo)識,必須值X-B3-SpanId:一個(gè)工作單元(Span)的唯一標(biāo)識,必須值X-B3-ParentSpanId::標(biāo)識當(dāng)前工作單元所屬的上一個(gè)工作單元,RootSpan(請求鏈路的第一個(gè)工作單元)的該值為空X-B3-Sampled:是否被抽樣輸出的標(biāo)志,1表示需要被輸出,0表示不需要被輸出X-Span-Name:工作單元的名稱/20

被跟蹤端代碼修改和演示在vider和demo.service.consumer項(xiàng)目的pom.xml中新增依賴: <dependency> <groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-sleuth</artifactId> </dependency>demo.service.consumer項(xiàng)目的控制臺打印信息:

INFO[service-consumer,38300205dbc9eb9c,38300205dbc9eb9c,false]demo.service.provider項(xiàng)目的控制臺打印信息:

INFO[service-provider,38300205dbc9eb9c,571497adfcc07831,false]上述日志信息中的這些元素正是實(shí)現(xiàn)分布式服務(wù)跟蹤的重要組成部分,每個(gè)值的含義如下(以demo.service.provider的為例):第一個(gè)值:service-provider,它記錄了應(yīng)用的名稱,也就是perties中參數(shù)配置的屬性。第二個(gè)值:38300205dbc9eb9c,Sleuth生成的一個(gè)ID,稱為TraceID,它用來標(biāo)識一條請求鏈路。一條請求鏈路中包含一個(gè)TraceID,多個(gè)SpanID。第三個(gè)值:571497adfcc07831,Sleuth生成的另外一個(gè)ID,稱為SpanID,它表示一個(gè)基本的工作單元,比如:發(fā)送一個(gè)HTTP請求。第四個(gè)值:false,表示是否要將該信息輸出到Zipkin等服務(wù)中來收集和展示。/21

收集請求鏈路的跟蹤數(shù)據(jù)并分析:ZipkinZipkin是Twitter的一個(gè)開源項(xiàng)目,它參考GoogleDapper項(xiàng)目實(shí)現(xiàn)??梢允褂盟鼇硎占鱾€(gè)服務(wù)器上請求鏈路的跟蹤數(shù)據(jù),它也提供了方便的UI組件來幫助我們直觀的搜索跟蹤信息和分析請求鏈路明細(xì)。Zipkin支持按HTTP和消息中間件來收集數(shù)據(jù),但因?yàn)榍懊鏋榱藢?shí)現(xiàn)配置同步刷新已經(jīng)引入了消息中間件,所以只能選消息中間件來收集。在demo.service.consumer和demo.service.provider的pom.xml中引入spring-cloud-sleuth-zipkin依賴。創(chuàng)建一個(gè)SpringBoot工程(項(xiàng)目名demo.zipkin.server),在POM文件中增加如下依賴:<dependency> <groupId>io.zipkin.java</groupId> <artifactId>zipkin-autoconfigure-ui</artifactId></dependency><dependency> <groupId>io.zipkin.java</groupId> <artifactId>zipkin-server</artifactId></dependency><dependency> <groupId>io.zipkin.java</groupId> <artifactId>zipkin-autoconfigure-collector-kafka10</artifactId> <version>2.8.4</version></dependency>用@EnableZipkinServer注解應(yīng)用主類,在demo.zipkin.server的配置文件中增加如下信息:

server.port=7001zipkin.collector.kafka.bootstrap-servers=:9092

將相關(guān)服務(wù)都啟動起來,并訪問http://localhost:7001/22服務(wù)跟蹤的抽樣收集分析系統(tǒng)在收集跟蹤信息的時(shí)候,需要收集多少量的跟蹤信息才合適呢?理論上來說,我們收集的跟蹤信息越多就可以更好的反映出系統(tǒng)的實(shí)際運(yùn)行情況,并給出更精準(zhǔn)的預(yù)警和分析但是在高并發(fā)的分布式系統(tǒng)運(yùn)行時(shí),大量的請求調(diào)用會產(chǎn)生海量的跟蹤日志信息,如果收集過多的跟蹤信息將會對我們整個(gè)分布式系統(tǒng)的性能造成一定的影響Sleuth中采用了抽樣收集的方式來為跟蹤信息打上收集標(biāo)記,也就是之前在日志信息中看到的第四個(gè)boolean類型的值,它代表了該信息是否要被后續(xù)的跟蹤信息收集器獲取和存儲在Sleuth中的抽樣收集策略是通過Sampler接口實(shí)現(xiàn)的,它的定義如下(要定制自己的抽樣收集策略,需要實(shí)現(xiàn)該接口):publicinterfaceSampler{booleanisSampled(Spanspan);}默認(rèn)情況下,Sleuth會使用PercentageBasedSampler實(shí)現(xiàn)的抽樣策略,以請求百分比的方式配置和收集跟蹤信息,可在perties中配置下面的參數(shù)對其百分比值進(jìn)行設(shè)置,它的默認(rèn)值為0.1,代表收集10%的請求跟蹤信息:

spring.sleuth.sampler.percentage=1

23SpringBootAdmin的使用/24

SpringBootAdmin簡介SpringBootAdmin是一個(gè)用來管理和監(jiān)控SpringBoot應(yīng)用的項(xiàng)目,這些應(yīng)用可以是通過管理客戶端(SpringBootAdminClient)用HTTP進(jìn)行注冊的應(yīng)用,或者是通過SpringCloud的服務(wù)注冊機(jī)制注冊的應(yīng)用。/25SpringBootAdmin的使用創(chuàng)建一個(gè)SpringBoot工程(項(xiàng)目名demo.

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論