2014-04-25 78 views
1

我必須在AppEngine上的多租戶環境中實施重複執行的任務。真正的用例是「實施循環發票」。管理多租戶應用程序中的任務隊列 - GAE

我在懷疑3種方法,從集中管理到每個命名空間分散到每個計劃任務的分散。尋求反饋。

  • 集中管理:有一個「主要任務隊列」或cron作業定期檢查其命名空間作業必須被執行,然後踢他們。每個名稱空間查找要完成的任務。

  • 每個命名空間分散:有定期檢查它屬於需要做什麼樣的命名空間的任務或每個命名空間cron作業。

  • 每個任務分散處理:當在命名空間中創建新作業時,立即爲該任務在將來期望的點處安排任務隊列。沒有「管理」任務隊列。

我冒充自己的問題在每一種方法:

  • 集中管理:魂鬥羅 - >不結垢,它需要迭代在所有 '客戶' 的命名空間。 PRO - >更易於管理/控制正在發生的事情。

  • 分散給每個名字空間:兩全其美?

  • 分散每個任務:專業 - >規模好,沒有管理開銷; CONTRA - >什麼時候版本升級,如果有一個錯誤和安排沒有正常工作,你必須糾正......聽起來像一場噩夢。如果安排失敗會怎樣?我可以擁有100%的玩家嗎?一年後計劃完成的任務能夠完成嗎?

有沒有人有很好的建議/經驗?

回答

0

您可能從現在起一年內沒有該客戶,或者條款可能會發生變化等,更不用說所有的技術挑戰了。未來的方案計劃將不起作用。

我沒有看到其他兩種方法之間的區別,除非你有數以百萬計的名字空間。

我不知道你如何存儲你的數據。您是否考慮創建一個單獨的表/實體進行開票,而與名稱空間無關?您在那裏插入一條記錄,與您的「未來」方法類似,並創建一個cron作業,以每天/每週/每月檢查一次該表。如果您刪除客戶或更新條款,那麼您也可以在此時更新此表。

+0

thx ...我認爲第三種方法也不好。 – koma

+0

小後續問題:我不能通過名稱空間進行事務處理,對嗎?因此,在全局名稱空間中標記記錄並保存記錄記錄不能在事務中完成! – koma

+1

看看這段代碼:https://developers.google。com/appengine/docs/java/multitenancy/multitenancy#Java_Using_namespaces_with_the_Datastore可以使用類似的方法:更新所選命名空間中的實體,並創建一個任務來更新全局名稱空間。如果此過程失敗,請向管理員發送消息。它可能永遠不會發生,但以防萬一。 –