我目前正在评估可以处理单个文档的 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 次状态机执行。状态机执行限制为 1,000,000 次打开执行。
状态机最多可以运行 1 年,在此期间其执行历史不应超过 25,000。
希望能帮助到你。
关于amazon-web-services - AWS step 函数可以执行超过 25000 次吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54259775/