gearman的安装与使用示例
一, gearman的安裝
1.1. gearman工作原理
Gearman 服務有很多要素使得它不僅僅是一種提交和共享工作的方式,
但是主要的系統只由三個組件組成:?
? ? gearmand 守護進程(server),
? ? 用于向 Gearman 服務提交請求的 client ,
? ? 執行實際工作的 worker。
其關系如下圖所示:?
Fig 1. gearm工作原理
Gearmand server執行一個簡單的功能,
即從client收集job請求并充當一個注冊器,
而worker可以在此提交關于它們支持的job和操作類型的信息,
這樣server實際上就充當了Client和Worker的中間角色。
Client將job直接丟給server,而server根據worker提交的信息,將這些job分發給worker來做,
worker完成后也可返回結果,server將結果傳回client。
舉個例子,
在一個公司里面,有老板1、老板2、老板3(client),
他們的任務就是出去喝酒唱歌拉項目(job),將拉來的項目直接交給公司的主管(server),
而主管并不親自來做這些項目,他將這些項目分給收手下的員工(worker)來做,
員工做完工作后,將結果交給主管,主管將結果報告給老板們即可。
1.2. gearman 的下載與安裝
它的下載與安裝分兩部分:
? ? Job Server(gearmand);?
? ? 和 Client & Worker APIs
而這每個部分又提供了很多種語言的實現,
? ?Job Server的實現有C,Java, Perl三種;
? ?Client&Worker API的實現語言更多,包括有C, shell, Perl, Nodejs, PHP,Python, Java, C#/.NET, GO, Lisp;?
? ?它還有數據庫的接口,支持的種類有: MySQL, PostgreSQL, Drizzle等?
另外,官網還介紹了一些可選配的工具,包括有:
. Gearman-Monitor(PHP)
? 使用PHP開發服務器監視工具,用來監測服務器的狀態
? Gearman-Monitor on GitHub (https://github.com/yugene/Gearman-Monitor)
. GearmanManager(PHP)
? 用來管理多個gearman woker的框架
? GearmanManager On GitHub(https://github.com/brianlmoon/GearmanManager)
. Multi-process Gearman Task Server Library(Python)
? GMTasks contains a simple multiprocessing server for Gearman workers,?
? designed for ease of configuration and maximum availability.
? GMTasks(https://github.com/ex-nerd/gmtasks)
??
本文使用的是C語言版的Job Server和Python版的 Client&Worker API;?
1.2.1 安裝server
要使用gearman,首先得安裝server,下載地址:
? ? http://gearman.org/download/。
下載源碼:
https://github.com/gearman/gearmand/releases
?
$ tar -zxvf gearmand-1.1.14
$ cd gearmand-1.1.14
$ ./configure
$ make
$ sudo make install
配置時,可能會報缺庫,需要自己手動安裝
1). libevent庫的安裝:
下載:
$ wget https://github.com/libevent/libevent/releases/download/release-2.0.22-stable/libevent-2.0.22-stable.tar.gz
在當前目錄下解壓安裝包:
$ tar -zxvf libevent-2.0.22-stable.tzr.gz
$ cd libevent-2.0.22-stable
配置安裝庫的目標路徑:
$ ./configure
編譯安裝libevent庫:
$ make
$ sudo make install
2). libuuid的安裝
$ sudo apt-get install uuid-dev
3). boostlib的安裝
$ sudo apt-get install uuid-dev libevent-dev libboost-all-dev libdrizzle-dev
當安裝完成后,可以啟動
gearmand,
啟動有很多參數選項,可以man gearmand來查看,主要的選項有:
-b, --backlog=BACKLOG ? ? ? Number of backlog connections for listen.?
-d, --daemon ? ? ? ? ? ? ? ?Daemon, detach and run in the background.?
-f, --file-descriptors=FDS ?Number of file descriptors to allow for the process ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? (total connections will be slightly less). Default is max allowed for user.?
-h, --help ? ? ? ? ? ? ? ? ?Print this help menu.?
-j, --job-retries=RETRIES ? Number of attempts to run the job before the job ?server removes it.?
? ? ? ? ? ? ? ? ? ? ? ? ? ? This is helpful to ensure a bad ?job does not crash all available workers.?
? ? ? ? ? ? ? ? ? ? ? ? ? ? Default ?is no limit.?
-l, --log-file=FILE ? ? ? ? 日志輸出文件;Log file to write errors and information to.?
? ? ? ? ? ? ? ? ? ? ? ? ? ? Turning this option on also forces the first ?verbose level to be enabled.?
-L, --listen=ADDRESS ? ? ? ?Address the server should listen on. Default is ?INADDR_ANY.?
-p, --port=PORT ? ? ? ? ? ? Port the server should listen on.?
-P, --pid-file=FILE ? ? ? ? 以進程號為標識的文件寫出;File to write process ID out to.?
-r, --protocol=PROTOCOL ? ? Load protocol module.?
-R, --round-robin ? ? ? ? ? Assign work in round-robin order per ?workerconnection.?
? ? ? ? ? ? ? ? ? ? ? ? ? ? The default is to assign work in ?the order of functions added by the worker.?
-q, --queue-type=QUEUE ? ? ?Persistent queue type to use.?
-t, --threads=THREADS ? ? ? Number of I/O threads to use. Default=0.?
-u, --user=USER ? ? ? ? ? ? Switch to given user after startup.?
-v, --verbose ? ? ? ? ? ? ? Increase verbosity level by one.?
-V, --version ? ? ? ? ? ? ? Display the version of gearmand and exit.?
-w, --worker-wakeup=WORKERS Number of workers to wakeup for each job received. ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? The default is to wakeup all available workers.
啟動gearmand:
sudo gearmand --pid-file=/var/run/gearmand/gearmand.pid --daemon --log-file=/var/log/gearman.log ?
若提示沒有/var/log/gearman.log這個文件的話,自己新建一個就可以了。
1.2.2 Client & Worker API
gearman提供了兩種不同的Python API, 一個是 libgearman C庫的封裝,另一個則是純粹的Python API.
純Python的安裝:
A pure-Python API that can be found on PyPI as “gearman”, and can be installed with “easy_install gearman”.
$ easy_install gearman
或
$ pip install gearman
C庫的Python封裝的安裝:
. python-gearman(http://pypi.python.org/pypi/gearman/)
二,應用示例
2.1 單機版消息通信示例
worker.py
?
client.py
運行gearman server:
$ gearmand ?--daemon ?--listen=127.0.0.1
啟動worker程序:python worker.py
啟動client程序:python client.py
2.2 多機版消息通信示例
worker.py
?
client.py
?
在一臺服務器上啟動服務端:
$ gearmand --daemon --listen=10.11.31.86
可以在多臺不同的服務器上啟動worker:
$ python worker.py
再啟動client發布命令:
$ python client.py
總結
以上是生活随笔為你收集整理的gearman的安装与使用示例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 分布式计算框架Gearman原理详解
- 下一篇: 用 Gearman 分发 PHP 应用程