【问题标题】:Managing task queues in a multi-tenant application - GAE在多租户应用程序中管理任务队列 - GAE
【发布时间】:2014-04-25 10:47:10
【问题描述】:

我必须在 AppEngine 的多租户环境中执行重复性任务。真正的用例是“实施经常性发票”。

我怀疑 3 种方法,从集中管理到分散每个命名空间到分散每个计划任务。寻求反馈。

  • 集中管理:有一个“主任务队列”或 cron 作业定期检查必须执行哪些命名空间作业,然后将它们启动。每个命名空间查找要完成的任务。

  • 每个命名空间去中心化:每个命名空间都有一个任务或 cron 作业,定期检查它所属的命名空间是否需要完成。

  • 每个任务去中心化:当在命名空间中创建新作业时,立即在未来所需的时间为该任务安排一个任务队列。没有“管理”任务队列。

我对每种方法都提出了问题:

  • 集中管理:CONTRA -> 无法扩展,它需要遍历所有“客户”命名空间。 PRO -> 更容易管理/控制正在发生的事情。

  • 每个命名空间去中心化:两全其美?

  • 每个任务去中心化:PRO -> 扩展性很好,没有管理开销; CONTRA -> 版本升级时怎么办,如果有错误和调度无法正常工作,你必须纠正……听起来像是一场噩梦。如果调度失败怎么办?我能否 100% 保证一年后计划的任务将得到执行?

有人有好的建议/经验吗?

【问题讨论】:

    标签: google-app-engine multi-tenant task-queue


    【解决方案1】:

    一年后您可能没有该客户,或者条款可能会发生变化等,更不用说所有的技术挑战了。未来方法中的计划将不起作用。

    我认为其他两种方法之间没有任何区别,除非您有数百万个名称空间。

    我不知道您如何存储数据。您是否考虑过为发票创建一个独立于命名空间的单独表/实体?您在那里插入一条记录,类似于您的“未来”方法,并创建一个 cron 作业以每天/每周/每月检查一次该表。如果您删除客户或更新条款,您也会同时更新此表。

    【讨论】:

    • 后续小问题:我不能在命名空间上进行交易,对吧?所以在事务中不能在全局命名空间中标记重复记录和保存簿记记录?!
    • 看这段代码:developers.google.com/appengine/docs/java/multitenancy/…你可以使用类似的东西:更新选定命名空间中的实体,并创建一个任务来更新全局命名空间。如果此过程失败,请向管理员发送消息。它可能永远不会发生,但以防万一。
    猜你喜欢
    • 2019-12-24
    • 2018-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-08
    • 1970-01-01
    • 2016-10-07
    • 1970-01-01
    相关资源
    最近更新 更多