技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 查看专题: 队列
    本文仅针对RabbitMQ与Redis做队列应用时的情况进行对比。 具体采用什么方式实现,还需要取决于系统的实际需求。
    最近一两年,大部分系统的数据流由基于日志的离线处理方式转变成实时的流式处理方式,并逐渐形成几种通用的使用方式,以下介绍微博的消息队列体系。
    近期在项目中用到了无锁队列 (lock free queue)这个东西,在项目中后台需要收集数据,待收集完整后需要落地,如果收集和落地都由一个进程来做,效果不好。无锁队列是蛮实用的一种数据结构。譬如,当一些后台的任务,写数据库,文件等,会出现较长时间的阻塞,可以交由后台进程去处理。这时候就涉及 IPC 方面的知识。当然,完全可以使用 fifo,mq 之类的系统预置的调用,但频繁的系统调用是吃不消的。
     通常看到 TCP Small Queue (简称 TSQ)之后第一问题是,既然我们已经有 tcp_wmem 了,为何还需要一个新的 sysctl? 这个问题是理解 TSQ 的关键,其实 tcp_wmem 仅仅是从 TCP socket 层限制队列(或 buffer)...
    状态同步,简单说就是一个玩家的 Agent 在做一个动作时,它需要把这个行为通知所有在虚拟场景中他附近的玩家。当很多人(超过 50 人)在一起时,就有大量的数据包需要广播出去。我们目前的做法是基于这样一个假设:服务器内部数据包的传递非常廉价。广播包比逐个发送更加廉价,这是因为,单机内部广播,可以避免大量的数据复制。所以,在同一张地图上,我们会简单的把任意一个 Agent 的状态改变信息广播给同张地图的所有其他人。这样就不需要动态维护分组信息。当每个 Agent 收到广播包后,再根据自身的逻辑进行过滤,再发给对应的客户端。
    你有一个队列在Rabbit中。你有一些客户端从该队列消费。如果你完全不配置QoS设置(basic.qos),这样Rabbit将以网络和客户端容许的尽可能快地速度发送队列中的所有消息到客户端。因为消费者在自己的RAM中缓存所有的消息,他们的内存将暴涨。如果你查询Rabbit,可能出现队列中是空的,但可能有以百万计的未确认的消息,因为它们在客户端,等待客户端应用程序处理。如果您添加了一个新的消费者,没有消息保留在队列中以被发送到新的消费者。消息只是被缓存在现有客户中,并有可能在那很长一段时间,即使有其它变为可用的消费者可以更快处理这些消息。这很不理想。
     我们知道 Gearman 的任务是一个数组结构,只存在内存中,一断电怎么样这个信息就会不存在。所以新的 gearman 开发了一个功能,就是通过 mysql 来存储任务信息。这样可以持久的保持任务的...
    我花了一周的时间评估比较了一下各种消息队列产品,非常的有趣。我做这个事的动机是因为一个客户有一个很高性能需求。他们的消息信息突破了1百万个并发。目前他们使用的是SQL server,并不理想,我建议他们使用消息队列服务器。 为了对一些相似的候选产品获得一个全面的但是粗浅的性能上的了解,我们它们放在一起做了个测试。我让每个消息产品各发送和接受1百万千条1K的消息...
    Offline系统简介 导购搜索(一淘网)系统类似一个购物垂直搜索引擎,收录和购物相关的各种信息,并以各种不同数据来源为单位呈现给终端用户,供其做购物决定时参考。 Offline系统是连接数据源和存储的中间环节,接收从各种数据源过来的数据,经过加工后存储到存储系统中。更详细的一淘网技术简介请参考 一淘网技术简介 Offline系统考虑的要求 1. 能灵活接收各种数据源 Offline的数据源大致可以分为两种 a. 无固定格式...
    多线程队列(Concurrent Queue)的使用场合非常多,高性能服务器中的消息队列,并行算法中的Work Stealing等都离不开它。对于一个队列来说有两个最主要的动作:添加(enqueue)和删除(dequeue)节点。在一个(或多个)线程在对一个队列进行enqueue操作的同时可能会有一个(或多个)线程对这个队列进行dequeue操作。因为enqueue和dequeue都是对同一个队列里的节点进行操作,为了保证线程安全,一般在实现中都会在队列的结构体中加...
    由于之前一个server用到后台线程的功能,所以写了一个线程+队列的通用模型。(代码见文章底的附件)应用场景:当处理的数据不影响回包,即可以在后台执行。使用方式:一个(或多个)...
[ 共11篇文章 ][ 第1页/共1页 ][ 1 ]
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1