用於PHP的Gearman Worker管理工具GearmanManager

来源:http://www.cnblogs.com/x3d/archive/2016/02/27/gearman-worker-manager.html
-Advertisement-
Play Games

項目地址:https://github.com/brianlmoon/GearmanManager PHP環境要求 PHP 5.5.9 POSIX extension Process Control extension pecl/gearman or Net_Gearman 使用GearmanMan


項目地址:https://github.com/brianlmoon/GearmanManager

PHP環境要求

  • PHP 5.5.9
  • POSIX extension
  • Process Control extension
  • pecl/gearman or Net_Gearman

使用GearmanManager的理由

運行Gearman的Worker是項比較讓人討厭的任務。千篇一律的代碼...GearmanManager的目標是讓運行worker成為一項運維性任務而不是開發任務。

文件名直接對應於Gearmand伺服器中的function,這種方式極大簡化了function在worker中的註冊。

工作原理

我們創建一個比如叫“worker_dir”的目錄來存放所有的worker代碼。以下寫法基於安裝了pecl/gearman擴展的情形下的寫法:

過程式的代碼:

# cat worker_dir/example_function.php

function example_function($job, &$log) {

    $workload = $job->workload();

    // do work on $job here as documented in pecl/gearman docs

    // Log is an array that is passed in by reference that can be
    // added to for logging data that is not part of the return data
    $log[] = "Success";

    // return your result for the client
    return $result;

}

該文件的代碼會在gearmand中註冊一個名叫“example_function”的function。

面向對象式的代碼:

# cat worker_dir/ExampleFunction.php

class ExampleFunction {

    public function run($job, &$log) {

        $workload = $job->workload();

        // do work on $job here as documented in pecl/gearman docs

        // Log is an array that is passed in by reference that can be
        // added to for logging data that is not part of the return data
        $log[] = "Success";

        // return your result for the client
        return $result;

    }

}

該文件的代碼會在gearmand中註冊一個名叫“ExampleFunction”的function。

更多特性

GearmanManager不止是讓創建worker更簡單,它還提供進程管理。如果進程掛掉,會重新啟動。也可以設置讓worker運行一段時間後銷毀以免記憶體溢出。

GearmanManager有個選項可以設置監控worker目錄,當新代碼被部署時重啟相應的worker。

在關閉GearmanManager時,它會允許worker進程完成任務的執行後退出。

高級內容

配置Worker

預設情況下,GearmanManager會確保至少有一個Worker並且會執行所有的任務。也就是預設只創建一個進程。在生產環境這很明顯不夠理想。

GearmanManager的ini配置文件中由幾段內容組成。先有全局部分:[GearmanManager] ,剩下的針對每個function可以定義一段內容。

worker_dir - 定義worker function文件存放目錄,可以通過逗號分隔的形式指定多個目錄

include - 要註冊到該伺服器的function清單,表示包含worker中所有function,預設為

count - 該設置定義了用於執行所有funciton所需運行的最低worker數。例如如果設為10,將會啟動10個進程,並註冊所有的function。預設值為0。

dedicated_count - 該設置定義了專用於某一個function的進程數。比如你有5個function,設置dedicated_count = 2,即為每個function啟動了兩個進程,總共10個進程。預設值為1。

max_worker_lifetime - 設置每個worker進程的最大生命周期,單位為秒。當worker完成任務後,worker會檢測它是否運行到了最大生命周期,如果到了就會退出。manager進程就好啟動一個新進程並註冊同一個任務來替代退出的進程。預設值為1個小時。

auto_update - 如果設置為1,manager進程會啟動一個助手進程來監控worker存放目錄的變更。如果發現新代碼文件,會發送信號給父進程以便殺掉worker進程來載入新的代碼。

對於每個註冊function的worker,也有單獨的針對設置項。

count - 設置一個整數值來確保至少有多少個worker註冊了該function。因為每個進程可以註冊多個function。

dedicated_count - 設置一個整數值來確保至少有多少個進程專用於該function。該進程不會做其它事情。

日誌記錄

命令行有很多選擇,通過-h可以查看。

-v :

-v Logs only information about the start up and shutdown
-vv Logs information about process creation and exiting
-vvv Logs information about workers and the work they are doing
-vvvv Logs debug information
-vvvvv Logs crazy amounts of data about all manner of things

