摘要: 默认的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 阅读(273) 评论(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 阅读(1404) 评论(0) 推荐(0) 编辑
摘要: 关于队列持久化的问题听起来很美好,实际上并不实用。Gearman的队列,可以支持客户端的高并发请求,如果使用了持久化,那么持久化数据库这里将是一个性能瓶颈,客户端的高并发写,持久化数据库这里写的速度跟不上,这样还不如分配给worker处理,至少worker可以是并发的插入并且可以有负载均衡。而且从架构角度讲,Job Server是一个中间件,它不应该直接访问数据库。持久化可以用,但是应该就不是高并发的应用,那么可以有更简单的方法:客户端直接插表,服务端直接读表,这个表就是队列。使用Gearman主要是利用其队列和任务分发的功能,如果考虑队列持久化,不如直接用Redis这种KV数据库做队列。Ge 阅读全文
posted @ 2014-03-27 15:04 shenming 阅读(286) 评论(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 阅读(327) 评论(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 阅读(788) 评论(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 阅读(779) 评论(0) 推荐(0) 编辑
摘要: 现代计算环境最大的挑战之一就是工作分布和计算资源的有效利用。目前的一般趋势是,便宜且轻松地安装一台强大的机器来执行比较直观和简单的任务,但是这可能得不到最佳的总体性能和机器的最佳利用。相反,很多应用程序现在发现自己需要执行一些相当小的操作,但是可能要执行成千上万次,不需要一台强大的机器。随着计算场(farm)的增大,有时候需要跨所有机器同时执行一个动作或操作,或者有选择地执行管理或安装任务。有很多解决方案可用。例如,虚拟化是其中一种方式,采用此方式时,计算机会被分片,以得到最佳的性能,尽管这些方式也有其各自的问题和局限性。memcached 工具(它采用备用内存)和类似于网格的解决方案 —— 阅读全文
posted @ 2014-03-27 15:00 shenming 阅读(329) 评论(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 阅读(542) 评论(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 阅读(425) 评论(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 阅读(418) 评论(0) 推荐(0) 编辑
摘要: 对于绝大多数发展中等的web 2.0网站来说,LAMP结构已经不能满足现在的需要了,新的架构组合是GLAMMP,G=Gearman(分布式远程过程处理),M=Memcached(高性能的分布式的内存对象缓存系统)。Gearman的高级特性在一个 Web 应用程序内可能有许多地方都会用到 Gearman。可以导入大量数据、发送许多电子邮件、编码视频文件、挖据数据并构建一个中央日志设施 — 所有这些均不会影响站点的体验和响应性。可以并行地处理数据。而且,由于 Gearman 协议是独立于语言和平台的,所以您可以在解决方案中混合编程语言。比如,可以用 PHP 编写一个 producer,用 C、Ru 阅读全文
posted @ 2014-03-27 14:56 shenming 阅读(715) 评论(0) 推荐(0) 编辑
摘要: Gearman介绍Gearman是一个用来把工作委派给其他机器、分布式的调用更适合做某项工作的机器、并发的做某项工作在多个调用间做负载均衡、或用来在调用其它语言的函数的系统。通常,多语言多系统之间的集成是个大问题,一般来说,人们多半会采用 WebService 的方式来处理此类集成问题,但不管采用何种风格的WebService,如 RPC 风格,或者 REST 风格,其本身都有一定的复杂性。相比之下,Gearman 也能实现类似的作用,而且更简单易用。对于分布式网络环境或者有大量任务的应用,我们需要将任务在不同的服务器之间进行分布,这个时候正好是Gearman发挥实力的时候。虽然我们也可以使用 阅读全文
posted @ 2014-03-27 14:55 shenming 阅读(405) 评论(0) 推荐(0) 编辑
摘要: 日志未经声明,均为AlloVince原创。版权采用『 知识共享署名-非商业性使用 2.5 许可协议』进行许可。 选择语言​▼对于变化频率非常快的数据来说,如果还选择传统的静态缓存方式(Memcached、File System等)展示数据,可能在缓存的存取上会有很大的开销,并不能很好的满足需要,而Redis这样基于内存的NoSQL数据库,就非常适合担任实时数据的容器。但是往往我们又有数据可靠性的需求,采用MySQL作为数据存储,不会因为内存问题而引起数据丢失,同时也可以利用关系数据库的特性实现很多功能。所以就会很自然的想到是否可以采用MySQL作为数据存储引擎,Redis则作为Cache。而. 阅读全文
posted @ 2014-03-27 14:52 shenming 阅读(285) 评论(0) 推荐(0) 编辑