Web应用中为什么会需要消息队列?主要原因是由于在高并发环境下,由于来不及同步处理,请求往往会发生堵塞,比如说,大量的insert,update之类的请求同时到达mysql,直接导致无数的行锁表锁,甚至最后请求会堆积过多,从而触发too many connections错误。通过使用消息队列,我们可以异步处理请求,从而缓解系统的压力。在Web2.0的时代,高并发的情况越来越常见,从而使消息队列有成为居家必备的趋势,相应的也涌现出了很多实现方案,像Twitter以前就使用RabbitMQ实现消息队列服务,现在又转而使用Kestrel来实现消息队列服务,此外还有很多其他的选择,比如说:ActiveMQ,ZeroMQ等。
上述消息队列的软件中,大多为了实现AMQP,STOMP,XMPP之类的协议,变得极其重量级,但在很多Web应用中的实际情况是:我们只是想找到一个缓解高并发请求的解决方案,不需要杂七杂八的功能,一个轻量级的消息队列实现方式才是我们真正需要的。
第一感觉是能不能使用memcached来实现消息队列?稍加考虑后就会发现它不合适,因为memcached仅仅支持键值方式的操作,没有排序之类的功能,所以如果要用它来实现消息队列,则必须自己通过某个键来保存数组形式的队列,不过这样的话,在操作队列的时候很容易丢失数据,比如说我们要添加一个消息,则需先取出现有队列,然后把消息保存到队列尾部,最后保存队列,单纯使用memcached的话,由于我们无法保证整个过程的原子性,所以当处理若干个并发请求时,各个请求间可能会互相覆盖,丢失数据就在所难免。另外,memcached只是内存键值缓存而已,一旦宕机,数据就消失了。
memcacheq的出现解决了上面的问题,它在memcached的基础上实现了消息队列,以php客户端为例:
消息从尾部入栈:memcache_set
消息从头部出栈:memcache_get
memcacheq依附于memcached之上,所以你可以通过现有的memcached工具来操作它,这无疑是它的一大优势,但它也有一个很大的缺点,那就是memcacheq本身的开发维护似乎并不活跃,如果遇到问题的话,你很可能需要自己动手解决。
memcachedq安装:
1.安装linux开发工具包
(1)在可视化窗口下载打开”添加删除程序”,找到”开发->开发工具”打钩,更新.插入对应的linux安装盘.
2.安装依赖包
Berkeley DB 4.7 (经试验只能用4.7版本,使用4.8版本时memcacheQ-0.1.1版本编译不通过)
Download from
How to install BerkekeyDB:
$tar xvzf db-4.7.25.tar.gz
$cd db-4.7.25/
$cd build_unix/
$../dist/configure
$make
$sudo make install
libevent 1.4.x
Download from
How to install libevent:
$tar xvzf libevent-1.4.x-stable.tar.gz
$cd libevent-1.4.x-stable
$./configure
$make
$sudo make install
系统需要动态加载新的lib,编辑/etc/ld.so.conf,在末尾加入两行:
/usr/local/lib
/usr/local/BerkeleyDB.4.7/lib
注意FREEBSD下没有id.so.conf可以加入到环境变量中
vi /etc/profile
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib:/usr/local/BerkeleyDB.4.7/lib
保存后,运行 ldconfig -v 命令.
3.安装memcacheQ
$tar xvzf memcacheq-0.1.x.tar.gz
$cd memcacheq-0.1.x
$./configure –enable-threads
$make
$sudo make install
4.启动memcacheQ
memcacheq -d -r -u wuf -p21201 -H /data1/memcacheq -N -v -L 1024 -B 1024 > /data1/mq_error.log 2>&1
-d 后台运行
-p 指定监听端口,这里端口是21201
-H 数据文件存放路径,这里是/data1/memcacheq(必须事先建好目录)
-u 指定已什么用户运行,memcacheq不允许已root运行,所以必须指定一个用户.
注:指定的用户必须有数据文件的读写权限,如这里的/data1/memcacheq和/data1目录.
可以使用”chown 用户名 目录” 的命令给目录授权.
5.关闭memcacheQ
使用ps命令查查memcacheQ的进程:ps -ef|grep wuf,然后直接将进程kill掉.
分享到:
相关推荐
【标题】:“解析Linux下安装memcacheq(mcq)全过程笔记” 【描述】:这篇文档详细介绍了在Linux环境中安装memcacheq的过程,memcacheq是一个轻量级的分布式消息队列服务,适用于缓解高并发环境下的系统压力。 ...
Linux环境下安装MemcacheQ(mcq)的全过程涉及多个步骤,包括安装前的准备、安装过程以及如何启动MemcacheQ服务。以下是从标题、描述和部分内容中提取的知识点: 1. MemcacheQ的应用背景和必要性 - 高并发Web应用...
"rar文件解压后得到memcacheq-0.2.0.tar.gz"这部分意味着原始资源可能是一个RAR压缩文件,解压后我们得到了一个tar.gz格式的归档文件,这是Unix/Linux环境下常见的源代码打包方式。 在Linux或Unix系统中,`.tar.gz`...
在Linux系统中,Memcached和Memcacheq是两种常用的内存缓存系统。Memcached是一个高性能、分布式的内存对象缓存系统,用于减少数据库负载,提高网站性能。而Memcacheq是Memcached的一个增强版本,增加了队列管理功能...
- [Linux 下安装 memcached 及 memcacheq 的方法](https://example.com) - [在 Linux 服务器上安装 memcached 的基本操作](https://example.com) - [PHP 模块 memcache 和 memcached 区别分析](https://example.com)...
相比之下,Pull模式下,微博发布只存储在用户自己的发送箱中,查看时再从关注对象的收件箱中拉取信息。这种方式节省了存储空间,但每次查看时需要处理的计算量较大。 微博架构面临的挑战之一是峰值流量的处理,如在...
为了提高发表速度和系统的可靠性,引入了异步处理机制,如MemcacheQ和stats queue,进一步提升了在高并发下的系统稳定性。同时,数据库层面引入了InnoDB引擎,以解决MyISAM的锁表问题,通过PHP中的libmemcached替换...
此外,引入了异步处理,如发表异步化,使用MemcacheQ增强了系统的可靠性,并增加了stats queue,以适应大规模运维。 然而,随着系统继续高速发展,新的挑战接踵而至,如单点故障、"雪崩"效应、国内网络环境的复杂性...
- 安装Redis服务器,通常在Linux环境下,如Ubuntu 12.04 LTS,使用`apt-get install redis-server`即可。 - 安装Composer,用于管理PHP依赖。在终端执行`apt-get install curl`,然后下载并安装Composer:`curl -s ...
在这一阶段,优化了推送模式,减少不必要的全用户推送,减轻了存储和发表的峰值压力,同时引入了异步处理机制,比如使用MemcacheQ进行队列管理,以提高发表速度和系统的可靠性。此外,为了应对数据规模的扩大,采用...
此外,发表过程被异步化,使用MemcacheQ进行队列管理,提升了系统的稳定性和可靠性。 随着用户基数的持续扩大,微博面临了单点故障、访问速度和数据压力等问题。为解决这些问题,微博转向了服务化的架构,将平台...
- **消息队列产品**:例如Twitter的Kestrel、Erlang编写的RabbitMQ以及在新浪微博广泛使用的Memcacheq,这些轻量级的消息队列服务能够有效地处理高并发场景,确保系统的可扩展性和稳定性。 3. **微博系统的扩展性*...
- **libmemcached替代memcache**:提高了高并发下的稳定性。 - **使用MemcacheQ**:增强了系统的异步处理能力。 - **面临的新挑战**: - **单点故障**:需要解决单点故障问题,避免系统“雪崩”效应。 - **数据...
- **LVS**: Linux Virtual Server,基于Linux 内核模块实现的负载均衡解决方案。 - **Nginx**: 高性能的HTTP 和反向代理服务器,广泛应用于Web 服务器、负载均衡等领域。 #### 八、分布式文件系统 分布式文件系统...