<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Tim[后端技术] &#187; gearman</title>
	<atom:link href="http://timyang.net/tag/gearman/feed/" rel="self" type="application/rss+xml" />
	<link>http://timyang.net</link>
	<description>Tim&#039;s blog, 关于后端架构、互联网技术、分布式、大型网络应用、NoSQL、Key Value等</description>
	<lastBuildDate>Mon, 02 Aug 2010 15:34:40 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>利用Gearman来实现远程监控与管理</title>
		<link>http://timyang.net/linux/gearman-monitor/</link>
		<comments>http://timyang.net/linux/gearman-monitor/#comments</comments>
		<pubDate>Wed, 26 Aug 2009 12:57:09 +0000</pubDate>
		<dc:creator>Tim</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[gearman]]></category>

		<guid isPermaLink="false">http://timyang.net/?p=392</guid>
		<description><![CDATA[
Gearman是一个分发任务的程序框架，可以用在各种场合，与Hadoop相比，Gearman更偏向于任务分发功能。它的任务分布非常简单，简单得可以只需要用脚本即可完成。Gearman最初用于LiveJournal的图片resize功能，由于图片resize需要消耗大量计算资源，因此需要调度到后端多台服务器执行，完成任务之后返回前端再呈现到界面。

Gearman分布式任务实现原理上只用到2个字段，function name和data。function name即任务名称，由client传给job server, job server根据function name选择合适的worker节点来执行。data通常为执行任务所需的自定义的内容，比如简单的做法可以把需要执行的脚本当成data即可(当然要注意其中的安全防范)。如果有多个worker可以处理同一个function name, 则job server会自动分配一个。当用于远程监控场景时，我们可以让每个worker注册成不同的业务名称，以达到方便控制每台worker节点的目的。
下面介绍Gearman实践中可用于多服务器管理的一些小功能，如果你的服务器有多台，重复执行命令过于繁琐，那可以借助下面一些脚本来完成一些有趣的功能。比如要实时看到所有服务器上的 netstat -nat &#124; grep 80, 按下面步骤搭好环境之后，只需要几行脚本代码即可实现。
1. 安装gearman
最早的gearman是perl版的，由于国内开发人员对perl熟悉的不多，所以推荐安装C版本
 http://gearman.org/index.php?id=download
解开后 ./configure; make; make install 即可
2. 启动 job server
cd sbin; ./gearmand -d
3. 到 worker 节点启动 worker
先按步骤1在worker机上安装 gearman, 然后创建一个执行worker的python脚本。
#!/usr/bin/env python
import os

def main():
    cmd = raw_input()
    print os.popen(cmd).read()

if __name__ == "__main__":
    [...]]]></description>
			<content:encoded><![CDATA[<div class="level2">
<p><a href="http://gearman.org/">Gearman</a>是一个分发任务的程序框架，可以用在各种场合，与<a href="http://hadoop.apache.org/">Hadoop</a>相比，Gearman更偏向于任务分发功能。它的任务分布非常简单，简单得可以只需要用脚本即可完成。Gearman最初用于LiveJournal的图片resize功能，由于图片resize需要消耗大量计算资源，因此需要调度到后端多台服务器执行，完成任务之后返回前端再呈现到界面。</div>
<p><img class="alignnone size-full wp-image-394" title="gearman" src="http://timyang.net/blog/wp-content/uploads/2009/08/gearman.png" alt="gearman" width="489" height="457" /></p>
<p>Gearman分布式任务实现原理上只用到2个字段，function name和data。function name即任务名称，由client传给job server, job server根据function name选择合适的worker节点来执行。data通常为执行任务所需的自定义的内容，比如简单的做法可以把需要执行的脚本当成data即可(当然要注意其中的安全防范)。如果有多个worker可以处理同一个function name, 则job server会自动分配一个。当用于远程监控场景时，我们可以让每个worker注册成不同的业务名称，以达到方便控制每台worker节点的目的。</p>
<p>下面介绍Gearman实践中可用于多服务器管理的一些小功能，如果你的服务器有多台，重复执行命令过于繁琐，那可以借助下面一些脚本来完成一些有趣的功能。比如要实时看到所有服务器上的 netstat -nat | grep 80, 按下面步骤搭好环境之后，只需要几行脚本代码即可实现。</p>
<p><strong>1. 安装gearman</strong><br />
最早的gearman是perl版的，由于国内开发人员对perl熟悉的不多，所以推荐安装C版本<br />
<a href="http://gearman.org/index.php?id=download"> http://gearman.org/index.php?id=download</a><br />
解开后 ./configure; make; make install 即可</p>
<p><strong>2. 启动 job server</strong><br />
cd sbin; ./gearmand -d</p>
<p><strong>3. 到 worker 节点启动 worker</strong></p>
<p>先按步骤1在worker机上安装 gearman, 然后创建一个执行worker的python脚本。</p>
<pre>#!/usr/bin/env python
import os

def main():
    cmd = raw_input()
    print os.popen(cmd).read()

if __name__ == "__main__":
    main()</pre>
<p>cd bin; ./gearman -w -h &lt;job_server_ip&gt; -f server1 &#8212; ./monitor.py</p>
<p><strong>4. 通过远程 web 管理</strong><br />
JSP示例：</p>
<pre>&lt;%@ page language="java" import="java.util.*,java.util.concurrent.*,
org.gearman.client.*,org.gearman.common.*"%&gt;&lt;%!
        private static String host = "192.168.1.1";
        private static int port = 4730;
        public String testGearman(String func, String data) {
                byte[] input = data.getBytes();
                String uniqueId = null;

                GearmanJobServerConnection conn =
                    new GearmanNIOJobServerConnection(host, port);
                GearmanClient client = new GearmanClientImpl();
                client.addJobServer(conn);
                GearmanJob job = GearmanJobImpl.createJob(func, input, uniqueId);
                Future&lt;GearmanJobResult&gt; f = client.submit(job);
                GearmanJobResult jr = null;
                String result = null;
                try {
                        jr = f.get(3, TimeUnit.SECONDS);
                        result = new String(jr.getResults());
                } catch (Exception e) {
                        result = e.getMessage();
                }

                client.shutdown();
                return result;
        }
%&gt;&lt;%
out.println(testGearman("test", "netstat -nat | grep 80");
%&gt;</pre>
<p>PHP示例：</p>
<pre># Create our client object.
$client= new GearmanClient();

# Add default server (localhost).
$client-&gt;addServer();

echo "Sending job\n";

# Send reverse job
$result = $client-&gt;do("server1", "netstat -nat | grep 80");
if ($result)
  echo "Success: $result\n";</pre>
Similar Posts:<ul><li><a href="http://timyang.net/data/mcdb-tt-redis/" rel="bookmark" title="August 11, 2009">MemcacheDB, Tokyo Tyrant, Redis performance test</a></li>

<li><a href="http://timyang.net/python/python-thread-socket-server/" rel="bookmark" title="March 8, 2009">Python thread socket server</a></li>

<li><a href="http://timyang.net/python/python-rest/" rel="bookmark" title="February 12, 2009">用Python实现CRUD功能REST服务</a></li>

<li><a href="http://timyang.net/programming/thrift-protocol-buffers-performance-java/" rel="bookmark" title="April 2, 2009">Thrift and Protocol Buffers performance in Java</a></li>

<li><a href="http://timyang.net/programming/c-erlang-java-performance/" rel="bookmark" title="November 11, 2009">C, Erlang, Java and Go Web Server performance test</a></li>
</ul><!-- Similar Posts took 14.771 ms -->]]></content:encoded>
			<wfw:commentRss>http://timyang.net/linux/gearman-monitor/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
	</channel>
</rss>
