2013-10-24 52 views
1

目前有一個隊列系統設置使用像亞馬遜的隊列服務。現在我正在使用主管來防止工作人員戒菸。PHP隊列失效保護

試圖提供一個可以採用500-2K reqs/sec並需要通過隊列捕獲數據的前端。有時隊列服務[https基於]會關閉,我目前正在運行beanstalkd作爲備份隊列,它接受相同的數據併發送給單獨的一組工作人員,並將該數據存儲在單獨的數據庫中,但與主表具有相同的表結構D b。

這個想法是我會從備份中獲取數據,並將其與預期的實際數據進行比較並對其進行審覈,任何差異都會被報告並可能添加到預期數據集中。

這是否看起來是一個切實可行的辦法解決這個問題,因爲我想確保我們獲取數據的99.99%,在未來的。

小「示範」之下,以幫助給你的照片。

Endpoint A -- collects data(
    Queue1[amazon type queue] 
    Queue2[beanstalkd] 
) 

Queue1 Worker sends data to DB1[used for reports] 
Queue2 Worker sends data to DB2[storage --expect to have all data] 

Audit Process compares data from DB2 to DB1 and reports the differences 
If differences captured, tries to add them to DB1 
+0

@GeraldSchneider之間的差異爲什麼不是PHP足夠的東西,像這樣的小圖如果我能夠很容易地將數據發送到隊列和數據庫中, –

+0

PHP可以工作,但只能在小範圍內工作。在大規模的情況下,我會用一些網絡編程更多地傾向於編程語言。有很多更好的語言可以將帶寬使用和服務器壓力保持在一個更易於管理的狀態。 C++,C#,Java,.NET,隨你選。 – bobthyasian

+0

@bobthyasian讓我們假設我實現了上面的設計,但是使用了不同的語言......雖然從長遠來看,php可能不是最好的語言,但試圖瞭解我是如何以有意義的方式處理隊列故障 –

回答

0

決定採取N.B的評論和應用不同的模型。我有一個主隊列服務和一個輔助隊列。如果第一個發送空或者不正確的http響應,我會將該消息發送到備份隊列。隊列工作人員將從這兩個來源拉動並適當地運行它們。

下面是它結束了,所以你可以看到原來的想法,最後一個....

Endpoint A -- collects data(
    Queue1[amazon type queue] 
    Queue2[amazon2 type queue] 
) 

Queue1 Worker sends data to DB1[used for reports] 

If Queue1 fails, it auto sends data to Queue2, 
If Queue2 fails, it stores in database for later retrieval