摘要:文件分發針對用戶上傳的文件,進行多臺服務器分發。系統報警當系統出現問題的時候,第一時間通知相關人。這篇文章主要講解系統報警場景在開發系統的過程中,往往程序會出現這樣,那樣的問題。所以,使用實現短信,郵件的異步發送。也可以用來實現上面的需求。
</>復制代碼
Gearman 是什么?
Gearman是一個用來把工作委派給其他機器、分布式的調用更適合做某項工作的機器、并發的做某項工作在多個調用間做負載均衡、或用來在調用其它語言的函數的系統。
</>復制代碼
Gearman 工作原理
Client(客戶端):創建一個Job。
Server(服務):找到合適的Worker,把 Job 交給 Worker。
Worker(工人):執行Job。
</>復制代碼
Web 中常用的場景。
裁剪圖片,生成縮略圖。
文件分發(針對用戶上傳的文件,進行多臺服務器分發)。
視頻轉碼(對上傳的視頻,進行轉碼存儲)。
系統報警(當系統出現問題的時候,第一時間通知相關人)。
</>復制代碼
這篇文章主要講解 系統報警 場景
在開發系統的過程中,往往程序會出現這樣,那樣的問題。
我們要第一時間獲取錯誤問題,通知短信,郵件通知給相關人員。
因為,短信、郵件的發送比較耗時,并發量大的情況下,會出現延時現象。
所以,使用 Gearman 實現短信,郵件的異步發送。
</>復制代碼
Gearman 安裝的兩種方式
方式一:官網推薦安裝方法
官網地址:http://gearman.org/getting-st...
</>復制代碼
yum install gearmand
方式二:自定義安裝
安裝libevent:
</>復制代碼
wget get 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.tar.gz
./configure --prefix=/usr
make && make install
安裝Gearman server and library:
</>復制代碼
wget get https://launchpad.net/gearmand/1.2/1.1.12/+download/gearmand-1.1.12.tar.gz
tar zxvf gearmand-1.1.12.tar.gz
cd gearmand-1.1.12
./configure
如果報錯:configure: error: could not find boost
yum install -y boost boost-devel
如果報錯:configure: error: could not find gperf
yum install gperf
如果報錯:configure: error: Unable to find libuuid
yum install libuuid-devel
make && make install
安裝成功后,執行 gearmand -V 查詢版本號。
gearmand -d 開啟服務。
溫馨提示:
僅供參考,遇到不可預測的問題,請進行Google。
安裝Gearman PHP extension:
</>復制代碼
wget get http://pecl.php.net/get/gearman-1.1.2.tgz
tar zxvf gearman-1.1.2.tgz
cd gearman-1.1.2
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config --with-gearman
如果報錯:configure: error: Please install libgearman
yum install -y libgearman-devel.x86_64
</>復制代碼
案例(系統報警)
開啟服務
</>復制代碼
gearmand -d
執行Worker
</>復制代碼
php worker.php
client.php
</>復制代碼
addServer("127.0.0.1", 4730);
$client->doNormal("send_mail", $strEmailInfo);
if ($is_fatal_error == 1) {
$client->doNormal("send_sms", $strSmsInfo);
}
}
/**
* 捕捉致命錯誤
* @return string
*/
function fatalErrorHandler() {
$e = error_get_last();
switch ($e["type"]) {
case 1:
errorHandler($e["type"], $e["message"], $e["file"], $e["line"], 1);
break;
}
}
worker.php
</>復制代碼
addServer("127.0.0.1", 4730);
$worker->addFunction("send_mail", "doSendMail");
$worker->addFunction("send_sms", "doSendSms");
while ($worker->work());
/**
* 執行發送郵件的Job
* @param $job
* @return string
*/
function doSendMail($job)
{
$strEmailInfo = $job->workload();
/**
* 在這個方法里完善發送郵件的操作
* ......
* Demo是把信息寫入到文件中
*/
return file_put_contents("gearman.txt", $strEmailInfo."
", FILE_APPEND);
}
/**
* 執行發送短信的Job
* @param $job
* @return string
*/
function doSendSms($job)
{
$strSmsInfo = $job->workload();
/**
* 在這個方法里完善發送短信的操作
* ......
* Demo是把信息寫入到文件中
*/
return file_put_contents("gearman.txt", $strSmsInfo."
", FILE_APPEND);
}
gearman.txt
</>復制代碼
【警告錯誤】
時間:2016-09-22 23:15:10
錯誤代碼:8
錯誤信息:Undefined variable: b
錯誤文件:/home/www/mi/gearman/client.php
錯誤行號:9
【致命錯誤】
時間:2016-09-22 23:15:10
錯誤代碼:1
錯誤信息:Class "Test" not found
錯誤文件:/home/www/mi/gearman/client.php
錯誤行號:12
[致命錯誤]錯誤代碼:1,錯誤信息:Class "Test" not found,錯誤文件:/home/www/mi/gearman/client.php
</>復制代碼
溫馨提示
也可以用 Redis Queue 來實現上面的需求。
也可以用 Swoole 來實現上面的需求。
也可以了解下 Gearman 與 Swoole 的區別。
Thanks ~
來源:https://zhuanlan.zhihu.com/p/...
AD:
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/30471.html
摘要:啟動和如下信息則表示成功查看版本安裝擴展從下載最新擴展需下載最新源碼包,并解壓縮安裝安裝成功后信息然后,配置文件增加內容重啟后,出現如下信息則表示安裝擴展成功。 首發于 樊浩柏科學院 Gearman 是一個分布式任務分發系統,通過程序調用(API,跨語言)分布式地把工作委派給更適合做某項工作的機器,且這些機器可以以并發的、負載均衡的形式來共同完成某項工作。當計算密集型場景時,適合在后...
摘要:但是這需要對文件以及有非常深入的理解,同時由于存在多種形式,分析實現同步的工作量是非常大的。因此這里選擇了一種開發成本更加低廉的方式,借用已經比較成熟的,將數據首先放入中,然后通過一個自己編寫的,將數據同步到。此類連接遠程的。 MySQL到Redis數據復制方案 無論MySQL還是Redis,自身都帶有數據同步的機制,像比較常用的 MySQL的Master/Slave模式 ,就是由Sl...
摘要:目前項目采用的是來實現異步任務。關于介紹通俗的來說是一個分發任務的程序框架使用的應用通常有三部分組成一個一個一個任務服務器。的作用是提出一個任務交給任務服務器。請求的調度者,用來負責協調把發出的請求轉發給合適的。 眾所周知,PHP要實現異步任務一般都是通過 Gearman Beanstalkd 等第三方來實現的。目前項目采用的是 Gearman 來實現異步任務。 關于Gearman介紹...
摘要:圍繞上面描述的問題,以及對于報警聚類處理的分析假設,本文主要做了以下事情選定聚類算法,簡單描述了算法的基本原理,并給出了針對報警日志聚類的一種具體的實現方案。算法選擇聚類算法采用論文中描述的根因分析算法。聚類算法算法的執行,我們以圖來表示。 背景 眾所周知,日志是記錄應用程序運行狀態的一種重要工具,在業務服務中,日志更是十分重要。通常情況下,日志主要是記錄關鍵執行點、程序執行錯誤時的現...
閱讀 1776·2021-09-28 09:43
閱讀 1123·2021-09-23 11:22
閱讀 2738·2021-09-14 18:05
閱讀 1833·2019-08-30 15:52
閱讀 2824·2019-08-30 10:55
閱讀 2020·2019-08-29 16:58
閱讀 1333·2019-08-29 16:37
閱讀 3046·2019-08-29 16:25