IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

标签:消息队列

共 15 篇相关文章

IT 累计浏览 1,607

过去六年在小米搞(wa)错(keng)的几个技术细节

这篇来自小米早期技术团队的复盘文章,诚实地回顾了在搭建米聊及后续服务时,因经验不足和快速迭代而埋下的六个关键技术“坑”。它并非聚焦单一故障,而是从架构选型和工程实践的层面,剖析了那些当时看似合理、事后却带来长期困扰的决策。 文章逐一拆解了具体问题:比如早期使用 Nginx 代理 Java 服务时缺乏平滑发布机制,导致上线必然有损;监控体系只关注单个模块指标,无法有效定位跨模块交互的问题;以及在移动端网络环境下,选择 HTTP 协议框架在当时可能存在更优的 TCP 方案。在语言与存储选型上,作者反思了在缺乏深度专家的情况下选择 Java 带来的稳定性挑战,以及过度依赖 MySQL 为后期多机房容灾设下了障碍。最后,对 RabbitMQ 的泛滥使用提出了警示,指出了服务间调用关系不透明带来的运维灾难。 作者的核心观点在于:一些技术细节上的“将就”,会在业务规模增长后演变为系统性的瓶颈。这些来自实战的教训——无论是关于发布流程、监控哲学、通信协议还是存储设计——都揭示了前瞻性架构思考与技术深度对于构建大规模、可持续系统的重要性。

IT 累计浏览 4,373

RabbitMQ与Redis队列对比

这篇技术文章聚焦于RabbitMQ与Redis作为消息队列时的核心差异。作者从可靠消费、发布确认、高可用性、持久化、负载均衡等关键维度展开对比,指出Redis在消息可靠性和系统监控方面需要较多自行实现,而RabbitMQ内置了完整的确认、持久化和监控机制。 具体来看,两者在可靠消费上差异明显:Redis消费失败可能导致消息丢失,而RabbitMQ能自动将失败消息重归队列。性能测试数据显示,在处理128Bytes到10K的不同数据体量时,两者出入队性能各有特点。文章最终提炼出适用场景:Redis更适合轻量级、高并发的即时计算或缓存场景,例如秒杀计数器;RabbitMQ则更适用于需要保证消息可靠传递的批量异步处理或任务负载均衡。 文章并未给出绝对结论,而是强调最终选择需结合系统对可靠性、监控能力和实际负载的具体要求来综合权衡。

IT 累计浏览 2,036

Gearmand异步处理就安全了吗?不!

这篇讲的是一个实际生产中遇到的Gearman异步处理陷阱。当团队使用Gearman作为中间件时,发现Gearmand进程会莫名卡住,将PHP请求长时间“Hold”住,即便设置了超时也无效,这对PHP的同步工作模式风险很高。 问题最终被定位到使用Gearman的 `addFunction` 注册任务时,如果指定了 `timeout` 参数,便可能随机复现。通过 `pstack` 工具观察发现,故障时Gearmand的工作线程数量会减少。文章通过分析版本变更与源码指出,从0.33版本起增加的Worker超时处理特性,在底层依赖的libevent 1.4.x(非线程安全)环境下,导致了 `event_base` 对象被跨线程错误操作,从而使得工作线程的事件循环意外退出。 解决方案是从源码层面修正这一问题,例如将发生跨线程调用的 `event_base_set` 方法中的操作对象进行调整。作者最终建议,通过将 `addFunction` 的 `timeout` 参数临时设为0,可以规避此问题。这篇分享对使用Gearman或类似基于libevent组件的团队有很高的参考价值,尤其是在排查无响应卡顿问题时。

IT 累计浏览 3,175

互联网思维的企业,互联的企业

