版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
本文由簡(jiǎn)悅SimpRead轉(zhuǎn)碼,原文地址在開(kāi)始對(duì)SpringBoot服務(wù)進(jìn)行性能優(yōu)化之前,你需要做一些準(zhǔn)備,把SpringBoot服務(wù)的一些數(shù)據(jù)暴就需要把連接池的參數(shù)給暴露出來(lái)。我們這里采用的監(jiān)控工具是本文由簡(jiǎn)悅SimpRead轉(zhuǎn)碼,原文地址在開(kāi)始對(duì)SpringBoot服務(wù)進(jìn)行性能優(yōu)化之前,你需要做一些準(zhǔn)備,把SpringBoot服務(wù)的一些數(shù)據(jù)暴就需要把連接池的參數(shù)給暴露出來(lái)。我們這里采用的監(jiān)控工具是Prometheus,它是一個(gè)是時(shí)序數(shù)據(jù)庫(kù),能夠存儲(chǔ)我們的指標(biāo)。PrometheusSpringBootmaven<artifactId>spring-boot-starter-<artifactId>micrometer-registry-<artifactId>micrometer-然后,我們需要在perties啟動(dòng)之后,我們就可以通過(guò)訪問(wèn)監(jiān)控接口想要監(jiān)控業(yè)務(wù)數(shù)據(jù)也是比較簡(jiǎn)單的,你只需要注入一個(gè)MeterRegistry啟動(dòng)之后,我們就可以通過(guò)訪問(wèn)監(jiān)控接口想要監(jiān)控業(yè)務(wù)數(shù)據(jù)也是比較簡(jiǎn)單的,你只需要注入一個(gè)MeterRegistry碼:MeterRegistrypublicStringtest()"from","method",returntest_total{from="",method="test",}這里簡(jiǎn)單介紹一下流行的Prometheus監(jiān)控體系,Prometheus使用拉的方式獲取監(jiān)控?cái)?shù)據(jù),這個(gè)暴露數(shù)據(jù)的過(guò)程可以交給功能更加齊全的returntest_total{from="",method="test",}這里簡(jiǎn)單介紹一下流行的Prometheus監(jiān)控體系,Prometheus使用拉的方式獲取監(jiān)控?cái)?shù)據(jù),這個(gè)暴露數(shù)據(jù)的過(guò)程可以交給功能更加齊全的telegraf組件。如上圖,我們通常使用Gafana進(jìn)行監(jiān)控?cái)?shù)據(jù)的展示,使用AlertManager分的搭建工作不是我們的重點(diǎn),感興趣的同學(xué)可自行研究。下圖便是一張典型的監(jiān)控圖,可以看到RedisJava火焰圖火焰圖也可以用來(lái)分析Java應(yīng)用??梢詮膅ithub上下載async-pro?ler的壓縮包進(jìn)行相關(guān)操作。比/root/javaagentJava應(yīng)用,命令行如下:java-agentpath:/root/build/libasyncProfiler.so=start,svg,file=profile.svg-spring-petclinic-2.3.1.BUILD-java-agentpath:/root/build/libasyncProfiler.so=start,svg,file=profile.svg-spring-petclinic-2.3.1.BUILD-運(yùn)行一段時(shí)間后,停止進(jìn)程,可以看到在當(dāng)前目錄下,生成了po?le.svg覽器打開(kāi)的。明它可能是一個(gè)瓶頸。一層層向下瀏覽,即可找到需要優(yōu)化的目標(biāo)。對(duì)一個(gè)普通的Web如下圖,在瀏覽器中輸入相應(yīng)的域名,需要通過(guò)DNS解析到具體的IP地址上,為了保證高可用,我們的服務(wù)一般都會(huì)部署多份,然后使用Nginx做反向代理和負(fù)載均衡。NginxSpringBootSpringBoottomcatWebMVC模式,最終訪問(wèn)到我們的數(shù)HTTP下面我們舉例來(lái)看一下,哪些動(dòng)作能夠加快網(wǎng)頁(yè)的獲取。為了描述方便,我們僅討論HTTP1.1協(xié)議CDNCDN(ContentDelivery下面我們舉例來(lái)看一下,哪些動(dòng)作能夠加快網(wǎng)頁(yè)的獲取。為了描述方便,我們僅討論HTTP1.1協(xié)議CDNCDN(ContentDeliveryNetwork)分發(fā),甚至是一些常用的前端腳本、樣式、圖片等,都可以放到CDN上。CDN通常能夠加快這些文件的獲取,網(wǎng)頁(yè)加載也更加迅速。瀏覽器會(huì)判斷HTTP頭Cache-Control的內(nèi)容,用來(lái)決定是否使用瀏覽器緩存,這在管理一些靜態(tài)文件這個(gè)參數(shù)可以在Nginxlocation~*^.+\.(ico|gif|jpg|jpeg|png)$緩存1add_headerCache-Control:no-cache,max-減少每個(gè)頁(yè)面請(qǐng)求的域名數(shù)量,盡量保證在4個(gè)之內(nèi)。這是因?yàn)?,瀏覽器每次訪問(wèn)后端的資源,都需要先查詢一次DNS,然后找到DNS對(duì)應(yīng)的IP地址,再進(jìn)行真正的調(diào)用。DNS有多層緩存,比如瀏覽器會(huì)緩存一份、本地主機(jī)會(huì)緩存、ISP服務(wù)商緩存等。從DNS到IP地址的轉(zhuǎn)變,通常會(huì)花費(fèi)20-120ms的時(shí)間。減少域名的數(shù)量,可加快資源的獲取。開(kāi)啟開(kāi)啟gzip高傳輸效率。在nginxgzipgzip_min_lengthgzip_buffers4gzip_comp_levelgzip_http_versiongzip_typestext/plainapplication/javascript對(duì)JavaScript和CSS,甚至是HTML進(jìn)行壓縮。道理類(lèi)似,現(xiàn)在流行的前后端分離模式,一般都是對(duì)這使用長(zhǎng)連接可以顯著減少網(wǎng)絡(luò)交互,提高性能。nginx默認(rèn)開(kāi)啟了對(duì)客戶端的keepavlide對(duì)JavaScript和CSS,甚至是HTML進(jìn)行壓縮。道理類(lèi)似,現(xiàn)在流行的前后端分離模式,一般都是對(duì)這使用長(zhǎng)連接可以顯著減少網(wǎng)絡(luò)交互,提高性能。nginx默認(rèn)開(kāi)啟了對(duì)客戶端的keepavlidehttpkeepalive_timeout120skeepalive_requestsnginx與后端upstreamlocation~proxy_http_versionproxy_set_headerConnection如果你的項(xiàng)目并發(fā)量比較高,想要修改最大線程數(shù)、最大連接數(shù)等配置信息,可以通過(guò)自定義Web容@SpringBootApplication(proxyBeanMethods=publicclassAppimplementsWebServerFactoryCustomizer<ConfigurableServletWebServerFactory>{publicstaticvoidmain(String[]args)注意上面的代碼,我們?cè)O(shè)置了它的協(xié)議為org.apache.coyote.http11.Http11Nio2Protocol,意思就是開(kāi)啟了Nio2。這個(gè)參數(shù)在Tomcat8.0注意上面的代碼,我們?cè)O(shè)置了它的協(xié)議為org.apache.coyote.http11.Http11Nio2Protocol,意思就是開(kāi)啟了Nio2。這個(gè)參數(shù)在Tomcat8.0之后才有,開(kāi)啟之后會(huì)增加一部分性能。對(duì)比如下(測(cè)試項(xiàng)目代碼見(jiàn)spring-petclinic-SpringApplication.run(PetClinicApplication.class,publicvoidcustomize(ConfigurableServletWebServerFactoryfactory)f.addConnectorCustomizers(c->[root@localhostwrk2-master]#./wrk-t2-c100-d30s-Running30stest@2threadsand100mean4588.131ms,ratemean4647.927ms,[root@localhostwrk2-master]#./wrk-t2-c100-d30s-Running30stest@2threadsand100mean4588.131ms,ratemean4647.927ms,rate +/-6471Socket0,0,0,Nio2[root@localhostwrk2-master]#./wrk-t2-c100-d30s-R2000Running30stest@2threadsand100Threadcalibration:meanlat.:4358.805ms,ratesamplinginterval:Threadcalibration:meanlat.:4622.087ms,ratesamplinginterval:Thread +/-7469Socket0,0,0,timeouttomcat7469Socket0,0,0,timeouttomcatundertow。undertowWeb容器,更加輕量級(jí)一些,占用的內(nèi)<artifactId>spring-boot-starter-<artifactId>spring-boot-starter-<artifactId>spring-boot-starter-其實(shí),對(duì)于tomcat優(yōu)化最為有效的,還是JVM參數(shù)的配置,你可以參考上一課時(shí)的內(nèi)容進(jìn)行調(diào)整。比如,使用下面的參數(shù)啟動(dòng),QPS由248上升到308。<artifactId>spring-boot-starter-其實(shí),對(duì)于tomcat優(yōu)化最為有效的,還是JVM參數(shù)的配置,你可以參考上一課時(shí)的內(nèi)容進(jìn)行調(diào)整。比如,使用下面的參數(shù)啟動(dòng),QPS由248上升到308。對(duì)于一個(gè)web服務(wù)來(lái)說(shuō),最緩慢的地方就在于數(shù)據(jù)庫(kù)操作。所以,使用“07|案例分析:無(wú)處不在的緩存,高并發(fā)系統(tǒng)的法寶和“08|案例分析:Redis如何助力秒殺業(yè)務(wù)”提供的本地緩存和分布式緩存優(yōu)對(duì)于如何定位到復(fù)雜分布式環(huán)境中的問(wèn)題,我這里想要分享另外一個(gè)工具:SkywalkingSkywalking是使用探針技術(shù)(JavaAgent)來(lái)實(shí)現(xiàn)的。通過(guò)在Java的啟動(dòng)參數(shù)中,加入javaagentJar包,即可將性能數(shù)據(jù)和調(diào)用鏈數(shù)據(jù)封裝,并發(fā)送到Skywalking下載相應(yīng)的安裝包(如果使用ES存儲(chǔ),需要下載專用的安裝包),將agenttarxvfskywalking-agent.tar.gz-C在業(yè)務(wù)啟動(dòng)參數(shù)中加入agentjava-jar/opt/test-service/spring-boot-demo.jar--java-javaagent:/opt/skywalking-agent/skywalking-agent.jarboot-demo.ja--files.active=dev訪問(wèn)一些服務(wù)的鏈接,打開(kāi)Skywalking的UI,即可看到下圖的界面。這些指標(biāo)可以類(lèi)比“01|析:性能優(yōu)化,有哪些衡量指標(biāo)?需要注意什么?”提到的衡量指標(biāo)去理解,我們就可以從圖中找到響應(yīng)比較慢QPS又比較高的接口,進(jìn)行專項(xiàng)優(yōu)化。1.Controller1.Controllercontoller層用于接收前端的查詢參數(shù),然后構(gòu)造查詢結(jié)果?,F(xiàn)在很多項(xiàng)目都采用前后端分離的架構(gòu),所以contoller層的方法,一般會(huì)使用@ResponseBody注解,把查詢的結(jié)果,解析成JSON(兼顧效率和可讀性)由于contoller據(jù)集的大小上。如果結(jié)果集合非常大,JSON解析組件就要花費(fèi)較多的時(shí)間進(jìn)行解析,假如結(jié)果集在解析成JSON之前,占用的內(nèi)存是10MB,那么在解析過(guò)程中,有可能會(huì)使用20M或者我見(jiàn)過(guò)很多案例,由于返回對(duì)象的嵌套層次太深、引用了不該引用的對(duì)象(比如非常大的byte[]對(duì)所以,對(duì)于一般的服務(wù),保持結(jié)果集的精簡(jiǎn),是非常有必要的,這也是O(datatansfer存在的必要。如果你的項(xiàng)目,返回的結(jié)果結(jié)構(gòu)比較復(fù)雜,對(duì)結(jié)果集進(jìn)行一次轉(zhuǎn)換是非常有必要的。2.Serviceservice層用于處理具體的業(yè)務(wù),大部分功能需求都是在這里完成的。service很少會(huì)保存狀態(tài),而且可以被contoller復(fù)用。serviceserviceservice面課時(shí)提供的優(yōu)化思路進(jìn)行優(yōu)化。如上圖,四個(gè)操作分散在三個(gè)不同的資源中。要想達(dá)到一致性,需要三個(gè)不同的資源MySQL、MQ、ElasticSeach進(jìn)行統(tǒng)一協(xié)調(diào)。它們底層的協(xié)議,以及實(shí)現(xiàn)方式,都是不一樣的,那就無(wú)法通過(guò)如上圖,四個(gè)操作分散在三個(gè)不同的資源中。要想達(dá)到一致性,需要三個(gè)不同的資源MySQL、MQ、ElasticSeach進(jìn)行統(tǒng)一協(xié)調(diào)。它們底層的協(xié)議,以及實(shí)現(xiàn)方式,都是不一樣的,那就無(wú)法通過(guò)提供的ansaction注解來(lái)解決,需要借助外部的組件來(lái)完成。手,因?yàn)樗褂妙~外的步驟去保證一致性,常用的方法有:兩階段提交方案、C、本地消息表、MQ事務(wù)消息、分布式事務(wù)中間件等。之間的名詞,叫作柔性事務(wù)。柔性事務(wù)的理念是將業(yè)務(wù)邏輯和互斥操作,從資源層上移至業(yè)務(wù)層面。關(guān)系數(shù)據(jù)庫(kù),最大的特點(diǎn)就是事務(wù)處理,即滿足ACID原子性(Atomicity):一致性(Consistency):系統(tǒng)必須始終處在強(qiáng)一致?tīng)顟B(tài)下。隔離性(Isolation):持久性(Durability):BASEBASEBasicallyAvailable、Soft-state、EventuallyconsistentBASE基本可用(BasicallyAvailable):軟狀態(tài)(Soft-state):系統(tǒng)不要求一直保持強(qiáng)一致?tīng)顟B(tài)。最終一致性(Eventualconsistency):復(fù)。3.Dao最終一致性(Eve
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東潮州衛(wèi)生健康職業(yè)學(xué)院《化工制圖》2023-2024學(xué)年第一學(xué)期期末試卷
- 品德假期安全生活課件
- 小學(xué)生竇娥的課件
- 廣安職業(yè)技術(shù)學(xué)院《英語(yǔ)(二)》2023-2024學(xué)年第一學(xué)期期末試卷
- 贛州職業(yè)技術(shù)學(xué)院《組織行為學(xué)A》2023-2024學(xué)年第一學(xué)期期末試卷
- 贛南衛(wèi)生健康職業(yè)學(xué)院《醫(yī)學(xué)生物化學(xué)與分子生物學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 贛東學(xué)院《酒店收益管理》2023-2024學(xué)年第一學(xué)期期末試卷
- 《人力資源管理故事》課件
- 七年級(jí)科學(xué)上冊(cè)8.3安全使用溶液8.3.2使用酸堿溶液的正確方法學(xué)案無(wú)答案牛津上海版
- 七年級(jí)道德與法治上冊(cè)第二單元友誼的天空第四課友誼與成長(zhǎng)同行第2框深深淺淺話友誼教案新人教版
- 機(jī)械原理課程設(shè)計(jì)鎖梁自動(dòng)成型機(jī)床切削機(jī)構(gòu)
- 順產(chǎn)臨床路徑
- 人教版培智一年級(jí)上生活適應(yīng)教案
- 推動(dòng)架機(jī)械加工工序卡片
- RoHS檢測(cè)報(bào)告完整版
- 中國(guó)近現(xiàn)代史綱要(上海建橋?qū)W院)智慧樹(shù)知到答案章節(jié)測(cè)試2023年
- 同濟(jì)大學(xué)土力學(xué)試卷2023
- 南理工2023運(yùn)籌學(xué)試卷A及答案
- 【讀寫(xiě)策略】如何編寫(xiě)班史
- 重慶市綦江區(qū)篆塘鎮(zhèn)白坪村建筑用砂巖礦采礦權(quán)評(píng)估報(bào)告
- 行政查房情況記錄表
評(píng)論
0/150
提交評(píng)論