我有一个应用程序,在云上的两个不同节点上维护。我在应用程序中有一个调度程序,每5分钟触发一次,它在数据库中执行一些更新操作。如何避免这两个操作导致数据库异常。是否存在一个应用程序可能知道的方式,已经触发了其他实例或云代工厂中可能发生的任何类型的节点间通信。
非常感谢
答案 0 :(得分:0)
Cloud Foundry会想到几个选项:
使用您的数据库创建分布式“锁定”。这可能就像数据库中的表或记录一样简单,调度程序在执行任何其他操作之前先检出。一旦锁定,调度程序就可以工作。如果它无法获得锁定,它将重新进入睡眠状态。然后,当它完成后,它将返回锁定。
如果你有很多工作要做,你可以将它分成几个部分并为每个部分设置锁,这样你就可以在不同的实例中分配工作。这会变得更复杂,所以你必须权衡优势和额外的复杂性,看看它是否适合你的用例。
仅在第一个节点上运行调度程序。您可以通过查看应用程序实例编号来确定第一个节点。 env变量CF_INSTANCE_INDEX
或VCAP_APPLICATION
,包含JSON并具有instance_index
属性。对于任一选项,第一个实例的值将为0。如果为0,则调度程序运行。如果它大于零,则调度程序不会运行。
希望有所帮助!