行政机关单位网站建设规定,湖北省网站备案,wordpress yeti1.92,wordpress换域名教程1 Gearman简介 1.1 概况 Gearman是一个用来把工作委派给其他机器、分布式的调用更适合做某项工作的机器、并发的做某项工作在多个调用间做负载均衡、或用来在调用其它语言的函数的系统。 1.2 组成 Gearman是一个分发任务的程序架构#xff0c;由三部分组成#xff1a; 1…1 Gearman简介 1.1 概况 Gearman是一个用来把工作委派给其他机器、分布式的调用更适合做某项工作的机器、并发的做某项工作在多个调用间做负载均衡、或用来在调用其它语言的函数的系统。 1.2 组成 Gearman是一个分发任务的程序架构由三部分组成 1Gearman client提供gearman client API给应用程序调用。API可以使用C,PHP,PERL,MYSQL UDF等待呢个语言它是请求的发起者。 2Gearman job server将客户端的请求分发到各个gearman worker的调度者相当于中央控制器但它不处理具体业务逻辑。 3Gearman worker提供gearman worker API给应用程序调用具体负责客户端的请求并将处理结果返回给客户端。 1.3 应用
Mogilefs的分布式文件系统的核心就是用gearman实现的。 这个软件的应用场景很多比如视频网站的视频处理分布式日志处理电子邮件处理文件同步处理图片处理等等只要是可以放开不影响体验和响应的场 景需要并行进行大量计算和处理的程序都是可以的。Yahoo在60或更多的服务器上使用gearman每天处理600万个作业。新闻聚合器digg构建 了一个相同规模的gearman网络每天可处理400000个作业。 Gearman不但可以做为任务分发还可以做为应用方面的负载均衡。可以让worker放在不同的一堆服务器上也可以启动放在同一个cpu的多个核 上。比如应用视频转换程序不希望web服务器来处理视频格式转换这时可以在这一堆服务器上进行任务分发在上面加载worker处理视频格式对 外的web服务器就不会被视频转换过程影响。而且扩展方便加一台服务器到任务调度中心注册成worker即可这时job server会在请求到来的时候将请求发送给空闲的worker。还可以运行多个job server组成ha架构如果一个job server当掉了client和worker会自动迁移到另一台job server上。 1.4 工作原理图 2 运行过程 一个Gearman请求的处理过程涉及三个角色Client - Job - Worker。
Client请求的发起者可以是 CPHPPerlMySQL UDF 等等。 Job请求的调度者用来负责协调把 Client 发出的请求转发给合适的 Work。 Worker请求的处理者可以是 CPHPPerl 等等。 因为 ClientWorker 并不限制用一样的语言所以有利于多语言多系统之间的集成。 甚至我们通过增加更多的 Worker可以很方便的实现应用程序的分布式负载均衡架构。
3 Gearman下载 1)官网 http://gearman.org/ 2官网下载 https://launchpad.net/gearmand 3官网使用向导 http://gearman.org/getting-started/ 3)本次安装用到的所有软件下载地址安装环境为CentOS-6.5 http://download.csdn.net/detail/clevercode/8698699
4 Gearman安装 4.1 安装linux必备常用库 Linux中必备常用支持库的安装http://blog.csdn.net/clevercode/article/details/45438401 4.2 安装gearmand依赖的库 # yum install -y boost-devel gperf libevent-devel libuuid-devel 4.3 安装gearmand服务 1解压 # cd /usr/local/src/gearman # tar xzf gearmand-1.1.12.tar.gz 2配置 # cd gearmand-1.1.12 # ./configure 3编译 # make 4)安装 # make install 5)安装成功图输入 # gearman 5 安装php扩展 1)安装phpize # yum install -y php-devel 2解压 # cd /usr/local/src/gearman # tar xzf gearman-1.1.2.tgz 3配置 # cd gearman-1.1.2 # phpize # ./configure 4编译 # make 5)安装 # make install 6)安装成功 出现“Installing shared extensions: /usr/lib64/php/modules/”表示安装成功/usr/lib64/php/modules/是gearman.so扩展的目录。如图 7配置(加入扩展) # vi /usr/local/php5/etc/php.ini extensiongearman.so 8查配置是否成功 # vi test.php ?php print gearman_version() . \n; ? 执行php test.php后出现1.1.12表示安装成功 # php test.php 1.1.12
6 Gearman启动停止 1) 创建日志/data0/logs/gearmand.log # touch /data0/logs/gearmand.log 2启动 # /usr/local/sbin/gearmand -d -u root -L 192.168.142.130 --log-file/data0/logs/gearmand.log 3参数详解 -b--backlog 储备的监听连接数量 -d, --daemon 后台运行 -f, --file-descriptors 文件描述符的数量 -h, --help 帮助 -j, --job-retries 在ob server移除不可用job之前运行的次数防止不断运行导致其他可用worker崩溃。默认没有限制 -l, -log-file 日志文件存放位置(默认记录最简单日志) -L, --listen 监听的IP默认全部接受 -p, --port 指定监听端口 -P, --pid-file 指定进程ID写入位置 -r, --protocol 加载协议模块 -q, --queue-type 指定持久化队列 -t, --threads 使用的I/9线程数量。默认为0 -u, --user 启动后切换到指定用户 -v, --verbose 增加一级详细程度 -V, --version 显示版本信息 4查是否运行 # ps axu | grep gearmand 5查看监听端口 # netstat -anp | grep 4730 6停止直接kill掉进程。 7 Gearman使用 7.1 创建Worker 创建worker.php创建一个发送邮件的Worker端。代码如下 ?php$worker new GearmanWorker();
$worker-addServer(192.168.142.130, 4730);
$worker-addFunction(sendMail, my_sendmail_function);
while ($worker-work());function my_sendmail_function($job){// 接收数据$tmp $job-workload();$receiveArr unserialize($tmp);$from $receiveArr[from];$to $receiveArr[to];$subject $receiveArr[subject];$content $receiveArr[content];//发送邮件//....return $subject. sendmail OK;
}? 7.2 启动Worker端 如果处理的数据量大可以执行以下脚本多次即启动多个Worker端。 # nohup php worker.php tmp.txt
7.3 创建Client阻塞模式需要等待返回结果才结束 创建一个client.php。do()方法是阻塞模式必须等待worker端返回结果程序才能停止。如图返回hello Gearman sendmail OK
?php$client new GearmanClient();
$client-addServer(192.168.142.130, 4730);$job array();
$job[from] CleverCode;
$job[to] Gearman;
$job[subject] hello Gearman;
$job[content] hello Gearmanthis is from GearmanClient;
$job serialize($job);//等到worker端返回结果才会结束。
$ret $client-do(sendMail, $job);echo $ret.\r\n;? 7.4 创建Client非阻塞不用等结果 创建一个client2.php。doBackground()不用等待worker端返回结果程序就结束了。 ?php$client new GearmanClient();
$client-addServer(192.168.142.130, 4730);$job array();
$job[from] CleverCode;
$job[to] Gearman;
$job[subject] hello Gearman;
$job[content] hello Gearmanthis is from GearmanClient;
$job serialize($job);//不等待返回结果就会结束
$ret $client-doBackground(sendMail, $job);
echo $ret.\r\n;? 8 Gearman管理 输入以下命令查看4730端口情况。 # (echo status ; sleep 2 ) | telnet 192.168.142.130 4730 1字段说明已知注册的任务 正在运行的任务 队列中的任务 可用的 Worker. 2sendMail 0 0 1注册的任务名为 sendMail0 个正常在运行队列为空有一个可用的 Worker. 版权声明 1原创作品出自CleverCode的博客转载时请务必注明以下原创地址否则追究版权法律责任。
2原创地址http://blog.csdn.net/clevercode/article/details/45718735转载务必注明该地址。
3博客专栏地址(Linux常用软件安装与配置)http://blog.csdn.net/column/details/linuxsoftwareinstall.html持续增加关注请收藏。
4欢迎大家关注我博客更多的精彩内容http://blog.csdn.net/CleverCode。 技术交流
方式一个人微信
CleverCode是一名架构师技术交流咨询问题请加CleverCode个人微信号clever_code 方式二qq群
CleverCode是一名架构师技术交流咨询问题请加CleverCode创建的qq群(架构师社区):517133582