深入理解 Ray 远程 Actor:持久化与扩展策略
1. 持久化的重要性与实现方式
在某些实现中,我们采用文件系统持久化,但同样的方法也适用于其他类型的持久化,如 S3 或数据库。系统会对失败的任务重试最多 n 次,之后在调用 ray.get 时任务将抛出 RayActorError 异常。
当 Actor 重启时,会重新运行其构造函数来重建状态。因此,如果在 Actor 执行期间状态发生了改变,这些改变将会丢失。为了保留这些状态,Actor 必须实现自定义的持久化。
1.1 整体状态持久化
在一些情况下,将状态作为一个整体保存是可行的,特别是当状态的大小相对较小且状态变化相对较少时。为了简化示例,我们使用本地磁盘持久化。但在分布式环境中,应考虑使用网络文件系统(NFS)、亚马逊简单存储服务(S3)或数据库,以便从 Ray 集群的任何节点访问 Actor 的数据。
以下是一个使用文件系统持久化的持久化 Account Actor 的示例:
@ray.remote
class Account:
def __init__(self, balance: float, minimal_balance: float, account_key: str,
basedir: str = '.'):
self.basedir = basedir
self.key = account_key
i
超级会员免费看
订阅专栏 解锁全文
19

被折叠的 条评论
为什么被折叠?



