综述 #
Ray 是一个为了给分布式提供通用的 API 发明出来的分布式计算框架,希望通过简单但通用的抽象编程方式,让系统自动完成所有的工作。Ray 的设计者基于这个理念让 Ray 可以跟 Python 紧密相连,能够通过很少的代码就能处理业务,而其它的并行、分布式内存管理等问题都不用担心,Ray 会根据这些资源的情况自动调度和缩放。
其次 Ray 希望能够对应用程序的一些系统级行为进行控制,如系统的环境变量、参数、故障处理等等。
Ray 使用了包括分布式引用计数和分布式内存等组件,这些组件增加了体系结构的复杂性,但对性能和可靠性来说是必需的。
Ray 构建在 gRPC 的基础上,并且在许多情况下与 gRPC 直接调用的性能一致。与单独使用 gRPC 相比,Ray 使应用程序更容易利用并行和分布式执行、分布式内存共享(通过共享内存对象存储)和动态创建轻量级服务(如通过 gRPC 调用 Actor)。
为了提高可靠性,Ray 的内部协议旨在确保故障期间的正确性只会增加非常低的性能开销。Ray 实现了分布式引用计数协议,以确保内存安全帮助从故障中恢复。
由于 Ray 用户考虑用资源而不是机器来表示他们的计算资源,因此 Ray 应用程序可以简单地从笔记本电脑扩展到集群,而无需任何代码更改。Ray 的分布式调度器和对象管理器旨在实现这种无缝扩展,且开销低。