当前位置: 首页 > news >正文

做微信网站公司/小红书seo软件

做微信网站公司,小红书seo软件,怎么介绍自己做的电影网站,南昌市网站建设公司分布式消息队列RocketMQ 3.8)消息堆积与消费延迟 3.8.1) 概念 消息处理流程中,如果Consumer的消费速度跟不上Producer的发送速度,MQ中未处理的消息会越来越多(进的多出的少),这部分消息就被称…

分布式消息队列RocketMQ

3.8)消息堆积与消费延迟

3.8.1) 概念

消息处理流程中,如果Consumer的消费速度跟不上Producer的发送速度,MQ中未处理的消息会越来越多(进的多出的少),这部分消息就被称为堆积消息,消息出现堆积进而会造成消息的消费延迟。

以下场景需要重点关注消息堆积和消费延迟问题:

  1. 业务系统上下游能力不匹配造成的持续堆积,且无法自行恢复;

  2. 业务系统对消息的消费实时性要求较高,即使是短暂的堆积造成的消费延迟也无法接受。

3.8.2)产生原因分析

 Consumer使用长轮询Pull模式消费消息时,分为以下两个阶段:

3.8.2.1)消息拉取

Consumer通过长轮询Pull模式批量拉取的方式从服务端获取消息,将拉取到的消息缓存到本地缓冲队列中;

对于拉取式消费,在内网环境下会有很高的吞吐量,所以这一阶段一般不会成为消息堆积的瓶颈。

一个单线程单分区的低规格主机(Consumer,4C8G),其可达到几万的TPS。如果是多个分区多 个线程,则可以轻松达到几十万的TPS。

3.8.2.2)消息消费

Consumer将本地缓存的消息提交到消费线程中,使用业务消费逻辑对消息进行处理,处理完毕后获取到一个结果,这是真正的消息消费过程。

此时Consumer的消费能力就完全依赖于消息的消费耗时和消费并发度了,如果由于业务处理逻辑复杂等原因,导致处理单条消息的耗时较长,则整体的消息吞吐 量肯定不会高,此时就会导致Consumer本地缓冲队列达到上限,停止从服务端拉取消息。

3.8.2.3)结论

消息堆积的主要瓶颈在于客户端的消费能力,而消费能力由消费耗时和消费并发度决定。注意,消费耗时的优先级要高于消费并发度;即在保证了消费耗时的合理性前提下,再考虑消费并发度问题。

3.8.3)消费耗时

影响消息处理时长的主要因素是代码逻辑,而代码逻辑中可能会影响处理时长代码主要有两种类型: CPU内部计算型代码和外部I/O操作型代码。

通常情况下代码中如果没有复杂的递归和循环的话,内部计算耗时相对外部I/O操作来说几乎可以忽略,所以外部IO型代码是影响消息处理时长的主要原因。

外部IO操作型代码举例:

  • 读写外部数据库,例如对远程MySQL的访问

  • 读写外部缓存系统,例如对远程Redis的访问

  • 下游系统调用,例如Dubbo的RPC远程调用,Spring Cloud的对下游系统的Http接口调用

关于下游系统调用逻辑需要进行提前梳理,掌握每个调用操作预期的耗时,这样做是为了能够判断消费逻辑中IO操作的耗时是否合理,通常消息堆积是由于下游系统出现了服务异常或达到了DBMS容量限制,导致消费耗时增加;达到了DBMS容量限制,其也会引发消息的消费耗时增加。

服务异常,并不仅仅是系统中出现的类似500这样的代码错误,而可能是更加隐蔽的问题,例如,网络带宽问题。

3.8.4)消费并发度

一般情况下,消费者端的消费并发度由单节点线程数和节点数量共同决定,其值为 单节点线程数*节点数量

不过,通常需要优先调整单节点的线程数,若单机硬件资源达到了上限,则需要通过横向扩展来提高消费并发度。

单节点线程数:即单个Consumer所包含的线程数量

节点数量:即Consumer Group所包含的Consumer数量

对于普通消息、延时消息及事务消息,并发度计算都是单节点线程数*节点数量;但对于顺序消息则是不同的,顺序消息的消费并发度等于Topic的Queue分区数量。

1)全局顺序消息:该类型消息的Topic只有一个Queue分区,其可以保证该Topic的所有消息被顺序消费;为了保证这个全局顺序性,Consumer Group中在同一时刻只能有一个Consumer的一个线程进行消费,所以其并发度为1;

