成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

消息隊(duì)列堆積太多,下游處理不過(guò)來(lái)怎么辦呢?

開發(fā) 前端
由于上游服務(wù)流量增加,發(fā)送到消息隊(duì)列的消息增多,阿粉在處理消息的時(shí)候需要依賴下游的一個(gè)服務(wù),可是誰(shuí)想到下游的服務(wù)效率太差,消息太多處理不過(guò)來(lái),CPU 居高不下。

作為后端程序員日常工作中難免會(huì)遇到要跟消息隊(duì)列打交道的時(shí)候,而且在當(dāng)下微服務(wù)的場(chǎng)景下,很多服務(wù)的性能不是我們自己能控制的。

這不阿粉最近就遇到了一個(gè)場(chǎng)景,由于上游服務(wù)流量增加,發(fā)送到消息隊(duì)列的消息增多,阿粉在處理消息的時(shí)候需要依賴下游的一個(gè)服務(wù),可是誰(shuí)想到下游的服務(wù)效率太差,消息太多處理不過(guò)來(lái),CPU 居高不下。

看過(guò)我們昨天文章的小伙伴應(yīng)該都知道,這個(gè)時(shí)候我們就需要進(jìn)行限流了,為了避免將下游的服務(wù)打垮,我們來(lái)進(jìn)行單機(jī)限流操作。這里我們來(lái)模擬一下操作過(guò)程,首先我們通過(guò)一段偽代碼來(lái)模擬大流量,然后通過(guò)配置 sentinel 的控制臺(tái)來(lái)配置規(guī)則從而實(shí)現(xiàn)單機(jī) QPS 20 的限制。

創(chuàng)建 SpringBoot 服務(wù)

首先我們創(chuàng)建一個(gè) SpringBoot 服務(wù),在 pom.xml 文件中增加下面的配置。

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-core</artifactId>
<version>1.8.4</version>
</dependency>

然后我們提供一個(gè)對(duì)外的 http 接口,通過(guò)訪問(wèn)接口來(lái)觸發(fā)我們的限流代碼,接口代碼如下:

代碼如下:

package com.example.demo.controller;

import com.alibaba.csp.sentinel.SphO;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
* <br>
* <b>Function:</b><br>
* <b>Author:</b>@author ziyou<br>
* <b>Date:</b>2022-05-08 12:56<br>
* <b>Desc:</b>無(wú)<br>
*/
@RestController
public class LoginController {

@GetMapping(value = "/login")
public void login(String username, String password) {
System.out.println("login");
//模擬一百萬(wàn)條消息
for (int i = 0; i < 1000000; i++) {
boolean entry = false;
try {
entry = SphO.entry("HelloWorld");
while (!entry) {
try {
Thread.sleep(50);
System.out.println("entry false");
entry = SphO.entry("HelloWorld");
} catch (InterruptedException e) {

}
}
System.out.println("entry true");
} catch (Exception e) {

} finally {
if (entry) {
SphO.exit();
}
}
}
}
}

調(diào)用接口過(guò)后,通過(guò)循環(huán)一百萬(wàn)次來(lái)模擬大流量,這里我們要解釋以下幾個(gè)內(nèi)容

  • SphO.entry("HelloWorld"):是 Sentinel 的資源控制器,"HelloWord" 是資源的名稱,資源 是 sentinel 的一個(gè)很重要的概念,所有的限流都是針對(duì)資源的操作;SphO.entry() 返回值是布爾值,為 true 表示資源可用,沒有被限流,為 false 表示資源被限流;
  • 這里模擬在被限流了過(guò)后,程序等待一段時(shí)間,再去判斷是否限流,只有在資源未被限流的時(shí)候,才能繼續(xù)處理;
  • 在 finally 里面需要進(jìn)行 SphO.exit(); 操作,當(dāng)被限流了以后,也就是SphO.entry() == true 后一定要執(zhí)行 SphO.exit(); 否則代碼會(huì)創(chuàng)建多個(gè)Entry 對(duì)象,程序運(yùn)行時(shí)間長(zhǎng)了過(guò)后會(huì)導(dǎo)致內(nèi)存泄露,引發(fā) FullGC。

這個(gè)時(shí)候我們啟動(dòng)一個(gè)服務(wù),調(diào)用一下接口,可以看到效果如下,很快就會(huì)運(yùn)行完,并沒有達(dá)到限流的效果,那是因?yàn)槲覀兇丝踢€沒有配置限流規(guī)則,所以沒有觸發(fā)到限流的邏輯。

配置 sentinel 控制臺(tái)

