Cron 服务器集群:一个任务 背景
我们的客户使用他们设定每日预算的服务。这是一项预付费服务,我们每天从用户的预算中分配特定金额 表:Cron 服务器集群:一个任务 背景,cron,cluster-computing,Cron,Cluster Computing,我们的客户使用他们设定每日预算的服务。这是一项预付费服务,我们每天从用户的预算中分配特定金额 表: 预算-我们每天可以花多少钱 资金-客户实际余额 分配的钱-从钱中扣除的今天可以使用的金额(基于预算) 有一个cron作业,每隔几分钟运行一次并检查: 如果用户在某一天分配了资金 如果分配了资金=预算(用户可以在白天增加预算) 在第一种情况下,我们分配每日预算的全部金额,在第二种情况下,我们分配当天预算和已分配金额之间的差额(在这种情况下,我们在当天分配的金额中创建额外记录) 分配分为两个阶
- 预算-我们每天可以花多少钱
- 资金-客户实际余额
- 分配的钱-从钱中扣除的今天可以使用的金额(基于预算)
- 如果用户在某一天分配了资金
- 如果分配了资金=预算(用户可以在白天增加预算)
- 仅在一台服务器上运行cron作业-无冗余、客户端投诉和故障损失
- 在分配的资金上添加一个独特的索引,类似于(客户id、日期、金额)-如果客户在一天内将预算翻倍或以相同的金额多次增加预算,则不会为给定的一天分配更多的资金
还有其他选择吗?任何建议都将不胜感激 好的,所以我在集群的一个实例上运行了这个。如果您使用Amazon AWS并且处于类似的情况,下面是一个选项 在每台机器上,在cron作业代码的开头,执行以下操作:
- 调用
(AWS API),解析响应以获得所有实例的列表/数组description\u load\u balancers
- 获取
-返回发送请求的机器的实例IDhttp://169.254.169.254/latest/meta-data/instance-id
- 如果收到的实例ID在所有实例的列表/数组中为#1-继续,如果不是-退出
另外,请确保在短时间内自动替换此负载平衡器下的不健康实例,因为
description\u load\u balancers
会返回健康和不健康实例的列表。如果实例#1发生故障,您可能会有一段时间无法完成某项工作。另外一个选项是获取特定服务器在NLB中的位置(它们不会更改)。如果它处于位置#1-它必须完成任务,否则-它必须跳过。但是,提供此类数据的NLB服务将返回所有已分配实例的列表,而不仅仅是那些正常的实例。因此,冗余问题依然存在。