2)分区顺序消息:该类型消息的Topic有多个Queue分区,其仅可以保证该Topic的每个Queue 分区中的消息被顺序消费,不能保证整个Topic中消息的顺序消费。

为了保证这个分区顺序性, 每个Queue分区中的消息在Consumer Group中的同一时刻只能有一个Consumer的一个线程进行消费。即在同一时刻最多会出现多个Queue分区有多个Consumer的多个线程并行消费,所以其并发度为Topic的分区数量。

3.8.5)单机线程数计算

对于一台主机中线程池中线程数的设置需要谨慎,不能盲目直接调大线程数,设置过大的线程数反而会带来大量的线程切换的开销;

理想环境下单节点的优线程数计算模型为:C *(T1 + T2)/ T1;

C:CPU内核数

T1:CPU内部逻辑计算耗时

T2:外部IO操作耗时

最优线程数 = C *(T1 + T2)/ T1 = C * T1/T1 + C * T2/T1 = C + C * T2/T1

注意,该计算出的数值是理想状态下的理论数据,在生产环境中,不建议直接使用;而是根据当前环境,先设置一个比该值小的数值然后观察其压测效果,然后再根据效果逐步调大线程数,直至找到在该环境中性能最佳时的值。

3.8.6)如何避免消息堆积

为了避免在业务使用时出现非预期的消息堆积和消费延迟问题,需要在前期设计阶段对整个业务逻辑 行完善的排查和梳理,其中重要的就是梳理消息的消费耗时和设置消息消费的并发度。

3.8.6.1)梳理消息的消费耗时

通过压测获取消息的消费耗时,并对耗时较高的操作的代码逻辑进行分析;梳理消息的消费耗时需要关注以下信息:

  1. 消息消费逻辑的计算复杂度是否过高,代码是否存在无限循环和递归等缺陷;

  2. 消息消费逻辑中的I/O操作是否是必须的,能否用本地缓存等方案规避;

  3. 消费逻辑中的复杂耗时的操作是否可以做异步化处理。如果可以,是否会造成逻辑错乱。

3.8.6.2)设置消费并发度

对于消息消费并发度的计算,可以通过以下两步实施:

  1. 逐步调大单个Consumer节点的线程数,并观测节点的系统指标,得到单个节点优的消费线程数和消息吞吐量;

  2. 根据上下游链路的流量峰值计算出需要设置的节点数【节点数 = 流量峰值 / 单个节点消息吞吐量】

http://www.lbrq.cn/news/1445617.html

相关文章:

  • 电商网站开发数据库表/seo北京公司
  • 龙岩建设局招聘网站/推广平台哪个效果最好
  • 做网站组织结构框架例子/百度普通下载
  • 网站推广渠道的类型/怎么写软文
  • 学做网站的视频教学/营销案例100例小故事及感悟
  • 怎么看待网站开发/贵阳seo网站推广
  • 做整装的网站/百度秒收录排名软件
  • 中国建设网官方网站6/推销产品怎么推广
  • 东莞微信网站建设代理/seo前线
  • 网站建设需要哪些费用/swot分析
  • 建筑用模板多少钱一块/企业seo网站营销推广
  • 微信微网站怎么做/渠道策略的四种方式
  • 网站备案包括哪些/磁力狗在线
  • 南昌集团制作网站开发/行业网站
  • 网页加速器苹果/seo排名优化怎么样
  • 微网站制作多少钱/赣州seo唐三
  • web用框架做网站/排名轻松seo 网站推广
  • 四川明腾信息技术有限公司/优化的含义是什么
  • 枣庄高端网站建设/手机百度关键词优化
  • 哈尔滨企业网站开发报价/百度关键词优化多少钱一年
  • 东北网站建设公司/北京网络营销推广外包
  • 爱站seo工具包/seo公司是什么
  • 长沙理财网站建设/百度浏览器官方下载
  • 个人网站制作手绘/真正免费的网站建站
  • 代账公司网站模板/自己怎么搭建网站
  • 潍坊市安丘网站建设/网址缩短在线生成器
  • 团购网站建设费用/服务推广软文范例
  • 做网站前的准备工作/营销的概念是什么
  • 品牌微信网站开发/seo网站技术培训
  • 网站改版解决方案/百度商城app
  • Poetry与UV——现代Python依赖管理的革新者
  • 【无标题】AI 赋能日常效率:实用案例与操作心得分享
  • Meta AI水印计划的致命缺陷——IEEE Spectrum深度文献精读
  • 【工具】Python多环境管理
  • 机器学习(西瓜书)学习——绪论
  • Ubuntu Server 22 虚拟机空间扩容