消息队列(MQ)消息延迟及过滤设计方案

消息队列(MQ)消息延迟及过滤设计方案,第1张

消息队列接收到请求后,会将消息顺序写入Physic log文件,对于延迟消息,将消息按照将要投递的时间,以小时为单位异步分割存储,每个小时的消息顺序写入延迟物理文件delay log,并把索引存储在delay index文件,索引记录消息在delay log中的{offset,size,投递时间戳}元信息,基于有限内存以及延迟消息分发特性,我们仅将最近两个小时的delay log文件序列采用mmap内存映射机制进行读写,延迟2个小时以上的消息直接写入磁盘文件。

但消息分发时,每次需要将一个小时的的索引文件,全部加载到内存,由于每个小时的消息索引是顺序写入delay index的,而消息分发投递时间又是随机的,写入顺序与消息投递顺序并不一致,所以,索引加载到内存后,需要按照消息具体投递的秒级时间戳进行排序,再根据排序后的索引读取delay log中的消息进行分发投递。

这种存储方案有以下问题: 1一次需要加载整个小时的消息索引到内存,若并发比较高,内存压力比较大。 2按照消息投递秒级时间戳进行排序后,实时到来的新的消息,需要实时插入排序,性能较低,延迟大。

为了解决上述问题,我们将delay index中索引元信息{offset, size, 投递时间戳}改为{offset, size, localIndex, globalIndex, preGlobalIndex },其中:

通过globalIndex可以直接定位到delay index中的索引单元,从而确定delay log中的一条消息,而preGlobalIndex又可以定位到同一秒内的上一条消息,因此只要落地存储每个小时,每秒最后一条消息的索引ID,即可逆序查出每秒所有消息。一个小时内只有3600秒,只需要将3600个16字节的索引ID加载到内存,即可实现每秒消息的实时加载。

为了降低消息分发延迟,可将最近10s的消息索引提前预加载到内存,对于实时接收到的消息,根据时间戳匹配到对应的秒,更新这一秒最新一条消息的索引globalIndex与逆向索引preGlobalIndex,不需要做排序,消息插入与读取的复杂度都为O(1)。

采用的由数组加链表实现的多级时间轮机制,分别是秒级和小时级,小时级时间轮前移一个槽,对应秒级时间轮旋转一圈,秒级时间轮上一共3600个槽,每个槽的时间跨度最大为1s,时间轮每秒前移一个槽。小时级实践论每个槽时间跨度是1小时,每小时移动一个槽,将后面两个小时的delay log开启内存映射,同时清除两个小时之前delay log文件内存映射。

当我们只有一个2小时5分钟的消息发送时,秒级时间轮需要推动2圈后即小时级时间轮移动2个槽,剩5分钟的延迟,再降级到秒级时间轮。这叫造成了时间轮的空转。

一般会把每个使用到的槽都会放到DelayQueue中,然后根据DelayQueue来 协助时间轮的推进 ,防止空推进的情况。例如,当有延迟500s的任务时,除了挂载到时间轮外,我们还会把其放到DelayQueue中,这样DelayQueue的头结点为延迟500s,如果期间没有小于500s的延迟任务再加进来时,我们只需要等待500s,时间轮推进一次即可。如果有小于500s的定时任务新加进来,我们只需要唤醒DelayQueue,重新计算等待时间即可。

即当有定时任务新增时,如果对应槽为新槽(即新增任务为该槽的第一个任务),在DelayQueue中增加延迟任务,并判断是否为头结点,是的话唤醒DelayQueue重新计算等待时间。

当master发生漂移或者网络异常时,时间轮分发控制需要从原master节点切换到新的master节点。为了保证分发状态的连续性与一致性,master节点定时每隔50ms分别将两个时间轮上分发的tick信息同步到其它slave节点。通过tick可确定具体分发到第几秒,但不能确定分发到这一秒的第几条消息,为此二级时间轮增加同步了一个参数localIndex,记录当前秒分发到第几条消息,并且每个节点都会定时将分发状态持久化。