接下來(lái)我們安裝一下 sentinel 的控制臺(tái),通過(guò)控制臺(tái)來(lái)配置限流規(guī)則,從而達(dá)到限流的目的,控制臺(tái)的搭建很簡(jiǎn)單,我們通過(guò)官方地址下載指定版本的 jar 然后本地運(yùn)行即可。通過(guò)地址 https://github.com/alibaba/Sentinel/releases/download/1.8.4/sentinel-dashboard-1.8.4.jar 進(jìn)行下載。

然后通過(guò)命令java -Dserver.port=8081 -Dcsp.sentinel.dashboard.server=localhost:8081 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.4.jar 運(yùn)行即可,如下所示:

這里我們通過(guò)指定 8081 端口,用于訪問(wèn) sentinel,啟動(dòng)成功過(guò)后,通過(guò)瀏覽器我們可以進(jìn)行登錄,默認(rèn)的初始賬號(hào)和密碼都是 sentinel。

因?yàn)樯厦娴拿钗覀冎付?sentinel-dashboard 項(xiàng)目,所以默認(rèn)只會(huì)看到 sentinel-dashboard 這個(gè)項(xiàng)目,這個(gè)時(shí)候我們需要,修改代碼,在 pom.xml 中增加下面的配置。

<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-transport-simple-http</artifactId>
<version>1.8.4</version>
</dependency>

然后在 JVM 的啟動(dòng)參數(shù)中增加-Dcsp.sentinel.dashboard.server=localhost:8081 指明 sentinel 的地址和端口號(hào),再啟動(dòng)我們的應(yīng)用。啟動(dòng)完過(guò)后,我們要手動(dòng)調(diào)用一下接口,然后就可以看到我們的程序項(xiàng)目連接到 sentinel 了。不過(guò)此時(shí)只是我們程序和 sentinel 連接成功,還沒有限流規(guī)則,接下來(lái)我們要配置一下限流規(guī)則。

按照上圖配置好了過(guò)后,我們?cè)僬{(diào)用一次接口,可以看到此時(shí)我們的處理速度明顯慢了下來(lái),每秒只有 20 個(gè) QPS 能獲取資源了,至此我們基于 sentinel 的單機(jī)限流QPS 20 的目標(biāo)完成。

責(zé)任編輯:武曉燕 來(lái)源: Java極客技術(shù)
相關(guān)推薦

2020-05-25 15:20:47

容器DockerDocker Comp

2022-10-31 09:30:32

kafkaconsumer服務(wù)端

2020-05-19 16:36:50

漏洞iOS網(wǎng)絡(luò)攻擊

2011-07-12 10:33:46

CentOS 6

2024-01-31 13:05:00

模型訓(xùn)練

2016-09-21 13:52:53

服務(wù)器負(fù)載過(guò)載保護(hù)

2024-12-12 14:56:48

消息積壓MQ分區(qū)

2021-02-24 08:38:48

Kafka消息Consumer

2022-12-26 09:16:56

請(qǐng)求量代碼QPS

2013-02-20 10:27:29

視覺設(shè)計(jì)師意見

2021-12-09 11:46:53

DockerIPLinux

2009-09-14 10:03:02

linuxlinux死機(jī)linux操作系統(tǒng)

2023-12-21 08:01:41

RocketMQ消息堆積

2021-07-01 21:49:48

微服務(wù)Nacos服務(wù)

2009-11-03 08:56:02

linux死機(jī)操作系統(tǒng)

2024-04-22 08:17:23

MySQL誤刪數(shù)據(jù)

2022-12-19 11:31:57

緩存失效數(shù)據(jù)庫(kù)

2017-02-21 13:11:43

SDN網(wǎng)絡(luò)體系SDN架構(gòu)

2022-05-19 08:01:49

PostgreSQL數(shù)據(jù)庫(kù)

2024-06-24 08:42:11

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 一区二区三区在线看 | 久久精品一 | 国产福利在线免费观看 | 91色综合| 国产精品福利在线观看 | 精品国产不卡一区二区三区 | 综合久久色 | 先锋av资源在线 | 欧美影院| 一级无毛片 | 久久午夜影院 | 国产精品a久久久久 | 久久国产精品久久久久 | 二区精品| 久久久91| 福利二区 | 九九九视频在线 | 精品久久久久久 | 天天曰天天曰 | 国产福利资源在线 | 精品一区二区观看 | 黄a网站 | 成人精品一区 | 99久久婷婷国产综合精品电影 | 一区二区三区亚洲视频 | 久久精品视频12 | 欧美精品一区二区三区蜜桃视频 | 91手机精品视频 | 亚洲视频免费观看 | 久久欧美精品 | 国产免费一区二区三区最新6 | 中文字幕在线视频网站 | 国产在线视频一区二区 | 久国产 | 精品亚洲一区二区 | 欧美性另类 | 欧美综合一区二区 | 97国产成人 | 欧美三区| 青娱乐国产 | 亚洲精品一区二区三区在线 |