springboot服務性能優(yōu)化海量資源_第1頁
springboot服務性能優(yōu)化海量資源_第2頁
springboot服務性能優(yōu)化海量資源_第3頁
springboot服務性能優(yōu)化海量資源_第4頁
springboot服務性能優(yōu)化海量資源_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

本文由簡悅SimpRead轉碼,原文地址在開始對SpringBoot服務進行性能優(yōu)化之前,你需要做一些準備,把SpringBoot服務的一些數(shù)據(jù)暴就需要把連接池的參數(shù)給暴露出來。我們這里采用的監(jiān)控工具是本文由簡悅SimpRead轉碼,原文地址在開始對SpringBoot服務進行性能優(yōu)化之前,你需要做一些準備,把SpringBoot服務的一些數(shù)據(jù)暴就需要把連接池的參數(shù)給暴露出來。我們這里采用的監(jiān)控工具是Prometheus,它是一個是時序數(shù)據(jù)庫,能夠存儲我們的指標。PrometheusSpringBootmaven<artifactId>spring-boot-starter-<artifactId>micrometer-registry-<artifactId>micrometer-然后,我們需要在perties啟動之后,我們就可以通過訪問監(jiān)控接口想要監(jiān)控業(yè)務數(shù)據(jù)也是比較簡單的,你只需要注入一個MeterRegistry啟動之后,我們就可以通過訪問監(jiān)控接口想要監(jiān)控業(yè)務數(shù)據(jù)也是比較簡單的,你只需要注入一個MeterRegistry碼:MeterRegistrypublicStringtest()"from","method",returntest_total{from="",method="test",}這里簡單介紹一下流行的Prometheus監(jiān)控體系,Prometheus使用拉的方式獲取監(jiān)控數(shù)據(jù),這個暴露數(shù)據(jù)的過程可以交給功能更加齊全的returntest_total{from="",method="test",}這里簡單介紹一下流行的Prometheus監(jiān)控體系,Prometheus使用拉的方式獲取監(jiān)控數(shù)據(jù),這個暴露數(shù)據(jù)的過程可以交給功能更加齊全的telegraf組件。如上圖,我們通常使用Gafana進行監(jiān)控數(shù)據(jù)的展示,使用AlertManager分的搭建工作不是我們的重點,感興趣的同學可自行研究。下圖便是一張典型的監(jiān)控圖,可以看到RedisJava火焰圖火焰圖也可以用來分析Java應用??梢詮膅ithub上下載async-pro?ler的壓縮包進行相關操作。比/root/javaagentJava應用,命令行如下: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-運行一段時間后,停止進程,可以看到在當前目錄下,生成了po?le.svg覽器打開的。明它可能是一個瓶頸。一層層向下瀏覽,即可找到需要優(yōu)化的目標。對一個普通的Web如下圖,在瀏覽器中輸入相應的域名,需要通過DNS解析到具體的IP地址上,為了保證高可用,我們的服務一般都會部署多份,然后使用Nginx做反向代理和負載均衡。NginxSpringBootSpringBoottomcatWebMVC模式,最終訪問到我們的數(shù)HTTP下面我們舉例來看一下,哪些動作能夠加快網(wǎng)頁的獲取。為了描述方便,我們僅討論HTTP1.1協(xié)議CDNCDN(ContentDelivery下面我們舉例來看一下,哪些動作能夠加快網(wǎng)頁的獲取。為了描述方便,我們僅討論HTTP1.1協(xié)議CDNCDN(ContentDeliveryNetwork)分發(fā),甚至是一些常用的前端腳本、樣式、圖片等,都可以放到CDN上。CDN通常能夠加快這些文件的獲取,網(wǎng)頁加載也更加迅速。瀏覽器會判斷HTTP頭Cache-Control的內容,用來決定是否使用瀏覽器緩存,這在管理一些靜態(tài)文件這個參數(shù)可以在Nginxlocation~*^.+\.(ico|gif|jpg|jpeg|png)$緩存1add_headerCache-Control:no-cache,max-減少每個頁面請求的域名數(shù)量,盡量保證在4個之內。這是因為,瀏覽器每次訪問后端的資源,都需要先查詢一次DNS,然后找到DNS對應的IP地址,再進行真正的調用。DNS有多層緩存,比如瀏覽器會緩存一份、本地主機會緩存、ISP服務商緩存等。從DNS到IP地址的轉變,通常會花費20-120ms的時間。減少域名的數(shù)量,可加快資源的獲取。開啟開啟gzip高傳輸效率。在nginxgzipgzip_min_lengthgzip_buffers4gzip_comp_levelgzip_http_versiongzip_typestext/plainapplication/javascript對JavaScript和CSS,甚至是HTML進行壓縮。道理類似,現(xiàn)在流行的前后端分離模式,一般都是對這使用長連接可以顯著減少網(wǎng)絡交互,提高性能。nginx默認開啟了對客戶端的keepavlide對JavaScript和CSS,甚至是HTML進行壓縮。道理類似,現(xiàn)在流行的前后端分離模式,一般都是對這使用長連接可以顯著減少網(wǎng)絡交互,提高性能。nginx默認開啟了對客戶端的keepavlidehttpkeepalive_timeout120skeepalive_requestsnginx與后端upstreamlocation~proxy_http_versionproxy_set_headerConnection如果你的項目并發(fā)量比較高,想要修改最大線程數(shù)、最大連接數(shù)等配置信息,可以通過自定義Web容@SpringBootApplication(proxyBeanMethods=publicclassAppimplementsWebServerFactoryCustomizer<ConfigurableServletWebServerFactory>{publicstaticvoidmain(String[]args)注意上面的代碼,我們設置了它的協(xié)議為org.apache.coyote.http11.Http11Nio2Protocol,意思就是開啟了Nio2。這個參數(shù)在Tomcat8.0注意上面的代碼,我們設置了它的協(xié)議為org.apache.coyote.http11.Http11Nio2Protocol,意思就是開啟了Nio2。這個參數(shù)在Tomcat8.0之后才有,開啟之后會增加一部分性能。對比如下(測試項目代碼見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容器,更加輕量級一些,占用的內<artifactId>spring-boot-starter-<artifactId>spring-boot-starter-<artifactId>spring-boot-starter-其實,對于tomcat優(yōu)化最為有效的,還是JVM參數(shù)的配置,你可以參考上一課時的內容進行調整。比如,使用下面的參數(shù)啟動,QPS由248上升到308。<artifactId>spring-boot-starter-其實,對于tomcat優(yōu)化最為有效的,還是JVM參數(shù)的配置,你可以參考上一課時的內容進行調整。比如,使用下面的參數(shù)啟動,QPS由248上升到308。對于一個web服務來說,最緩慢的地方就在于數(shù)據(jù)庫操作。所以,使用“07|案例分析:無處不在的緩存,高并發(fā)系統(tǒng)的法寶和“08|案例分析:Redis如何助力秒殺業(yè)務”提供的本地緩存和分布式緩存優(yōu)對于如何定位到復雜分布式環(huán)境中的問題,我這里想要分享另外一個工具:SkywalkingSkywalking是使用探針技術(JavaAgent)來實現(xiàn)的。通過在Java的啟動參數(shù)中,加入javaagentJar包,即可將性能數(shù)據(jù)和調用鏈數(shù)據(jù)封裝,并發(fā)送到Skywalking下載相應的安裝包(如果使用ES存儲,需要下載專用的安裝包),將agenttarxvfskywalking-agent.tar.gz-C在業(yè)務啟動參數(shù)中加入agentjava-jar/opt/test-service/spring-boot-demo.jar--java-javaagent:/opt/skywalking-agent/skywalking-agent.jarboot-demo.ja--files.active=dev訪問一些服務的鏈接,打開Skywalking的UI,即可看到下圖的界面。這些指標可以類比“01|析:性能優(yōu)化,有哪些衡量指標?需要注意什么?”提到的衡量指標去理解,我們就可以從圖中找到響應比較慢QPS又比較高的接口,進行專項優(yōu)化。1.Controller1.Controllercontoller層用于接收前端的查詢參數(shù),然后構造查詢結果?,F(xiàn)在很多項目都采用前后端分離的架構,所以contoller層的方法,一般會使用@ResponseBody注解,把查詢的結果,解析成JSON(兼顧效率和可讀性)由于contoller據(jù)集的大小上。如果結果集合非常大,JSON解析組件就要花費較多的時間進行解析,假如結果集在解析成JSON之前,占用的內存是10MB,那么在解析過程中,有可能會使用20M或者我見過很多案例,由于返回對象的嵌套層次太深、引用了不該引用的對象(比如非常大的byte[]對所以,對于一般的服務,保持結果集的精簡,是非常有必要的,這也是O(datatansfer存在的必要。如果你的項目,返回的結果結構比較復雜,對結果集進行一次轉換是非常有必要的。2.Serviceservice層用于處理具體的業(yè)務,大部分功能需求都是在這里完成的。service很少會保存狀態(tài),而且可以被contoller復用。serviceserviceservice面課時提供的優(yōu)化思路進行優(yōu)化。如上圖,四個操作分散在三個不同的資源中。要想達到一致性,需要三個不同的資源MySQL、MQ、ElasticSeach進行統(tǒng)一協(xié)調。它們底層的協(xié)議,以及實現(xiàn)方式,都是不一樣的,那就無法通過如上圖,四個操作分散在三個不同的資源中。要想達到一致性,需要三個不同的資源MySQL、MQ、ElasticSeach進行統(tǒng)一協(xié)調。它們底層的協(xié)議,以及實現(xiàn)方式,都是不一樣的,那就無法通過提供的ansaction注解來解決,需要借助外部的組件來完成。手,因為它要使用額外的步驟去保證一致性,常用的方法有:兩階段提交方案、C、本地消息表、MQ事務消息、分布式事務中間件等。之間的名詞,叫作柔性事務。柔性事務的理念是將業(yè)務邏輯和互斥操作,從資源層上移至業(yè)務層面。關系數(shù)據(jù)庫,最大的特點就是事務處理,即滿足ACID原子性(Atomicity):一致性(Consistency):系統(tǒng)必須始終處在強一致狀態(tài)下。隔離性(Isolation):持久性(Durability):BASEBASEBasicallyAvailable、Soft-state、EventuallyconsistentBASE基本可用(BasicallyAvailable):軟狀態(tài)(Soft-state):系統(tǒng)不要求一直保持強一致狀態(tài)。最終一致性(Eventualconsistency):復。3.Dao最終一致性(Eve

溫馨提示

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

最新文檔

評論

0/150

提交評論