消息队列

  最近几年,团购、秒杀等购物应用异常火爆,既然购物,就涉及数据库操作。那么这么大的冰法是怎么处理的?不会吧数据库搞垮吗?答案是肯定的。一个解决办法就是把HTTP请求放入内存中的高速队列,然后对队列里的数据按一定的规则进行分流处理,这就是HTTP请求队列。

  比如,微博和SNS通常拥有上亿的受众数量,一个明星或者公众人物可能有几千万粉丝,如果一个公众物发了一条微博,那么就得推送到所有关注者那里(有推策略、拉策略、随机策略、优先策略等),这时就必须用到队列了。

  随着网站用户数量的增加,若在前端页面直接写入大量数据,会延长用户的等待时间,在多并发的情况下,页面效率低、压力集中。为了解决上述问题,考虑使用数据的异步处理。而消息队列背后实质就是一种“异步处理”的思想。

 

1、队列(queue)和栈一样,是一种线性表结构,不过队列是一种先进先出(FIFO)的数据结构。队列只允许在后端进行插入操作,在前端进行删除操作。

2、我们发微博时,其实我们可以注意到,好友动态本身不必具有十分高的实时要求。所以,我们采用异步的推,把动态推给好友,而不是好友主动拉取。

3、“消息队列”的原理:

    ”消息队列“是在消息的传输过程中保存消息的容器。消息队列管理器在将消息从它的源中继到它的目标时充当中间人的角色。队列主要提供路由并保证消息的传递;如果发送消息时接收者不可用,消息队列会保留信息,直到成功传递。利用消息队列可以很好地异步处理数据传送和存储,当频繁地向数据库插入数据时,就可采用消息队列异步插入。另外,可将比较慢的处理逻辑、有并发数量限制的处理逻辑,通过消息队列放在后台处理,例如视频转发、发送手机短信等。

      注意:在队列中存储的是消息,而不是实际要分发和处理的数据。秒杀队列中存储的仅仅是一个HTTP请求,SNS队列中存数的仅仅是一个制造出来的动态,而不是所有要分发的动态。动态的分发不是消息队列所负责,其由另一个程序处理

4、消息队列需要一个轮询调度的程序,通过定制的调度把原先一瞬间可能发送的成千上万动态分发插入的操作延迟,并且是定制分发量,把高峰期的负载分一部分到低谷时间进行处理,这样能减少很多负担。  

 

posted @ 2015-01-29 20:38  __kelly_  阅读(1453)  评论(0编辑  收藏  举报