每当master发生切换时,原master节点切换为slave,会立即停止当前时间轮的分发任务,并清空分发状态;而新的master节点根据当前已同步过来的分发状态初始化两级时间轮,但master切换会有一定的延迟周期或者极端情况下不同节点间时钟存在偏差,新的master初始完时间轮的tick后,该tick对应的秒级时间戳有可能与节点实际时间不一致,启动分发任务前需要做特殊调整,若tick时间戳小于当前时间,则分发任务sleep等待直至时间对齐,若tick时间戳大于当前时间,说明存在已到期的消息未分发,此时连续推进tick迁移,并对到期消息直接异步投递,直到tick对应时间戳小于当前时间。

正常master切换分为两种情况,一种为主动释放master,如节点重启与master负载均衡过程,这种情况节点在drop master之前,会首先同步时间轮分发状态到其它slave节点,此时master切换时间轮分发时完全连续一致的;另一种是一些异常情况下master被动漂移,此时新的master节点上时间轮分发状态可能存在最大50ms的延迟,会出现部分消息重复分发现象。把时间轮分发状态信息封装到到期投递消息协议扩展字段中,paxos请求同步消息时携带时间轮状态,即可做到实时同步。

众所周知,RocketMQ是支持消息过滤的,即发送消息时,可以给消息设置一个TAG。订阅主题的时候,可以设置只消费携带某些TAG的消息,起到消息过滤的作用。

客户端拉取消息时,在服务端得到tag的hash集合codeSet,然后从ConsumerQueue获取一条记录,判断记录的hashCode是否在codeSet中,以达到消息过滤的目的,决定是否将该消息发送给consumer。

因为Hash存在冲突,过滤不完全准确,所以,客户端收到消息后,会进行再次精准过滤。

还有一种过滤方式,把TAG通过哈希转换为long,索引中保存所有TAG的哈希值按位或的结果。当拉取消息时,通过订阅设置的TAG哈希值与索引中的哈希值进行按位与 *** 作,如果结果等于订阅设置的TAG哈希值,说明该索引对应的消息可能符合条件,二次精准过滤依旧在客户端来做;否则,一定不符合条件,直接过滤掉。

用途就是用来处理消息,也就是处理JMS的。消息队列在大型电子商务类网站,如京东、淘宝、去哪儿等网站有着深入的应用,队列的主要作用是消除高并发访问高峰,加快网站的响应速度。

在不使用消息队列的情况下,用户的请求数据直接写入数据库,高发的情况下,会对数据库造成巨大的压力,同时也使得系统响应延迟加剧,但使用队列后,用户的请求发给队列后立即返回。

例如:不能直接给用户提示订单提交成功,京东上提示:“您提交了订单,请等待系统确认”再由消息队列的消费者进程从消息队列中获取数据,异步写入数据库。

由于消息队列的服务处理速度远快于数据库,因此用户的响应延迟可得到有效改善。

扩展资料:

ActiveMQ主要有以下几种使用场景

1、异步调用。

2、一对多通信。

3、做多个系统的集成、同构、异构。

4、作为RPC的替代。

5、多个应用相互解耦。

6、作为事件驱动架构的幕后支撑。

7、为了提高系统的可伸缩性。

阿里云致力于以在线公共服务的方式,提供安全、可靠的计算和数据处理能力,让计算和人工智能成为普惠科技。

阿里云服务着制造、金融、政务、交通、医疗、电信、能源等众多领域的领军企业,包括中国联通、12306、中石化、中石油、飞利浦、华大基因等大型企业客户,以及微博、知乎、锤子科技等明星互联网公司。在天猫双11全球狂欢节、12306春运购票等极富挑战的应用场景中,阿里云保持着良好的运行纪录。

阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。

扩展资料:

阿里云主要产品:

1、d性计算:

云服务器ECS:可d性扩展、安全、稳定、易用的计算服务

块存储:可d性扩展、高性能、高可靠的块级随机存储

专有网络VPC:帮您轻松构建逻辑隔离的专有网络

负载均衡:对多台云服务器进行流量分发的负载均衡服务

d性伸缩:自动调整d性计算资源的管理服务

资源编排:批量创建、管理、配置云计算资源

容器服务:应用全生命周期管理的Docker服务

高性能计算HPC:加速深度学习、渲染和科学计算的GPU物理机

批量计算:简单易用的大规模并行批处理计算服务

E-MapReduce:基于Hadoop/Spark的大数据处理分析服务

2、数据库:

云数据库RDS:完全兼容MySQL,SQLServer,PostgreSQL

云数据库MongoDB版:三节点副本集保证高可用

