中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring Boot: 接口壓測及簡要優化策略

發布時間:2020-10-30 15:47:40 來源:億速云 閱讀:375 作者:Leah 欄目:開發技術

本篇文章為大家展示了Spring Boot: 接口壓測及簡要優化策略,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

1.準備數據,為了測試準備200w條以上的數據。一個簡單的方法是使用下面的sql快速創建。

INSERT INTO table (user_name,address)

SELECT user_name, address FROM table;

但這樣創建的數據不同記錄的重復部分太多,和實際業務不太相符。一般業務上,除了主鍵之外還會有某一個字段是唯一,比如手機號,用戶名等。本次將user_name設置為唯一,簡單采用UUID的方式生成。

@RequestMapping("/create")
public Integer createData(Integer password) {
if (password != 1024) {
return 0;
}
ThreadPoolExecutor poolExecutor = new ThreadPoolExecutor(10,
20, 1, TimeUnit.MINUTES,
new ArrayBlockingQueue<Runnable>(100000),
Executors.defaultThreadFactory(), new ThreadPoolExecutor.CallerRunsPolicy());
int max = 1000000;
for (int i = 0; i < max; i++) {
poolExecutor.execute(() -> {
Date now = new Date();
User user = new User();
user.setStatus(0);
user.setUserName(UUID.randomUUID().toString().replace("-", ""));
user.setAddress("");
user.setCreateTime(now);
user.setUpdateTime(now);
userService.saveUser(user);
});
}
return 1;
}

采用線程池技術來生成數據。部分參數參考自己的配置進行設置。我這里采用核心線程數10,最大線程數20,阻塞隊列容量10w,拒絕策略CallerRunsPolicy的參數來生成。

數據生成以后,確認下生成數量,可以看到所有的user_name都是不同的。

select count(*),count(distinct user_name) from user

Spring Boot: 接口壓測及簡要優化策略

2.改造接口。為了測試方便,使用公共mapper。引入依賴

<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
</dependency>

修改啟動類MapperScan注解為import tk.mybatis.spring.annotation.MapperScan;

mapper接口繼承extends Mapper,(import tk.mybatis.mapper.common.Mapper;)。這樣就會為mapper生成insert,select等基本方法。

3.測試。

所測試的接口為

@RequestMapping(value = "/hello", method = {RequestMethod.POST})
public List<User> getUser(User user) {
return userService.getUserByUser(user);
}

打開jmeter,通過Option選擇中文語言。創建測試計劃,這次僅對接口進行壓力測試。

測試參數選擇userName,并使用隨機生成的UUID,這樣可以保證最終訪問DB時不觸發任何緩存。

1.文件-新建測試計劃

2.編輯-添加-線程-線程組

3.選中線程組,編輯-添加-邏輯控制器-事務控制器

4.選中事務控制器,編輯-添加-取樣器-BeanShell 取樣器

5.選中事務控制器,編輯-添加-HTTP請求

6.選中BeanShell取樣器,將下面代碼復制到腳本框里面,內容即為設置user_name變量為UUID。

import java.util.UUID;
UUID uuid1 = UUID.randomUUID();
vars.put("user_name",(uuid1.toString()).toUpperCase().replaceAll("-","")); 

Spring Boot: 接口壓測及簡要優化策略

7.選中HTTP請求,設置如下,其中參數部分內容為:

名稱
userName${user_Name}

這樣就可以將步驟6生成的參數傳遞為HTTP POST請求的參數了。

Spring Boot: 接口壓測及簡要優化策略

添加結果樹,匯總報告等,最終結構:

Spring Boot: 接口壓測及簡要優化策略

8.選中線程組,設置線程數等信息,詳細請參照官網:https://jmeter.apache.org/usermanual/index.html

Spring Boot: 接口壓測及簡要優化策略

這里先設置線程數為2000,由于要壓力測試,設置Ramp-up為1秒,即1秒內啟動所有線程。

9.啟動線程組。在這里插入圖片描述

10.結果樹里面可以確認具體每次請求的參數:

Spring Boot: 接口壓測及簡要優化策略

匯總報告里面可以查看總體信息:

Spring Boot: 接口壓測及簡要優化策略

通過以上步驟,可以初步預估下系統各個接口的吞吐量等信息。第一次壓測中user_name自動沒有設置索引,可以通過一些方法來提高系統性能:

1.為user_name設置索引。

2.使用redis緩存,其一是緩存最近檢索數據,其二是將表中所有user_name存入緩存(Set),請求到來時首先去緩存中查看是否存在,只有存在的時候才去檢索DB。

3.若數據量過大,可采用布隆過濾器存儲user_name。

4.限流,這里只說API層面的,guava包下RateLimiterJ;自寫切面+Redis;Spring Cloud GateWay。

上述內容就是Spring Boot: 接口壓測及簡要優化策略,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

抚远县| 区。| 潞城市| 老河口市| 永昌县| 井陉县| 兰坪| 石柱| 抚州市| 元江| 色达县| 湘潭县| 宁都县| 疏附县| 临沂市| 盘锦市| 石河子市| 平远县| 新竹市| 太湖县| 六盘水市| 额尔古纳市| 类乌齐县| 常熟市| 九江县| 淮阳县| 六枝特区| 古浪县| 蒙自县| 湄潭县| 柳州市| 泰安市| 开封县| 郯城县| 邢台市| 武强县| 宣汉县| 永年县| 紫阳县| 睢宁县| 阳江市|