作者读完《互联网思维的企业》后,陷入了长考。他从自己早年的观察出发,指出“互联”才是沟通方式碎片化与身份实名化背后的真正趋势。这本书让他意识到,简单的技术应用只是表象,企业必须从根本上重构组织模式来应对这个新时代。 文章以客服部门为例,深刻剖析了传统“机械思维”的弊端:为效率设计的封闭流程,在社交网络时代反而可能放大负面口碑。书中提出,互联时代的企业应像有机生态一样生长——打破刚性部门墙,以开放平台取代严密控制,让团队在共同目标下自发协作、解决复杂问题。这需要领导者建立基于目标、立场与原则的“道德感召力”,而非事必躬亲。 作者认同这种“磁场”般的领导哲学,但也冷静指出,实现自组织需要员工具备高度的自驱力,这对人才提出了前所未有的要求。这篇文章最终引导我们思考:在追求互联与开放的同时,如何培育能适应这种土壤的个体?

IT 累计浏览 3,873

Feed消息队列架构分析

这篇讲的是微博为应对实时Feed流挑战而构建的消息队列架构。作者从数据流处理从离线走向实时的行业趋势切入,详细拆解了支撑海量社交信息流的底层架构。 核心是一个由三部分构成的体系:中间是feed主流程处理,通过MQ worker异步写入缓存和数据库,完成核心的削峰填谷;左侧是流式计算,用于大数据实时分析;此外还有负责多机房数据同步的“虫洞”模块。整个系统建立在几个关键单元上:单机队列MQ、支持一对多投递的统一通道Firehose(具备基于社交关系的fan-out能力),以及无状态的Worker。 架构设计上,文章强调了其高实时性(要求100ms内处理完成)、线性可扩展性与超高可用性(99.999%)。最后,文章还对比了LinkedIn Databus、Apache Storm和Kafka等技术路线,解释了为何其业务主动写入事件的方案在复杂分库场景下,比数据库触发方案更具原子性和简洁性。

IT 累计浏览 8,732

Feed架构-我们做错了什么

这篇讲的是微博技术团队在Feed架构演进中的一次坦诚复盘与反思。作者从团队过去几年成功解决的工程挑战切入——包括通过冷热分区设计应对长尾数据访问、利用数据库拆分实现存储扩展、依托缓存分级支撑百万级QPS,以及建设高可用的SLA体系。 但文章的重点不在这些成就,而是深入剖析了基于用户关系的分发架构在用户侧引发的“信息过载”问题。核心观点是:架构在解决了可扩展性与性能问题后,却造成了内容组织与消费效率上的新瓶颈。具体表现为:当前架构天然基于用户关系维度组织数据,这很难服务于更高效的“兴趣阅读”需求;同时,低质内容识别、实时反垃圾算法仍面临巨大技术挑战;此外,社交关系带来的“可解释性”要求(用户期望看到好友内容)也与纯粹的算法排序存在矛盾。 作者通过这次复盘,揭示了一个关键认知:Feed架构的难题已从纯粹的后端扩展性问题,转向了如何通过技术更好地理解与满足用户兴趣,同时平衡产品体验的复杂层面。这对于思考推荐系统与社交产品架构的未来方向,提供了很有价值的视角。

IT 累计浏览 3,508

分布式消息系统尝试(rabbitmq, celery, redis)

作者从统一游戏后台架构的需求出发,尝试使用Celery任务队列,并分别以RabbitMQ和Redis作为消息代理,来探索这套方案能否替代以前自研的C++ server通信模式。文章详细记录了在macOS下通过Homebrew安装RabbitMQ、启用其管理插件,并配置Redis和Celery的过程。 随后,作者通过一个简单的“加法”任务,对两种消息代理的性能进行了初步对比。在相同配置下,使用RabbitMQ时任务完成耗时约0.545秒,使用Redis时则约0.604秒。结果显示,在这个简单场景中两者的性能表现相近。 这篇文章为考虑引入任务队列的团队提供了一个具体的实践起点,展示了如何快速搭建并初步评估Celery+RabbitMQ或Celery+Redis这一组合。作者也指出,这只是初步测试,后续还需要对更多复杂场景和更高并发下的性能进行深入验证。

IT 累计浏览 2,687

UCMQ简介

