我想构建一个类似于cronjob的系统,它可以从数据库中获取所有用户并为每个用户创建多个(我的意思是很多)并发请求并进行一些执行并将结果保存到db。它将在每天7/24每小时运行一次。
我提出了以下解决方案:
那么,我的方法对这种情况有意义吗?
这里最重要的是扩展(这就是为什么我认为将所有用户分配给lambda函数,限制并发请求和资源),我们如何为可指数增加的用户数量提供可扩展且高效的想法?
或其他任何建议?
答案 0 :(得分:1)
这是我的解决方案:
如果100个并发的lambdas不足以满足您的需求,请创建一张增加限额的票证,您将收取使用费用。
但是,您仍然无法确定将来需要多少个lambda。没有必要在单独的lambda中处理每个用户,而是可以使用一大块用户数据调用lambda。例如比方说,你的最大值。 lambda limit是100并且有1000个用户然后你可以做某事(我不知道go
,这里是一个python
代码,可能不是100%语法正确)
users = get_users_fromdb() # users = [1,2,3,... 1000]
number_of_users = len(users)
chunk_size = number_of_users / 100 # 100 is your lambda limit
for i in range(0, number_of_users, chunk_size)
# e.g. chunk_users_data = [1,2,3 ... 10]
chunk_users_data = users[i * chunk_size : (i + 1) * chunk_size ]
invoke_lambda_to_process_users_chunk_data()
以下是您可以在其他lambda中执行的操作
users = event.get('users')
for user in users:
try:
process_user(user)
except Exception as e:
print(e) # handle exception / error if you want
默认情况下,100是并发运行lambdas的限制。如果你有100K用户,IMO,你应该去支持案例,将你的帐户的并发lambda限制增加到1000或更多。我正在研究lambda,我们有10K的限制。还有一件事要记住,你不确定你的一个lambda调用是否能够处理一个块中的所有用户,所以添加一些逻辑以在超时之前重新调用剩余用户。一个lambda可以运行到最大。 5分钟你可以在毫秒内从context
物体获得剩余时间。