云数据库Redis版:兼容开源Redis协议的Key-Value类型

云数据库Memcache版:在线缓存服务,为热点数据的访问提供高速响应

PB级云数据库PetaData:支持PB级海量数据存储的分布式关系型数据库

云数据库HybridDB:基于GreenplumDatabase的MPP数据仓库

云数据库OceanBase:金融级高可靠、高性能、分布式自研数据库

数据传输:比GoldenGate更易用,阿里异地多活基础架构

数据管理:比phpMyadmin更强大,比Navicat更易用

3、存储:

对象存储OSS:海量、安全和高可靠的云存储服务

文件存储:无限扩展、多共享、标准文件协议的文件存储服务

归档存储:海量数据的长期归档、备份服务

块存储:可d性扩展、高性能、高可靠的块级随机存储

表格存储:高并发、低延时、无限容量的Nosql数据存储服务

4、网络:

CDN:跨运营商、跨地域全网覆盖的网络加速服务

专有网络VPC:帮您轻松构建逻辑隔离的专有网络

高速通道:高速稳定的VPC互联和专线接入服务

NAT网关:支持NAT转发、共享带宽的VPC网关

2018年6月20日,阿里云宣布联合三大运营商全面对外提供IPv6服务。

5、大数据:

MaxCompute:原名ODPS,是一种快速、完全托管的TB/PB级数据仓库解决方案。

QuickBI:高效数据分析与展现平台,通过对数据源的连接,和数据集的创建,对数据进行即席的分析与查询。并通过电子表格或仪表板功能,以拖拽的方式进行数据的可视化呈现。

大数据开发套件:提供可视化开发界面、离线任务调度运维、快速数据集成、多人协同工作等功能,拥有强大的OpenAPI为数据应用开发者提供良好的再创作生态

DataV数据可视化:专精于业务数据与地理信息融合的大数据可视化,通过图形界面轻松搭建专业的可视化应用,满足您日常业务监控、调度、会展演示等多场景使用需求

关系网络分析:基于关系网络的大数据可视化分析平台,针对数据情报侦察场景赋能,如打击虚假交易,审理保险骗赔,案件还原研判等

推荐引擎:推荐服务框架,用于实时预测用户对物品偏好,支持A/BTest效果对比

公众趋势分析:利用语义分析、情感算法和机器学习,分析公众对品牌形象、热点事件和公共政策的认知趋势

企业图谱:提供企业多维度信息查询,方便企业构建基于企业画像及企业关系网络的风险控制、市场监测等企业级服务

数据集成:稳定高效、d性伸缩的数据同步平台,为阿里云各个云产品提供离线(批量)数据进出通道

分析型数据库:在毫秒级针对千亿级数据进行即时的多维分析透视和业务探索

流计算:流式大数据分析平台,提供给用户在云上进行流式数据实时化分析工具

6、人工智能:

机器学习:基于阿里云分布式计算引擎的一款机器学习算法平台,用户通过拖拉拽的方式可视化的 *** 作组件来进行试验,平台提供了丰富的组件,包括数据预处理、特征工程、算法组件、预测与评估

语音识别与合成:基于语音识别、语音合成、自然语言理解等技术,为企业在多种实际应用场景下,赋予产品“能听、会说、懂你”式的智能人机交互体验

人脸识别:提供图像和视频帧中人脸分析的在线服务,包括人脸检测、人脸特征提取、人脸年龄估计和性别识别、人脸关键点定位等独立服务模块

印刷文字识别:将中的文字识别出来,包括身份z文字识别、门店招牌识别、行驶证识别、驾驶证识别、名片识别等证件类文字识别场景

7、云安全:

服务器安全(安骑士):由轻量级Agent和云端组成,集检测、修复、防御为一体,提供网站后门查杀、通用Web软件0day漏洞修复、安全基线巡检、主机访问控制等功能,保障服务器安全

DDoS高防IP:云盾DDoS高防IP是针对互联网服务器(包括非阿里云主机)在遭受大流量的DDoS攻击后导致服务不可用的情况下,推出的付费增值服务,用户可以通过配置高防IP,将攻击流量引流到高防IP,确保源站的稳定可靠

Web应用防火墙:网站必备的一款安全防护产品。通过分析网站的访问请求、过滤异常攻击,保护网站业务可用及资产数据安全

加密服务:满足云上数据加密,密钥管理、加解密运算需求的数据安全解决方案

