通过 Amazon OpenSearch Service 的集群管理器任务限制提高弹性

亚马逊 OpenSearch S ervice 是一项托管服务,可以轻松地在 亚马逊云科技 云中大规模保护、部署和操作 OpenSearch 集群。Amazon OpenSearch 集群由数据节点和集群管理器节点组成。集群管理器节点在彼此之间选出一个领导者。领导节点是集群中元数据的权限,这称为 集群状态 。群集状态的任何更改都由领导节点处理并广播到群集中的所有节点。对于集群管理器的无界队列中的任何群集状态更改,例如创建索引、动态放置映射、分片启动等,数据节点都会将新的集群级别任务排入队列。在此队列中等待的任务称为待处理任务。由于它是无界的,因此可以将 大量待处理任务排队 ,这会使领导节点超负荷。这会影响领导者的性能,反过来也可能影响整个集群的稳定性和可用性。

我们为集群管理器节点引入了限制机制,以防范大量待处理任务。它在向领导节点提交任务时起作用。此功能适用于亚马逊 OpenSearch Service 中的亚马逊 OpenSearch 引擎 1.3 及更高版本。

集群管理器任务限制

集群管理器任务限制是一种保护群集管理器免受其他节点提交过多资源密集型群集状态更新任务的机制。对于诸如 put-map ping之类的任务 ,数据节点现有的集群状态任务限制机制有助于避免集群管理器过载。例如,如果集群管理器可以处理 10K 个请求,并且域有 10 个数据节点,则每个数据节点将获得 1,000 个放置映射请求的限制。如果域增长到 100 个数据节点,则每个数据节点必须限制为 100 个请求。为了避免在群集更改数据节点数量时必须修改这些限制并支持更多任务类型,我们在集群管理器节点上引入了限制以进行自我保护。

集群状态更新任务属于不同的类型( 创建索引 放置映射等) ,这种限制机制会根据任务的类型拒绝任务。对于任何传入任务,集群管理器都会评估待处理任务队列中相同类型的任务总数。如果此数字超过任务类型的阈值,则集群管理器会拒绝传入的任务。

Amazon OpenSearch Service 为不同的任务类型配置不同的限制阈值,并且限制对每种任务类型分别起作用。拒绝特定任务不会影响其他不同类型的任务。例如,如果集群管理器拒绝了 放置映射 任务,它仍然可以接受并发 的创建索引任务。

数据平面 API( _mapping/ 、 _set ting/ 等)生成的所有任务均已上线以进行限制, 并在此处列出。

当群集管理器拒绝任务时,数据节点会以指数回退方式执行重试,将任务重新提交给集群管理器,直到成功提交。如果在超时时间内重试失败,则 Amazon OpenSearch 会返回集群超时错误。

错误示例

{
  "error" : {
    "type" : "process_cluster_event_timeout_exception",
    "reason" : "failed to process cluster event (indices:admin/mapping/put) within 30s",
    "suppressed" : [
      {
        "type" : "cluster_manager_throttling_exception",
        "reason" : "Throttling Exception : Limit exceeded for put-mapping"
      }
    ]
  },
  "status" : 503
}

处理超时错误

限制异常由数据节点处理;它们对受限制的任务执行重试。如果 API 在限制期内超时,你会得到 pro cess_cluster_event_timeout_exception,这是 50 3 错误。这与之前在集群管理器节点队列中的任务超时时时引发的错误相同。你可以重试出现超时错误的 API 调用。

解决方案将 通过将限制异常直接暴露为 API 错误来改进此功能。

监控节流

你可以使用 _n odes/stats API 来监控详细的限制统计信息。

curl -XGET "https://{endpoint}/_nodes/stats/cluster_manager_throttling?pretty"

你可以使用 _ nodes/stats 响应 中的 cluster_manager_ throttling 部分来跟踪哪些任务受到限制以及有多少任务被限制。

示例响应

    "cluster_manager_throttling" : {
        "cluster_manager_stats" : {
          "TotalThrottledTasks" : 18,
          "ThrottledTasksPerTaskType" : {
            "put-mapping" : 18
          }
        }
    }

结论

在这篇文章中,我们向您展示了向集群管理器节点提交任务的限制机制如何使其更具弹性地抵御Amazon OpenSearch Service中的大量待处理任务,我们在该服务中微调了每个集群的阈值。

Amazon OpenSearch 中提供了集群管理器限制功能 ,我们一直在寻找外部捐款。 您可以参阅 RFC (征求意见)开始使用。


作者简介

Dhwanil Patel 是一名软件开发工程师,在亚马逊 OpenSearch Service 上工作。他喜欢为开源软件开发做出贡献,并且对分布式系统充满热情。

Shweta Tharej a 是亚马逊 OpenSearch 服务的首席工程师。她对构建分布式和自主系统感兴趣。她是一名维护者,也是 OpenSearch 的积极贡献者。

乔恩·汉德勒 是总部位于加利福尼亚州帕洛阿尔托的亚马逊网络服务的高级首席解决方案架构师。Jon 与 OpenSearch 和亚马逊 OpenSearch Service 紧密合作,为想要迁移到 亚马逊云科技 云的搜索和日志分析工作负载的众多客户提供帮助和指导。在加入 亚马逊云科技 之前,Jon 的软件开发生涯包括 4 年编写大型电子商务搜索引擎。Jon 拥有宾夕法尼亚大学的文学学士学位以及西北大学的计算机科学和人工智能理学硕士和博士学位。