如何安全可靠的處理後台任務

2022-03-14 08:48:20 字數 1717 閱讀 4359

在越來越多的應用智慧型化,很多後台功能不能及時反饋給使用者,但是又不影響使用者的體驗,大量的任務後台化,由伺服器處理完之後再反饋給使用者。

隨著這種功能的廣泛應用,任務到底有沒有執行成為維護的難題,畢竟很多小公司開發和維護是一體的。

為了解決這種任務式的難題,特借鑑了張宴的架構思想:輕量級開源簡單佇列服務 httpsqs 1.2 版本發布[原創][張宴]

在這基礎上,思考了幾個問題:

1. httpsqs未記錄任務資訊

2. 任務失敗後httpsqs資料被覆蓋丟失

3. 任務處理過程中被中斷又沒有被catch到異常(導致變成髒任務)

4. 任務被重複put (多次執行,毫無意義)

在這基礎上面輔助使用了mysql+httpsqs+mutex的模式來實現應用的穩定,任務處理併發性。

簡單一架構圖如下:

mutex task :使用redis實現的一種互斥鎖,主要功能用於併發、任務重複執行的控制。

流程步驟:

1. 同時在mysql和httpsqs插入任務,任務的標識為wait。

2. 後台service從httpsqs中讀取資料

3.mutex task任務標識為doing

4. mysql task任務標識為doing

5. 業務邏輯處理

6. 處理完畢,業務處理失敗:mutex task為error同時mysql task為error。

輔助程式:

1. error task重新入httpsqs,執行以上步驟,根據業務需要控制重試次數,可擴充套件mutex task來實現重試次數

簡單二架構圖如下:

流程步驟:

1. 在mysql插入任務,任務的標識為wait。

2. 輔助程式put任務進入httpsqs,mysql task標識為ready。

2. 後台service從httpsqs中讀取資料

3.mutex task任務標識為doing

4. mysql task任務標識為doing

5. 業務邏輯處理

6. 處理完畢,業務處理失敗:mutex task為error同時mysql task為error。

輔助程式:

1. 輔助程式put任務進入httpsqs,mysql task標識為ready。

2. error task更改任務狀態error => wait,輔助程式自動按照新任務執行。執行以上步驟,根據業務需要控制重試次數,可擴充套件mutex task來實現重試次數。

架構2已應用於正式環境。

正式環境實施有以下狀況出現:

1. 任務doing狀態,由於php異常機制不是很完善,可以還原當時環境,測試修正。

2. 任務為ready狀態,由於mutex task的控制,該任務為重複任務,是否繼續執行看業務需要。

3. service無需寫成while(true) ,可以使用cron定時+執行次數控制,可以併發,可以防止主程式僵死狀態。

cache應用/任務mutex,用於高併發任務處理經過多個專案使用

可私信oshine索取

如何衡量軟體的安全可靠性

軟體 的安全可靠性是衡量軟體好壞的乙個重要標準,安全性指與防止對程式及資料的非授權的故意或意外訪問的能力有關的軟體屬性,可靠性指與在規定的一段時間和條件下,軟體能維持其效能 水平能力有關的一組屬性。具體我 們可以從以下幾個方面來判斷 1.使用者許可權限制。軟體是否按功能 模組劃分使用者許可權,許可權...

活用Linux的後台任務

linux作為乙個多工環境,允許使用者同時執行多項任務,例如檢視系統情況 備份資料 編輯檔案和列印檔案等。對於耗時長的任務不應該讓它在前台任務中執行,而應該交給後台任務去執行。這樣前台任務可繼續正常運作其它的操作,不用等待。示例如下 find name testing fg 如果想要讓上面例子中的任...

妙用Linux 的後台任務

linux作為乙個多工環境,允許使用者同時執行多項任務,例如檢視系統情況 備份資料 編輯檔案和列印檔案等。對於耗時長的任務不應該讓它在前台任務中執行,而應該交給後台任務去執行。這樣前台任務可繼續正常運作其它的操作,不用等待。示例如下 find name testing fg 如果想要讓上面例子中的任...