我需要實現一個系統,用於在服務器端運行的異步操作,並琢磨許多選項後,我不知道這將是最好的,更具可擴展性,或者說通常在這種情況下使用。由於沒有任何解決方案能夠完全解決問題,所以我一定會錯過什麼。處理異步服務器端操作
上下文:對於某些上下文,我有一個移動應用程序,用戶向其他用戶發送請求以啓動活動。這種操作是處理服務器端,如果請求不具有與其他用戶的響應,它會過期,並在15分鐘內關閉。所以,我創建與數據庫中的這個操作的開始時間的記錄,我需要更新其狀態,15分鐘後,因此異步操作。它需要恰好15分鐘才能正確通知等待的用戶。
可能的解決方案:
我使用laravel,溶液我琢磨是推動延遲作業隊列。雖然一開始我認爲這將是完美的解決方案,我看也未必是可擴展的,因爲這個請求的頻率會變得過高和大量的就業機會會排隊。另外,隊列作業不能保證在達到延遲後執行,並且可能解決得太晚。
另一種解決方案我想到了正在處理這一切在cron作業運行的每一分鐘,但它也有同樣的問題,當請求量高。從表現上看,每分鐘都可以做到這一點,尤其是在活動不頻繁的時候。
所以基本上,這些都是小規模經營這將是比較快的解決,但管理掛起的操作量高的成本可能比操作本身最差。是否有任何其他模式(甚至沒有減少到laravel和php)來延遲任務執行到未來的時間?
您好wunch,我認爲正確的做法可能是與此類似,但有一點需要注意。它不應該在啓動時創建作業,而應該在接收到第一個請求時創建它,以便知道需要爲下一次檢查拖延多少(如果它是在啓動時創建的,但沒有任何掛起請求,我們有同樣的問題)。另外,如果達到了沒有更多請求待處理的時間點,則不應再次將其添加到隊列中,它會在接收到另一個新請求後創建。 –