这篇技术分享的主角是UCMQ,一个由UC Web开源的轻量级HTTP消息队列。作者坦诚,项目的初衷是改进类似HTTPSQS的方案,解决其底层TC存储因数据膨胀导致的内存与性能瓶颈。 UCMQ的核心设计思路是“去TC化”。它摒弃了传统的TC存储,转而采用更高效的日志文件存储方式。其关键在于数据被顺序写入内存映射的文件中,且缓存区域随读写指针移动,这种设计既大幅节省了内存开销,又保证了出色的读写性能。在特性上,它支持标准HTTP协议与长连接,单实例支持多队列动态管理,并能实时监控队列状态。 性能测试数据直观展示了其效果:在配备多核CPU和千兆网卡的环境下,无论是长连接还是短连接,其入队列、出队列速度均能稳定超过10000次/秒。文中也详细介绍了其包含控制模块、网络驱动、队列管理和存储模块的内部架构。尽管作者谦虚地称之为“拙劣的开端”,但文中扎实的架构图解与性能数据,已清晰勾勒出这款高性能HTTP MQ的轮廓。

IT 累计浏览 4,260

一些队列理论 吞吐量、延迟和带宽

这篇讲的是消息队列(以RabbitMQ为例)中一个看似微小却影响深远的配置——消费者的QoS预取缓冲区大小。作者从一个实际问题出发:不加限制的预取消息会填满客户端内存,导致新消费者无法获取任务,但设置多大才算合适? 文章的核心在于用简单的队列理论来计算最优值。作者举了一个具体例子:网络往返104ms,客户端处理一条消息需4ms,那么预取26条消息刚好能让客户端持续忙碌,同时最小化消息在客户端的等待时间。但这只是理想情况。 真正的挑战在于网络延迟或客户端处理速度的波动。如果预取值太小,网络稍慢客户端就空闲;如果为保险起见把预取值加倍,又会在网络正常时引入大量无谓的排队延迟,甚至可能让消息在客户端滞留近2秒,严重影响实时性。 于是,文章引出了一个更聪明的方案:采用可变缓冲区的主动队列管理算法,如“延迟控制”(CoDel)。作者分享了自己在Java AMQP客户端上的实验性实现,它通过监控消息在客户端缓冲区中的等待时间,动态地将“滞留”过久的消息重新放回队列。这使得系统能在客户端处理速度下降时自动分流压力,而在网络正常时保持低延迟。 不过,作者也坦言这种方案在AMQP中并非完美,因为重新入队消息本身有开销。设置合理的参数以确保仅在异常时干预,是当前使用的关键。

IT 累计浏览 2,311

读书:谣言

作者从微博这一社交场景出发,将《谣言》与《日常生活中的自我呈现》《脏话文化史》并置,揭示了社交网络信息生态的三大关键维度:个体的表演性呈现、公共话语的粗糙化,以及谣言的病毒式扩散。 这篇文章的核心观点在于,微博独特的转发机制极大地放大了谣言的传播效能。它并非简单地讨论谣言本身,而是将谣言的传播视为一种嵌入在特定技术架构(转发链)与社会行为(用户的自我呈现与语言习惯)中的现象。作者指出,正是“转发”这一功能,让未经核实的信息得以在社交网络中指数级传播,成为平台无法回避的突出特征。 这为我们理解当前的信息环境提供了一个生动的观察切片。它提醒读者,网络谣言不仅是内容真实性的问题,更是传播技术、用户心理与社会互动共同作用的结果。这种跨领域的思考方式,有助于我们更冷静地审视社交平台上的信息流动。

IT 累计浏览 12,088

Redis消息队列的若干实现方式

作者从搭建消息通知系统的实际需求出发,总结了使用Redis实现消息队列的多种方式。文章特别聚焦于PhpRedis扩展下的演示代码,让讲解更贴近实战。核心内容梳理了不同数据结构(如List、Sorted Set、Pub/Sub)构建队列的思路,对比了它们在顺序保证、消费确认与实时性上的关键差异。比如,作者指出List适合简单队列,Sorted Set便于延迟或优先级处理,而Pub/Sub更适用于广播场景。对于想要用Redis轻量级地处理异步任务的开发者来说,这篇文章清晰地厘清了各方案的适用边界与实现要点,帮助你在不同业务约束下做出合适的技术选型。

