加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 服务器 > 安全 > 正文

一篇文了解分布式队列编程:从模型、实战到优化

发布时间:2021-01-09 13:12:45 所属栏目:安全 来源:网络整理
导读:副标题#e# 《一篇文了解分布式队列编程:从模型、实战到优化》要点: 本文介绍了一篇文了解分布式队列编程:从模型、实战到优化,希望对您有用。如果有疑问,可以联系我们。 本文由美团点评技术团队出品,一篇文助你掌握分布式队列编程的要义.从模型到实战再

通过添加缓存,消费者服务的吞吐量和可用性都得到了提升.但缓存引入了一个新问题——内存数据丢失.对于敏感数据,工程师需要考虑如下两个潜在问题:

  • 如果内存中存在未处理完的请求,而某些原因导致生产者服务宕机,内存数据就会丢失而可能无法恢复.
  • 如果分布式队列长时间不可用,随着请求数量的不断增加,最终系统内存可能会耗尽而崩溃,内存的消息也可能丢失.

所以缓存中的数据需要定期被持久化到磁盘等持久层设备中,典型的持久化触发策略主要有两种:

  • 定期触发,即每隔一段时间进行一次持久化.
  • 定量触发,即每当缓存中的请求数量达到一定阈值后进行持久化.
  • 是否需要持久化优化,以及持久化策略应该由请求数据的敏感度、请求量、持久化性能等因素共同决定.

中间件选型

分布式队列不等同于各种开源的或者收费的消息中间件,甚至在一些场景下完全不需要使用消息中间件.但是,消息中间件产生的目的就是解决消息传递问题,这为分布式队列编程架构提供了很多的便利.在实际工作中,工程师们应该将成熟的消息中间件作为队列的首要备选方案.

本节对消息中间件的功能、模型进行阐述,并给出一些消息中间件选型、部署的具体建议.

中间件的功能

明白一个系统的每个具体功能是设计和架构一个系统的基础.典型的消息中间件主要包含如下几个功能:

  • 消息接收
  • 消息分发
  • 消息存储
  • 消息读取

概念模型

抽象的消息中间件模型包含如下几个角色:

  • 发送者和接收者客户端(Sender/Receiver Client),在具体实施过程中,它们一般以库的形式嵌入到应用程序代码中.
  • 代理服务器(Broker Server),它们是与客户端代码直接交互的服务端代码.
  • 消息交换机(Exchanger),接收到的消息一般需要通过消息交换机(Exchanger)分发到具体的消息队列中.
  • 消息队列,一般是一块内存数据结构或持久化数据.
  • 概念模型如下图:

  • 为了提高分发性能,很多消息中间件把消息代理服务器的拓扑图发送到发送者和接收者客户端(Sender/Receiver Client),如此一来,发送源可以直接进行消息分发.

选型标准

要完整的描述消息中间件各个方面非常困难,大部分良好的消息中间件都有完善的文档,这些文档的长度远远超过本文的总长度.但如下几个标准是工程师们在进行消息中间件选型时经常需要考虑和权衡的.

性能

性能主要有两个方面需要考虑:吞吐量(Throughput)和响应时间(Latency).

不同的消息队列中间件的吞吐量和响应时间相差甚远,在选型时可以去网上查看一些性能对比报告.

对于同一种中间件,不同的配置方式也会影响性能.主要有如下几方面的配置:

  • 是否需要确认机制,即写入队列后,或从队列读取后,是否需要进行确认.确认机制对响应时间的影响往往很大.
  • 能否批处理,即消息能否批量读取或者写入.批量操作可以大大减少应用程序与消息中间件的交互次数和消息传递量,大大提高吞吐量.
  • 能否进行分区(Partition).将某一主题消息队列进行分区,同一主题消息可以有多台机器并行处理.这不仅仅能影响消息中间件的吞吐量,还决定着消息中间件是否具备良好的可伸缩性(Scalability).
  • 是否需要进行持久化.将消息进行持久化往往会同时影响吞吐量和响应时间.
可靠性

可靠性主要包含:可用性、持久化、确认机制等.

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读