我有一個在羣集中運行的Node.js應用程序,因此,有很多應用程序同時運行並接受來自負載平衡器的請求的實例。你如何處理集羣中基於時間的事件?
考慮我在我的應用程序中有一個「訂閱」的概念,每個訂閱都存儲在中央數據庫dateStart
和dateEnd
字段中。對於每次訂閱,我需要發送通知,提醒客戶訂閱到期(例如,到期前14天,7天和3天)。此外,我需要將訂閱標記爲過期,並在時間到時執行一些額外的邏輯。
什麼來處理多實例的應用,基於時間的事件的最佳實踐?
我可以讓我的應用程序來運行到期程序,例如每五分鐘一次,但之後我將不得不處理併發問題,因爲每個實例都會嘗試這樣做,而我們不希望通知被提交兩次。
感謝您抽出時間來分享。它看起來像一個強大的解決方案,我會牢記這一點!但是,我正在考慮採用行級鎖定的類似方法,但在更細化的級別上。我在想,每個工作人員都可以從數據庫中提取掛起的「作業」,並鎖定要處理的行,然後將每個作業標記爲「完成」。我希望通過這種方式,工作將更均勻地分配到所有實例中,鎖定將防止工作人員抓住已經掛起的工作。你怎麼看? –
如果您想利用多個節點來處理作業負載,那麼這也是一種有效的方法。我選擇把主要角色作爲爭論的焦點,這樣我所需要關心的就是確保只有一個人成爲首要工作並且工作。我認爲,只要在每個工作記錄中您都有一個空中狀態,標記誰在工作,以及他們最後一次接觸工作的時間,您應該能夠確定工作是否失敗,並在合理的超時後恢復工作。 – NinePlanFailed