日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

原始性能数字– Spring Boot 2 Webflux与Spring Boot 1

發(fā)布時間:2023/12/3 javascript 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 原始性能数字– Spring Boot 2 Webflux与Spring Boot 1 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

我對性能測試的設(shè)置如下:

示例應(yīng)用程序公開了一個端點(/ passthrough / message),該端點又調(diào)用下游服務(wù)。 到端點的請求消息如下所示:

{"id": "1","payload": "sample payload","delay": 3000 }

下游服務(wù)將基于消息中的“延遲”屬性(以毫秒為單位)進行延遲。

Spring Boot 1應(yīng)用程序

我已經(jīng)將Spring Boot 1.5.8.RELEASE用于該應(yīng)用程序的Boot 1版本。 端點是一個簡單的Spring MVC控制器,它依次使用Spring的RestTemplate進行下游調(diào)用。 一切都是同步且阻塞的,我已使用默認(rèn)的嵌入式Tomcat容器作為運行時。 這是下游調(diào)用的原始代碼:

public MessageAck handlePassthrough(Message message) {ResponseEntity<MessageAck> responseEntity = this.restTemplate.postForEntity(targetHost + "/messages", message, MessageAck.class);return responseEntity.getBody(); }

Spring Boot 2應(yīng)用程序

該應(yīng)用程序的Spring Boot 2版本公開了一個基于Spring Webflux的終結(jié)點,并使用WebClient ,這是RestTemplate的新的非阻塞,反應(yīng)性替代方法,可以進行下游調(diào)用–我也使用Kotlin進行了實現(xiàn),這與性能無關(guān)。 運行時服務(wù)器為Netty :

import org.springframework.http.HttpHeaders import org.springframework.http.MediaType import org.springframework.web.reactive.function.BodyInserters.fromObject import org.springframework.web.reactive.function.client.ClientResponse import org.springframework.web.reactive.function.client.WebClient import org.springframework.web.reactive.function.client.bodyToMono import org.springframework.web.reactive.function.server.ServerRequest import org.springframework.web.reactive.function.server.ServerResponse import org.springframework.web.reactive.function.server.bodyToMono import reactor.core.publisher.Monoclass PassThroughHandler(private val webClient: WebClient) {fun handle(serverRequest: ServerRequest): Mono<ServerResponse> {val messageMono = serverRequest.bodyToMono<Message>()return messageMono.flatMap { message ->passThrough(message).flatMap { messageAck ->ServerResponse.ok().body(fromObject(messageAck))}}}fun passThrough(message: Message): Mono<MessageAck> {return webClient.post().uri("/messages").header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE).header(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE).body(fromObject<Message>(message)).exchange().flatMap { response: ClientResponse ->response.bodyToMono<MessageAck>()}} }

性能測試的詳細(xì)信息

測試很簡單,對于不同組的并發(fā)用戶(300、1000、1500、3000、5000),我發(fā)送了一個延遲屬性設(shè)置為300 ms的消息,每個用戶重復(fù)該場景30次,延遲為1-2請求之間的秒數(shù)。 我正在使用出色的加特林工具來生成此負(fù)載。

結(jié)果

這些是加特林捕獲的結(jié)果:

300個并發(fā)用戶:

開機1 開機2

1000個并發(fā)用戶:

開機1 開機2

1500個并發(fā)用戶:

開機1 開機2

3000個并發(fā)用戶:

開機1 開機2

5000個并發(fā)用戶:

開機1 開機2

可以預(yù)期的是,當(dāng)并發(fā)用戶數(shù)保持較低水平(例如,少于1000個)時,Spring Boot 1和Spring Boot 2都能很好地處理負(fù)載,并且95%的響應(yīng)時間仍比預(yù)期的300 ms延遲高出幾毫秒。

在更高的并發(fā)級別上,Spring Boot 2中的異步非阻塞IO和響應(yīng)式支持開始顯示其顏色-即使負(fù)載非常大的5000個用戶,第95個百分位時間仍保持在312ms左右! 在這些并發(fā)級別上,Spring Boot 1記錄了很多故障和高響應(yīng)時間。

我在github回購中提供了所有示例和加載腳本– https://github.com/bijukunjummen/boot2-load-demo。

翻譯自: https://www.javacodegeeks.com/2017/10/raw-performance-numbers-spring-boot-2-webflux-vs-spring-boot-1.html

總結(jié)

以上是生活随笔為你收集整理的原始性能数字– Spring Boot 2 Webflux与Spring Boot 1的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。