等待来自nlasvc服务的事务处理响应超时_从数学的视角来诠释“服务雪崩”

045337d8141a8d2147351400e2267d9c.png

相信很多后端研发的同学有过类似的感觉:平时经常听到“服务雪崩”这个词,但总觉得是一知半解。今天我将从数学的视角来诠释“服务雪崩”。

“服务雪崩”,通常是指客户端的请求量超过了服务端处理的能力上限,最终导致服务不可用。

“雪崩”一词形象生动的描述了当请求量暴涨时,请求响应时间像“滚雪球”一样持续的变大,直到所有的客户端请求全部超时,服务端后续的任何响应都会被客户端所忽略,服务完全不可用,进而“雪崩”。

上面的描述依然很抽象,那该如何理解呢?我们先从服务端的处理能力入手,一般我们使用TPS或者QPS来衡量一个服务的处理能力,即吞吐量。

服务吞吐量 = 服务并发数 * (单位时间 / 平均响应时间),这里举一个简单的例子,比如你去银行某个营业厅办理业务,这个营业厅一共有5个柜台可以办理业务,平均每个人的办理时间为10分钟,那么这个营业厅一个小时的服务吞吐量 = 5 * (60 / 10) = 30。

相对的如果我们有一个后台服务,它有10个进程在并发处理请求,每个请求的平均响应时间为20ms,则这个服务每秒的吞吐量(QPS)= 10 * (1000ms / 20ms) = 500。

知道了服务吞吐量如何衡量,另一个重要的概念是响应时间。响应时间 = I

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MQTT中,当客户端向服务器发送一个消息后,如果客户端需要等待服务器的响应,可以使用QoS(Quality of Service)来保证消息的可靠传输。在QoS为1或2的情况下,客户端需要等待服务器的响应,如果超时未收到响应,客户端可以选择重新发送消息或者放弃此次发送。 在MQTT中,客户端可以通过设置keep alive机制来检测网络连接是否正常。如果客户端设置了keep alive时间,并且服务器在一定时间内没有收到客户端的消息,就会认为客户端已经断开连接。在这种情况下,服务器将会发送一个disconnect消息给客户端,客户端可以根据这个消息来判断是否超时。 如果你使用的是paho-mqtt库,可以通过设置on_publish函数的返回值来判断发送消息是否成功。如果返回0表示发送成功,如果返回1表示发送失败。同时,你也可以设置on_publish函数的超时时间,以便在超时后进行处理。以下是一个示例代码: ``` import paho.mqtt.client as mqtt client = mqtt.Client() def on_publish(client, userdata, mid): print("Message published.") return 0 client.on_publish = on_publish client.connect("broker.hivemq.com", 1883, 60) client.publish("test/topic", "Hello World!", qos=1) # 设置超时时间为5秒 client.loop(timeout=5) ``` 在上面的代码中,我们设置了on_publish函数来判断消息是否成功发送,并且设置了超时时间为5秒。如果超时未收到服务器的响应,客户端会自动断开连接并抛出异常。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值