IT 累计浏览 2,950

微博的传播机制

这篇文章聚焦于2009年微博客的爆发性增长现象,并探讨其背后的传播机制。作者以全球视野切入,指出Twitter在当年成为最热门英语单词,这股浪潮也直接催生了国内微博客的繁荣,最终以新浪微博为代表开启了中国的“围脖时代”。 文章的核心观点在于,微博客这种“简单快捷、随时随地”的互动形式,不仅是一种新的互联网服务,更标志着一种全新的信息传播篇章的到来。它通过描述这一现象级产品的诞生与普及,揭示了技术形态(轻量化、即时性社交)如何重塑大众的信息交互习惯。 从具体细节来看,文中提到了“全球语言监测机构”的数据佐证,增强了观点的说服力。对于技术读者而言,这篇文章提供了一个观察互联网产品与传播模式演进的早期样本,其价值在于呈现了社交媒体从海外兴起并迅速本土化的关键节点,以及这种新载体所蕴含的传播势能。

IT 累计浏览 3,618

人人网Feed系统架构分析

这篇讲座实录来自人人网新鲜事技术经理张铁安在CSDN的分享,深入剖析了支撑着亿级用户的Feed流系统如何设计与演进。他从高并发、低延迟以及复杂的时间线生成需求出发,详细拆解了人人网Feed系统的架构演进路径。 核心方案围绕着“读写分离”和“最终一致性”展开。在写路径上,系统通过异步化、合并写以及使用本地缓存预聚合等方式,来应对突发的发布高峰。而读路径的优化则更为关键:为了在海量关注关系下快速生成用户的时间线,系统采用了基于“推拉结合”的策略,并巧妙地将时间线生成拆解为实时计算与异步预计算两个阶段。 演讲中特别提到了几个关键的技术点,例如利用Redis等内存数据库作为核心存储来保证读性能,以及如何设计“大V”这类特殊用户的处理逻辑,以避免海量粉丝带来的系统雪崩。通过这些架构上的权衡与优化,人人网Feed系统最终实现了在复杂社交关系下的稳定、高效运行,其思路对构建任何类似的社交内容分发系统都具有参考价值。

IT 累计浏览 3,267

体验腾讯微博之不足篇

这篇讲的是作者在2010年愚人节当天获得腾讯微博内测资格后的一次深度体验观察。相比同期其他互联网公司的节日营销,腾讯微博的上线显得颇为厚道,其“蒲公英”Logo和内部代号“Dandelion”也颇具巧思。 文章核心从作者的实际体验出发,着重分析了腾讯微博在功能、交互及信息设计一致性方面暴露出的不足。虽然集成QQ客户端、支持WAP和短信等多渠道发布信息,让人对产品体验产生了“向往性”,但作者通过亲身使用,具体指出了其中的缺陷。 这是一份来自产品早期用户的真实反馈。对于关注产品设计与迭代的读者而言,这类从实际体验中提炼出的具体问题点,往往比泛泛的功能介绍更有价值,也让我们看到一个新功能从设想落地到可用,中间需要跨越哪些现实的沟壑。

IT 累计浏览 2,351

活在微博混战的年代

这篇文章探讨的是国内微博产品的发展心态与路径。作者从一个核心主张切入:在国内做微博,首先应该“忘记Twitter”。 文章指出,Twitter确实定义了“微博”这个概念,但它的形态只是众多可能性中的一种。如果简单地将Twitter视为微博的全貌,就会限制产品的想象力。作者认为,真正围绕“微博”概念展开的产品会形态各异,需要根据本土市场和用户习惯去探索,而不是亦步亦趋地复制一个海外原型。其核心观点在于,创新的前提是跳出既定框架的束缚,承认概念的普适性与实现方式的多样性。 这种思考对当下的产品开发者依然有启发。它提醒我们,追逐热点或对标成功案例时,更要洞察概念本质,避免陷入“形似而神不似”的模仿困境。