В настоящее время я оцениваю конечный автомат 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 Maximum execution history size is 25,000 events. If the execution history reaches this limit the execution will fail
.
Означает ли это, что мы не можем выполнить один конечный автомат более 25000 раз?
Почему выполнение конечного автомата должно зависеть от его истории, почему AWS не может просто очистить историю?
Я знаю, что есть способ продолжить как новое выполнение , но я просто пытаюсь понять предел истории и его отношение к выполнению конечного автомата, и мое понимание верно?
Обновление 1
Я не думаю, что это двойной вопрос. Я пытаюсь найти правильное ли мое понимание предела истории? Почему история имеет отношение к тому, сколько раз может выполнить конечный автомат? Когда конечный автомат выполняется, он создает запись истории, если записи истории превышают 25000+, затем очищают их или архивируют. Почему бы AWS остановить выполнение конечного автомата. Это не имеет смысла.
Итак, вопрос: может ли один конечный автомат (уникальный arn) выполняться в цикле более 25000+ раз?
если бы мне пришлось создавать новый конечный автомат (после 25000 выполнений), разве этот конечный автомат не имел бы другого arn?
Кроме того, если бы я должен был следовать связанный SO сообщение где бы я мог получить текущее количество казней? Кроме того, он зацикливается на-в функции шага, в то время как я вызываю функцию-шага в-в цикле
Обновление 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