摘要: 默认的yum是没有gearmand的,需要添加源。[html]view plaincopyrpm-ivhhttp://dl.iuscommunity.org/pub/ius/stable/Redhat/6/x86_64/epel-release-6-5.noarch.rpm源添加完后[html]view plaincopyyuminstallgearmandlibgearman-devel[html]view plaincopywgethttp://pecl.php.net/get/gearman获取php-gearman扩展然后解压后./phpize./configure./make &am 阅读全文
posted @ 2014-03-27 15:12 shenming 阅读(271) 评论(0) 推荐(0) 编辑
摘要: dbHost = $dbHost; $this->dbName = $dbName; $this->dbUser = $dbUser; $this->dbPass = $dbPass; while(!$this->connect()){ sleep(1); echo "初始化数据库连接失败\n"; }; } public function connect(){ try{ $this->dbObj = new PDO("mysql:host={$this->dbHost};dbname={$this->dbName};cha 阅读全文
posted @ 2014-03-27 15:10 shenming 阅读(1390) 评论(0) 推荐(0) 编辑
摘要: 关于队列持久化的问题听起来很美好,实际上并不实用。Gearman的队列,可以支持客户端的高并发请求,如果使用了持久化,那么持久化数据库这里将是一个性能瓶颈,客户端的高并发写,持久化数据库这里写的速度跟不上,这样还不如分配给worker处理,至少worker可以是并发的插入并且可以有负载均衡。而且从架构角度讲,Job Server是一个中间件,它不应该直接访问数据库。持久化可以用,但是应该就不是高并发的应用,那么可以有更简单的方法:客户端直接插表,服务端直接读表,这个表就是队列。使用Gearman主要是利用其队列和任务分发的功能,如果考虑队列持久化,不如直接用Redis这种KV数据库做队列。Ge 阅读全文
posted @ 2014-03-27 15:04 shenming 阅读(285) 评论(0) 推荐(0) 编辑
摘要: 我们以前是做一个营帐系统,C/S架构,前台Delphi做界面,后台是是一个自己实现的内存交互的网络中间层,后台是Unix+C+Informix数据库。由于大热所趋的B/S架构,加之硬件的更新,而Informix数据库又只能运行在Unix数据,驱动很难找,所以决定改架构。由于我们后台只对C语言比较熟悉,对JAVA不熟,而且系统主要是面向营业厅,所以对并发要求不是特别大,因此我们决定用LAGMCP的架构。即,Linux+Apache+PHP+Gearman+C+MySQL架构。Gearman也算是比较多的被运用于生产的队列中间件,有丰富的开发库,对于中小型系统也够用了。我们目前的架构大体如下:如图 阅读全文
posted @ 2014-03-27 15:03 shenming 阅读(326) 评论(0) 推荐(0) 编辑
摘要: 这篇重点介绍C-Lib库及client和worker的开发,以0.14版libgearman for C来讲解Client APIclient初始化&析构gearman_client_st *gearman_client_create(gearman_client_st *client)void gearman_client_free(gearman_client_st *client)gearman_return_t gearman_client_add_server(gearman_client_st *client, const char *host, in_port_t por 阅读全文
posted @ 2014-03-27 15:02 shenming 阅读(777) 评论(0) 推荐(0) 编辑
摘要: Gearman工作流程细解一次正常的Gearman任务执行流程如上图所示:worker向Gearman Server注册自身可以执行的功能worker尝试获取一个任务server通告worker暂无任务worker通告server:“我先睡会,有活干时再叫醒我”client向server发起任务请求server唤醒可以完成这项工作的worker(可能会唤醒多个woker)worker向server发起“饥饿”请求,尝试获得一个任务server选定一个worker,将该任务分配下去通告client:“我安排别人处理你的请求了,耐心等待吧”worker辛苦工作一段时间后,向server通告“干完了 阅读全文
posted @ 2014-03-27 15:01 shenming 阅读(770) 评论(0) 推荐(0) 编辑
摘要: 现代计算环境最大的挑战之一就是工作分布和计算资源的有效利用。目前的一般趋势是,便宜且轻松地安装一台强大的机器来执行比较直观和简单的任务,但是这可能得不到最佳的总体性能和机器的最佳利用。相反,很多应用程序现在发现自己需要执行一些相当小的操作,但是可能要执行成千上万次,不需要一台强大的机器。随着计算场(farm)的增大,有时候需要跨所有机器同时执行一个动作或操作,或者有选择地执行管理或安装任务。有很多解决方案可用。例如,虚拟化是其中一种方式,采用此方式时,计算机会被分片,以得到最佳的性能,尽管这些方式也有其各自的问题和局限性。memcached 工具(它采用备用内存)和类似于网格的解决方案 —— 阅读全文
posted @ 2014-03-27 15:00 shenming 阅读(326) 评论(0) 推荐(0) 编辑
摘要: Gearman版本Gearman网址:gearman.org0.14是标准C的版本,适合研究源码0.33是C++版本,增加了gearadmin工具1.1.11是最新版本对于任务高度功能来说,各版本变化不大,主要的变化 是持久化功能与开发库的变化安装Gearman一、安装gearman服务1.安装libeventtar xzvf libevent-2.0.4-alpha.tar.gzcd libevent-2.0.4-alpha./configure --prefix=/usr/local/libevent & make & make install2.安装gearmandtar 阅读全文
posted @ 2014-03-27 14:59 shenming 阅读(535) 评论(0) 推荐(0) 编辑
摘要: Gearman协议工作于TCP之上,默认使用4730端口。它之前使用端口7003,但与AFS的端口范围冲突,4730端口是由IANA分配的。client和jobserver间,以及worker与jobserver间存在通信交互,这两种情况下的通信协议都是由请求包和响应包组成。所有发送到jobserver的包都认为是请求,所有由jobserver发送的包都认为是响应。一种简单的配置例子是这样的:---------- ---------- ---------- ----------|Client | | Client | | Client | | Client |---------- ------ 阅读全文
posted @ 2014-03-27 14:58 shenming 阅读(417) 评论(0) 推荐(0) 编辑
摘要: 为确保具备对海量任务调度的支持能力,Gearman毫无悬念的选择libevent作为网络操作支撑库。libevent是一个事件触发的网络库,适用于windows、linux、bsd等多种平台,内部使用select、epoll、kqueue等系统调用管理事件机制。著名分布式缓存软件memcached也是libevent based,而且libevent在使用上可以做到跨平台,而且根据libevent官方网站上公布的数据统计,似乎也有着非凡的性能。编译库代码,编译脚本会判断OS支持哪种类型的事件机制(select、epoll或kqueue),然后条件编译相应代码,供上层使用的接口仍然是保持统一的( 阅读全文
posted @ 2014-03-27 14:57 shenming 阅读(412) 评论(0) 推荐(0) 编辑