Может ли функция шага AWS выполняться более 25000 раз? - PullRequest
0 голосов
/ 18 января 2019

В настоящее время я оцениваю конечный автомат 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 выполнений enter image description here

Так что я не уверен точно, что это значит под Maximum execution history size is 25,000 events

1 Ответ

0 голосов
/ 19 января 2019

Не думаю, что вы правильно поняли. Ограничение 25 000 для истории выполнения State Machine. Вы проверили 26 000 казней State Machine. Предел казней State Machine составляет 1 000 000 открытых казней.

Конечный автомат может работать до 1 года, и за это время его история выполнения не должна превышать 25 000.

Надеюсь, это поможет.

...