我目前正在评估可处理单个文档的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次执行的历史记录
amazon-web-services - AWS step函数能否执行25000次以上?-LMLPHP

所以我不确定Maximum execution history size is 25,000 events是什么意思

最佳答案

我认为您做对了。状态机执行历史记录的上限为25,000。您已经测试了26,000个状态机执行。 State Machine执行限制为1,000,000个开放执行。

状态机最多可以运行1年,并且在此期间其执行历史记录不应超过25,000。

希望能帮助到你。

07-24 09:39
查看更多