Gearman分布式任务处理系统(六)持久化存储

PS:对于队列持久化的问题,是一个值得考虑的问题。持久化必然影响高性能。gearman支持后台工作任务的持久化,支持drizzle、mysql、memcached的持久化。对于client提交的background job,Job server除了将其放在内存队列中进行派发之外,还会将其持久化到外部的持久化队列中。一旦Job server发生问题重启,外部持久化队列中的background job将会被恢复到内存中,参与Job server新的派发当中。这保证了已提交未执行的background job不会由于Job server发生异常而丢失。并且我测试发现如果开启了持久化,那么后台工作任务会先将工作任务写到持久化介质,然后在入内存队列,再执行。非后台工作任务,由于client与job server是保持长连接的状态,如果工作任务执行异常,client可以灵活处理,所以无须持久化。
持久化队列:
0.6版本中新添的一项功能,允许将队列存放在drizzle或mysql中。
0.7版本允许将队列存放在memcached。
0.9版本可以将队列存放在sqlite3或postgresql。
在gearman job服务器内部,所有的job队列都是存放在内存中的,这就意味着一旦服务器重启或崩溃,未执行的job将会丢失而不会被worker服务器执行。持久化队列将后台作业存放在一个外部持久的队列中。持久化队列只对后台jobs有效,因为前台jobs依附于客户端。如果job服务器挡掉了,客户端会检测到,将会从其他地方重新启动这个前台job或者返回错误。而后台jobs没有依附于客户端,如果要想让它运行则需要提交。

Gearman队列的mysql持久化存储

gearmand-queues-mysql说明

支持mysql持久化

Tip:mysql安装指引

#gearmand源码编译增加 --with-mysql 参数并指向正确的lib路径
wget https://launchpad.net/gearmand/1.2/1.1.12/+download/gearmand-1.1.12.tar.gz;
tar -zxvf gearmand-1.1.12.tar.gz;
cd gearmand-1.1.12;
./configure --prefix=/usr/local/gearmand --with-mysql=/usr/local/mysql/bin/mysql_config;
make && make install;
#./configure编译后的提示如下:
---------
* Building with libsqlite3   yes   #持久化存储-sqlite
* Building with libdrizzle   yes   #持久化存储-libdrizzle
* Building with libmemcached not found #持久化存储-libmemcached
* Building with libpq        no   #持久化存储-libpq
* Building with tokyocabinet no   #持久化存储-tokyocabinet
* Building with libmysql     yes  #持久化存储-libmysql

mysql数据库创建

create database gearman;
use gearman;
create table `gearman_queue` (
`unique_key` varchar(64) NOT NULL,
`function_name` varchar(255) NOT NULL,
`priority` int(11) NOT NULL,
`data` LONGBLOB NOT NULL,
`when_to_run` INT, PRIMARY KEY  (`unique_key`)
)

gearmand启动mysql

/usr/local/gearmand/sbin/gearmand --queue-type=MySQL \
--mysql-host=localhost \
--mysql-port=3306 \
--mysql-user=admin \
--mysql-password=admin \
--mysql-db=gearman \
--mysql-table=gearman_queue;
#--queue-type mysql 队列类型:mysql
#-w 2 当接收到任务时如果所有进程休眠,只唤醒2工作线程
#libdrizzle启动mysql
gearmand -q libdrizzle --libdrizzle-host=127.0.0.1 --libdrizzle-user=gearman --libdrizzle-password=password --libdrizzle-db=gearman --libdrizzle-table=gearman_queue --libdrizzle-mysql

支持memcached准持久化

Tip:Memcached安装指引

#gearmand源码编译增加  --with-memcached
wget https://launchpad.net/gearmand/1.2/1.1.12/+download/gearmand-1.1.12.tar.gz;
tar -zxvf gearmand-1.1.12.tar.gz;
cd gearmand-1.1.12;
./configure --prefix=/usr/local/gearmand --with-memcached=/usr/local/memcached/bin/memcached;
make && make install;
/usr/local/gearmand/sbin/gearmand -d --queue-type=libmemcached --libmemcached-servers=127.0.0.1:11211
相关文章
  1. gearman应用-分布式图库系统设计
  2. Gearman分布式任务处理系统(五)通信协议
  3. Gearman-PHP扩展源码编译
  4. Gearman分布式任务处理系统(四)Gearmand源码编译
  5. Gearman分布式任务处理系统(三)分布式负载均衡架构
  6. Gearman分布式任务处理系统(二)Gearman工作流程细解
本站版权
1、本站所有主题由该文章作者发表,该文章作者与尘埃享有文章相关版权
2、其他单位或个人使用、转载或引用本文时必须同时征得该文章作者和尘埃的同意
3、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
4、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
5、原文链接:
二维码
Posted in Gearman, linux技术
Comments are closed.