18910140161

如何在Swoole服务器程序中实施压力反馈

顺晟科技

2023-02-26 09:25:14

127

为什么要反馈压力

服务器端程序在发出高并发请求时,如果超出程序可以处理的限制,就会发生冲突,造成在线服务的大规模雪崩。压力反馈(Back Pressure)是服务端主动告知客户端自身资源不足,无法提供服务的手段。web服务返回HTTP 503 (Service Unavailable),使客户端知道服务器当前处于相对较高的加载状态。此时,客户端可以选择:

请等一段时间后再试一次。在负载较低的其他节点或服务器上暂时停止使用此服务,并降级相关业务。在

PHP-FPM 如何反馈压力

传统Nginx PHP-FPM服务器程序中,基本三大配置会影响压力反馈。

Php-fpm.conf中pm.max_chindren配置的最大进程数(例如,配置为200,表示最大开始200个进程)超过最大进程数时,新请求将不会被接受,而会进入Listen Backlog队列等待,直到存在闲置进程也就是说,如果没有空闲进程,最多允许512个请求队列内核参数net.core。根据内核参数net.core.somaxconn的设置,listen.backlog设置中的数值不一定有效。实际队列长度为min (listen.backlog,net.core.somaxconn)。例如,net.core.somaxconn=128,listen.backlog=512表示实际队列长度为128,而不是512,因此Nginx否则,客户端生成等时间过长,负载低,会出现拒绝请求的两个问题。

Nginx的缺点是无法区分502和503错误。

Swoole 程序如何反馈压力

由于Swoole完全是异步体系结构,并发性很好,在机器资源没有耗尽的情况下,可以无限制地接受和处理请求。与Nginx PHP-FPM相比,压力反馈不是很好,而是框架级别或应用层代码经常出现503错误。Swoole的基本配置提供了多种配置,可解决某些问题。

max_connection

如果限制最大连接数超过最大连接数,则新连接将被拒绝。向网关返回502错误

max_coroutine

最大进程数限制,Swoole在收到客户端请求时创建要处理的新会话,如果超过最大会话数,则向客户端发送HTTP 503错误

max_concurrency

限制最大并发HTTP请求数。如果当前正在处理的请求数超过max_concurrency,则会立即向客户端发送默认的HTTP 503错误,并关闭连接。

Use Swoole \ Http \ Server

$ http=new server(& amp;# 039;127 . 0 . 0 . 1 & AMP;# 039;9501);

$http-set([

Max _ connection & amp# 039;=10000,

Max _ coroutine & amp# 039;=50000,

Max _ concurrency & amp# 039;=500,

]);

$ http-on(& amp;# 039;start & amp# 039;function ($ server) {

Echo & amp# 039;swo ole http server is started at http://127 . 0 . 0 . 1:9501 \ n & amp;# 039;

});

$ http-on(& amp;# 039;request & amp# 039;function ($ request,$ response) {

COTRIA ONIL:滑(0.1);//sleep 100ms模拟请求处理过程

$ response-header(& amp;# 039;内容类型& amp# 039;& amp# 039;文本/计划& amp# 039;);

$ response-end(& amp;# 039;Hello World & amp# 039;);

});

$ http-start();启动服务器后,使用ab或wrk测试。

wrk-c 1000-d 5s 3358127 . 0 . 0 . 1:9501/

运行5stest @ http://127.0.0.1: 9501/

2 threads and 1000 connections

Thread Stats Avg Stdev Max /- Stdev

latency 70.89 ms 132.48 ms 1.10s 95.39%

Req/Sec 7.99k 3.68k 13.03k 66.32%

77521 requests in 5.09s,5.41mb read

插槽错误:连接0、read 55182、write 0、timeout 0

非2xx或3xxresponses: 55182

Requests/sec: 15242.49

Transfer/sec: 1.06MB表示,5秒内共发送了77521个请求,但55182个请求返回了503。这部分请求是超过负荷后压力反馈的结果。

  • TAG:
我们已经准备好了,你呢?
2024我们与您携手共赢,为您的企业形象保驾护航