Ray分布式系统的设计细节与应用
1. 引言
在使用Ray的远程函数和参与者之后,了解其背后的工作原理对于更好地使用Ray至关重要。本文将深入探讨Ray的重要分布式系统概念,包括容错性、资源管理以及加速远程函数和参与者的方法。
2. 容错性
容错性指的是系统如何处理从用户代码到框架本身或运行它的机器的各种故障。Ray针对不同系统有不同的容错机制,但和许多系统一样,Ray无法从头节点故障中恢复。
2.1 系统架构与容错
Ray的架构由应用层和系统层组成,两者都能处理故障。系统层主要由全局控制服务(GCS)、分布式调度器和分布式对象存储组成。除GCS外,其他组件都可水平扩展且具有容错性。
GCS是Ray架构的核心,它维护着系统的整个控制状态,内部是一个具有发布/订阅功能的键值存储。目前,GCS是单点故障,运行在头节点上。使用GCS集中维护Ray的状态,使得系统层的其他组件可以无状态,这对于容错至关重要,因为组件在故障时可以简单地重启并从GCS读取信息。
2.2 远程函数的容错
远程函数不包含持久状态,因此从其故障中恢复相对简单。Ray会不断重试,直到成功或达到最大重试次数。可以通过 @ray.remote
注解中的 max_retries
参数控制重试次数。以下是一个示例:
@ray.remote
def flaky_remote_fun(x):
import random
import sys
if rand