-l 指定日誌文件存放目錄。如果未指定,日誌數據將被髮送到stdout。也可以設置為syslog以便讓日誌數據發送到syslog中。

指定Gearmand伺服器

兩種方式可以指定伺服器:在命令行或配置文件中。

命令行: -h [HOST[:PORT][,[HOST[:PORT]]]]。 例如: -h 10.1.1.1:4730,10.1.1.2:4730

配置文件:在 [GearmanManager] 全局段:

host - 10.1.1.1:4730,10.1.1.2:4730

; exclude - A list of workers in worker_dir to exclude ; host - The gearmand host ; log_file - Path to log file or syslog ; max_runs_per_worker - Maximum number of jobs a worker will process before restarting ; pid_file - Path to the file where the pid will be stored for the main process ; prefix - Prefix for class names used by workers ; user - System user to run as ; worker_restart_splay - Number of seconds to stagger restarting and launching of workers to prevent all workers dying a t once

運行守護進程

最簡命令:

./pecl-manager.php -c /path/to/config.ini

還有其它一些參數:

-P - 管理進程的pid文件所在目錄,也可以在配置文件中通過pid_file指定

-d - 如果在命令行指定該參數,管理器會以守護進程形式運行

-u - 指定守護進程的用戶,也可在配置文件中通過user指定

調試

GearmanManager中用了(@),造成錯誤消息不提示,相應error_log是不會記錄的,這樣調試比較困難。

解決方案就是安裝Xdebug:

  • Install Xdebug
  • Configure it
  • Profit!

安裝調試工具

pecl install xdebug

配置調試工具

加上xdebug.scream參數到 xdebug.ini中:

zend_extension="/path/to/where/your/xdebug.so"
xdebug.scream = 1
xdebug.show_exception_trace = 1

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 第一章什麼是xml 電腦里的數據文件分為倆大類,二進位文件和文本文件。 二進位文件是一個比特流(1或0系列),只有創建二進位的應用程式才會理解這個比特流的實際含義。 文本文件也是比特流,文本文件里的比特流是以一種標準格式組織起來的,因此他們總是組成一個個數,每個數再映射為字元。 標記語言的簡史 探
  • 本文分別對Cookie與Session做一個介紹和總結,並分別對兩個知識點進行對比分析,讓大家對Cookie和Session有一個更深入的瞭解,並對自己的開發工作中靈活運用帶來啟示。 cookie機制 Cookies是伺服器在本地機器上存儲的小段文本並隨每一個請求發送至同一個伺服器。IETF RFC
  • 關於這份指南 之前有不少學弟學妹問我如何學習編程,根據DRY法則(Don't Repeat Yourself),還是把自己學習過程中的一些經驗整理成一篇博客吧。由於本人目前也處在學習的階段,文章中列出來的內容也並未全部學習過,所以文章的客觀性可能存在一些問題,還望讀者自行判斷。 這份指南會不定期更新
  • 多少年來,許多的編程語言和工具都包含對正則表達式的支持,.NET基礎類庫中包含有一個名字空間和一系列可以充分發揮規則表達式威力的類,而且它們也都與未來的Perl 5中的規則表達式相容。 此外,regexp類還能夠完成一些其他的功能,例如從右至左的結合模式和表達式的編輯等。 在這篇文章中,我將簡要地介
  • powershell的return使用方法研究,案例詳解。
  • 一.Golang安裝 1.下載golang安裝包http://golangtc.com/download,我這裡下載的是go1.6rc2.linux-amd64.tar.gz。 2.解壓到安裝目錄,我這裡是/usr/local 1 sudo tar -zxf go1.6rc2.linux-amd64
  • c 參照編譯器底層實現一個 json引擎. 這是第一篇 主要講解解析部分. 可能 寫的不流利,主要看代碼吧. 之前寫了一個,後面看了cJSON的實現,簡單 合併重構了一下. 歡迎嘗試吐槽
  • 一直沒做過SSH(Struts2+Spring+Hibernate)的實際項目,只是三個框架學的還熟練,但整合起來使用就不知道了。所以前段時間在網上找了一套SSH實際項目的視頻來學習(確切的說是買的...),一直沒時間來總結,得到的經驗主要是SSH的整合及配置,更多的則是SSH之外的一些經驗,比如代
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...