

# Amazon ECS 服务
<a name="ecs_services"></a>

您可以使用 Amazon ECS 服务在 Amazon ECS 集群中同时运行和维护指定数量的任务定义实例。如果其中一个任务失败或停止，Amazon ECS 服务调度器会启动另一个任务定义实例来替换它。这有助于保持服务中的预期任务数。

您也可选择在负载均衡器后面运行服务。负载均衡器将在与服务关联的各个任务间分配流量。

我们建议您将服务调度器用于长时间运行的无状态服务和应用程序。服务调度器可确保遵循您指定的计划策略并在任务失败时（例如，在底层基础设施因某个原因失败的情况下）重新计划任务。例如，如果底层基础设施出现故障，服务调度器会重新安排任务。您可以使用任务放置策略和约束来自定义调度器的任务放置和终止方式。如果服务中的某个任务停止，调度器将启动一个新的任务来替代它。此过程将一直持续，直到服务根据服务使用的调度策略达到预期任务数。

在容器运行状况检查或负载均衡器目标组运行状况检查失败后，服务计划程序还会替换被确定为运行状况不佳的任务。此替换取决于 `maximumPercent` 和 `desiredCount` 服务定义参数。如果任务被标记为运行状况不佳，则服务计划程序将首先启动替换任务。然后会发生以下情况。
+ 如果替换任务的运行状况为 `HEALTHY`，则服务计划程序将停止运行不正常的任务
+ 如果替换任务的运行状况为 `UNHEALTHY`，则计划程序将停止运行状况不佳的替换任务或现有的运行状况不佳任务，以使任务总数等于 `desiredCount`。

如果 `maximumPercent` 参数限制计划程序先启动替换任务，则计划程序将一次随机停止一个运行状况不佳的任务以释放容量，然后启动替换任务。启动和停止过程将继续，直到所有运行状况不佳的任务都被运行状况正常的任务所替换。替换了所有运行状况不佳的任务并且只有运行正常的任务后，如果任务总数超过 `desiredCount`，则会随机停止运行状况正常的任务，直到任务总数等于 `desiredCount`。有关 `maximumPercent` 和 `desiredCount` 的更多信息，请参阅[服务定义参数](https://docs.amazonaws.cn/AmazonECS/latest/developerguide/service_definition_parameters.html)。

服务调度器包括用来限制任务反复启动失败后重新启动的频率的逻辑。如果一个任务尚未进入 `RUNNING` 状态便停止，则服务调度程序会开始降低启动尝试的速度，并发出服务事件消息。此行为可防止在您解决问题之前将不必要的资源用于失败的任务。服务更新后，服务调度器会恢复正常调度行为。有关更多信息，请参阅[Amazon ECS 服务节流逻辑](service-throttle-logic.md)和[查看 Amazon ECS 服务事件消息](service-event-messages.md)。

## 基础设施计算选项
<a name="service-conmpute-options"></a>

有两个计算选项可分发您的任务。
+ capacity provider strategy（容量提供程序策略）会使 Amazon ECS 在一个或多个容量提供商之间分发您的任务。

  如果要在 Amazon ECS 托管实例上运行工作负载，则必须使用容量提供程序策略选项。

  对于 **capacity provider strategy**（容量提供程序策略），控制台会默认选择一个计算选项。下面介绍了控制台用于选择原定设置值的顺序：
  + 如果您的集群已定义原定设置容量提供程序策略，则将选择该策略。
  + 如果您的集群没有定义的原定设置容量提供程序策略，但您确实已将 Fargate 容量提供程序添加到集群中，则选择使用 `FARGATE` 容量提供程序的自定义容量提供程序策略。
  + 如果您的集群没有定义原定设置容量提供程序策略，但您已将一个或多个自动扩缩组容量提供程序添加到集群中，则选中**使用自定义（高级）**选项，且您需要手动定义策略。
  + 如果您的集群没有定义原定设置容量提供程序策略，并且没有向集群添加容量提供程序，则会选择 Fargate 启动类型。
+ 启动类型会让 Amazon ECS 直接在 Fargate 或注册到集群的 EC2 实例上启动我们的任务。

  如果要在 Amazon ECS 托管实例上运行工作负载，则必须使用容量提供程序策略选项。

  默认情况下，该服务会在集群 VPC 的子网中启动。

## 服务自动扩缩
<a name="service-auto-scaling-options"></a>

服务自动扩缩是指自动增加或减少 Amazon ECS 服务中所需任务数的功能。Amazon ECS 利用 Application Auto Scaling 服务来提供此功能。

有关更多信息，请参阅 [自动扩缩 Amazon ECS 服务](service-auto-scaling.md)。

## 服务负载均衡
<a name="service-load-balancing-options"></a>

托管在 Amazon Fargate 上的 Amazon ECS 服务支持应用程序负载均衡器、网络负载均衡器和网关负载均衡器。请使用下表了解要使用的负载均衡器类型。


| 负载均衡器类型 | 在这些情况下使用 | 
| --- | --- | 
|  应用程序负载均衡器  | 路由 HTTP/HTTPS（或第 7 层）流量。应用程序负载均衡器提供了一些新功能，这使其非常适合用于 Amazon ECS 服务： [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AmazonECS/latest/developerguide/ecs_services.html) | 
| 网络负载均衡器 | 路由 TCP 或 UDP（或第 4 层）流量。 | 
| Gateway Load Balancer | 路由 TCP 或 UDP（或第 4 层）流量。 使用虚拟设备，例如防火墙、入侵检测和防御系统以及深度数据包检测系统等。 | 

有关更多信息，请参阅 [使用负载均衡分配 Amazon ECS 服务流量](service-load-balancing.md)。

## 互连服务
<a name="service-connecting-options"></a>

如果需要将应用程序连接到作为 Amazon ECS 服务运行的其他应用程序，Amazon ECS 会提供以下无需负载均衡器的方法来实现此目的：
+ Service Connect：支持使用短名称和标准端口进行自动发现的服务到服务通信。
+ 服务发现：服务发现使用 Route 53 为服务创建命名空间，这样便可通过 DNS 发现该服务。
+ Amazon VPC Lattice：VPC Lattice 是一项完全托管式应用程序网络服务，用于跨多个账户和 VPC 连接、保护和监控服务。使用该服务会产生相应费用。

有关更多信息，请参阅 [互连 Amazon ECS 服务](interconnecting-services.md)。