我目前正在评估可处理单个文档的AWS状态机。状态机将花费5-10分钟来处理单个文档。
{
"Comment":"Process document",
"StartAt": "InitialState",
"States": {
//the document goes through multiple states here
}
}
C#代码通过为每个文档传递一些json来调用状态机。就像是
// max 100 documents
public Task Process(IEnumerable<Document> documents)
{
var amazonStepFunctionsConfig = new AmazonStepFunctionsConfig { RegionEndpoint = RegionEndpoint.USWest2 };
using (var amazonStepFunctionsClient = new AmazonStepFunctionsClient(awsAccessKeyId, awsSecretAccessKey, amazonStepFunctionsConfig))
{
foreach(var document in documents)
{
var jsonData1 = JsonConvert.SerializeObject(document);
var startExecutionRequest = new StartExecutionRequest
{
Input = jsonData1,
Name = document.Id,
StateMachineArn = "arn:aws:states:us-west-2:<SomeNumber>:stateMachine:ProcessDocument"
};
var taskStartExecutionResponse = await amazonStepFunctionsClient.StartExecutionAsync(startExecutionRequest);
}
}
}
我们以
100
批处理文档。因此,在上述循环中,最大文档数将为100
。但是,我们每周要处理数千个文档(超过25000个)。按照AWS documentation
Maximum execution history size is 25,000 events. If the execution history reaches this limit the execution will fail
。这是否意味着我们不能执行单个状态机超过25000次?
为什么状态机的执行应取决于其历史记录,为什么AWS不能仅清除历史记录?
我知道可以使用continue as new execution,但是我只是想了解历史记录限制及其与状态机执行的关系,我的理解是正确的吗?
更新1
我不认为这是重复的问题。我正在尝试了解我对历史记录限制的理解是否正确?为什么历史与状态机可以执行的次数有关?状态机执行时,会创建历史记录,如果历史记录超过25000+,则清除它们或将其归档。 AWS为什么会停止执行状态机。那没有意义。
那么问题来了,单状态机(唯一的arn)能否在循环中执行25000+次以上?
如果我必须创建新的状态机(在25000次执行之后),那该状态机将不会具有不同的arn?
另外,如果我必须遵循linked SO post,我将在哪里获得当前的执行次数?他也在step函数中循环,而我在step函数中循环
更新2
因此,仅出于测试目的,我创建了以下状态机
{
"StartAt": "HelloWorld",
"States": {
"HelloWorld": {
"Type": "Pass",
"Result": "Hello World!",
"End": true
}
}
}
并成功执行了26000次
public static async Task Main(string[] args)
{
AmazonStepFunctionsClient client = new AmazonStepFunctionsClient("my key", "my secret key", Amazon.RegionEndpoint.USWest2);
for (int i = 1; i <= 26000; i++)
{
var startExecutionRequest = new StartExecutionRequest
{
Input = JsonConvert.SerializeObject(new { }),
Name = i.ToString(),
StateMachineArn = "arn:aws:states:us-west-2:xxxxx:stateMachine:MySimpleStateMachine"
};
var response = await client.StartExecutionAsync(startExecutionRequest);
}
Console.WriteLine("Press any key to continue");
Console.ReadKey();
}
在AWS控制台上,我能够提取所有26000次执行的历史记录
所以我不确定
Maximum execution history size is 25,000 events
是什么意思 最佳答案
我认为您做对了。状态机执行历史记录的上限为25,000。您已经测试了26,000个状态机执行。 State Machine执行限制为1,000,000个开放执行。
状态机最多可以运行1年,并且在此期间其执行历史记录不应超过25,000。
希望能帮助到你。