CA证书服务:云上签发Symantec、CFCA、GeoTrustSSL数字证书,部署简单,轻松实现全站>

数据风控:凝聚阿里多年业务风控经验,专业、实时对抗垃圾注册、刷库撞库、活动作弊、论坛灌水等严重威胁互联网业务安全的风险

绿网:智能识别文本、、视频等多媒体的内容违规风险,如涉黄,暴恐,涉政等,省去90%人力成本

安全管家:基于阿里云多年安全实践经验为云上用户提供的全方位安全技术和咨询服务,为云上用户建立和持续优化云安全防御体系,保障用户业务安全

云盾混合云:在用户自有IDC、专有云、公共云、混合云等多种业务环境为用户建设涵盖网络安全、应用安全、主机安全、安全态势感知的全方位互联网安全攻防体系

态势感知:安全大数据分析平台,通过机器学习和结合全网威胁情报,发现传统防御软件无法覆盖的网络威胁,溯源攻击手段、并且提供可行动的解决方案

先知:全球顶尖白帽子和安全公司帮你找漏洞,最私密的安全众测平台。全面体检,提早发现业务漏洞及风险,按效果付费

移动安全:为移动APP提供安全漏洞、恶意代码、仿冒应用等检测服务,并可对应用进行安全增强,提高反破解和反逆向能力。

8、互联网中间件:

企业级分布式应用服务EDAS:以应用为中心的中间件PaaS平台、

消息队列MQ:ApacheRocketMQ商业版企业级异步通信中间件

分布式关系型数据库服务DRDS:水平拆分/读写分离的在线分布式数据库服务

云服务总线CSB:企业级互联网能力开放平台

业务实施监控服务ARMS:端到端一体化实时监控解决方案产品

9、分析:

E-MapReduce:基于Hadoop/Spark的大数据处理分析服务

云数据库HybirdDB:基于GreenplumDatabase的MPP数据仓库

高性能计算HPC:加速深度学习、渲染和科学计算的GPU物理机

大数据计算服务MaxCompute:TB/PB级数据仓库解决方案

分析型数据库:海量数据实时高并发在线分析

开放搜索:结构化数据搜索托管服务

QuickBI:通过对数据源的连接,对数据进行即席分析和可视化呈现。

参考资料:

百度百科-阿里云

springboot支持ibmmq消息队列步骤如下:

springboot只有在当前这个项目调用才会创建ibmmq队列,并不是项目启动就会创建,但是实际的开发中队列创建和发送应该是两个项目。

网络核心数据结构是套接字缓存(socket buffer),简称skb。它代表一个要发送或处理的报文,并贯穿于整个协议栈。1、套接字缓存skb由两部分组成:(1)报文数据:它保存了实际在网络中传输的数据;(2)管理数据:供内核处理报文的额外数据,这些数据构成了协议之间交换的控制信息。发送网络数据包:当应用程序向一个socket传输数据之后,该socket将创建相应的套接字缓存,并将用户数据拷贝到缓存中。当报文在各协议层传达输的过程中

消息队列之 RabbitMQ(推荐)

>

RabbitMQ是2007年发布,是一个在AMQP(高级消息队列协议)基础上完成的,简称MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法,由Erlang(专门针对于大数据高并发的语言)语言开发,可复用的企业消息系统,是当前最主流的消息中间件之一,具有可靠性、灵活的路由、消息集群简单、队列高可用、多种协议的支持、管理界面、跟踪机制以及插件机制。

1消息 就是数据,增删改查的数据。例如在员工管理系统中增删改查的数据

2队列 指的是一端进数据一端出数据,例如C#中(Queue数据结构)

1消息队列指:一端进消息,一端出消息

2RabbitMQ就是实现了消息队列概念的一个组件,以面向对象的思想去理解,消息队列就是类,而RabbitMQ就是实例,当然不仅仅只有RabbitMQ,例如ActiveMQ,RocketMQ,Kafka,包括Redis也可以实现消息队列。

1在常见的单体架构中,主要流程是用户UI *** 作发起>

以上就是关于消息队列(MQ)消息延迟及过滤设计方案全部的内容,包括:消息队列(MQ)消息延迟及过滤设计方案、请用白话讲解ActiveMQ的用途、阿里云有哪些产品和技术等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9780589.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存