Swift 分布式 Actor

一个用于 Swift 的点对点集群 Actor 系统实现。

注意: 本项目为分布式 Actor 语言特性提供了一个集群运行时实现。

简介

Beta 软件

重要提示: 该库目前作为 beta 预览软件发布。 尽管我们预计很少有更改,但请注意,在宣布稳定的 1.0 版本之前,该库不保证源代码兼容性。

我们预计在 Swift 5.7 的 beta 阶段发布多个 1.0.0-beta-n 版本,并在不久后发布源代码稳定的 1.0 版本。

大多数 API 和运行时都相当稳定,并且已经长期证明了其自身价值。 剩下的大部分工作都是确保所有 API 都能与 distributed actor 语言特性的最新修订版本良好配合。

重要提示: 请忽略并且不要使用任何以 _ 为前缀的功能(例如类型和方法),因为我们计划在达到稳定的 1.0 版本时将其删除。

什么是分布式 Actor?

分布式 Actor 是 Swift 提供的“本地” Actor 模型的扩展,通过其 actor 关键字实现。

分布式 Actor 使用 distributed actor 关键字(并导入 Distributed 模块)声明,并且允许在此类 Actor 中声明 distributed func 方法。 然后可以从分布式 Actor 系统中的其他节点远程调用此类方法。

分布式 Actor *语言特性* 不包含任何特定的 *运行时*,仅定义围绕分布式 Actor 的语言和语义规则。 该库为分布式 Actor 提供了一个功能丰富的、专注于集群服务器端的运行时实现(即 DistributedActorSystem 实现)。

要了解有关语言特性和库的更多信息,请参阅此项目的参考文档。

尽早开源此库的主要目的是证明有能力使用 distributed actor 语言特性实现一个功能完整、引人注目的集群解决方案,并协同发展两者。

示例

您可以参考 Samples/ 目录以查看许多更实际的示例应用程序,这些应用程序展示了如何在集群中使用分布式 Actor。

分布式 Actor 最“经典”的例子是 SampleDiningPhilosophers

您可以在单个节点中运行它 (run --package-path Samples/ SampleDiningPhilosophers),或者在托管在同一物理机器上的 3 个集群节点中运行:run --package-path Samples/ SampleDiningPhilosophers distributed。 请注意,您无需更改分布式 Actor 的实现即可在“本地”或“分布式”模式下运行它们。

文档

请参阅渲染的 docc 参考文档,了解有关分布式 Actor 以及如何使用此库及其各种功能的更多信息。

注意: 文档仍在开发中,请随时提交有关缺少或不清楚的文档的问题或补丁。

开发

此库需要 Swift (5.7+) 和 Xcode 的 beta 版本才能正常运行,因为 distributed actor 特性是该 Swift 版本的一部分。

在 macOS 上进行开发时,还请确保更新到最新的 macOS beta 版,因为分布式 Actor 工作所需的部分 Swift 运行时库随操作系统 *一起* 提供。

分布式 Actor 不向后部署,需要最新版本的 iOS、macOS、watchOS 等。

Linux 系统上进行开发时,您可以从 swift.org/downloads 下载最新的 Swift 5.7 工具链,并使用它来尝试或运行该库,如下所示

$ export TOOLCHAIN=/path/to/toolchain
$ $TOOLCHAIN/usr/bin/swift test
$ $TOOLCHAIN/usr/bin/swift run --package-path Samples/ SampleDiningPhilosophers dist

IDE 支持:Xcode

最新的 (beta) Xcode 版本包含对 distributed 语言语法(distributed actordistributed func)的完整支持,因此请使用可用的最新 Beta Xcode 编辑项目和任何使用分布式 Actor 的项目。

IDE 支持:其他 IDE

可以在其他 IDE 中打开和编辑此项目,但是大多数 IDE 尚未赶上最新的语言语法(即 distributed actor),因此可能难以理解新语法。

VSCode

您可以使用 Swift Server Work Group 维护的 VSCode 插件 从 VSCode 编辑此项目。

您可以从 此处安装 VSCode 扩展

该扩展使用 sourcekit-lsp,因此应该能够很好地突出显示和编辑使用源的分布式 Actor。 如果没有,请报告问题!

CLion

该项目可以在 CLion 中作为 SwiftPM 包项目打开,但是 CLion 和 AppCode 尚未支持新的 distributed 语法,因此它们在实现此功能之前可能在格式化代码方面存在问题。

另请参阅社区成员撰写的有关使用 CLion 进行 Swift 开发的以下指南

警告

该项目目前发出许多关于 Sendable 的警告,这是预期的,我们正在慢慢努力消除它们。

该项目的许多内部组件使用 Sendable 检查无法识别的高级同步模式,因此许多警告都是不正确的,但编译器无法知道这一点。 随着我们将这些内部组件移动到使用 Swift actor 运行时,我们将删除大部分这些内部组件。

文档工作流程

该项目的文档使用 Doc Compiler,通过 SwiftPM DocC 插件

如果您不熟悉 DocC 语法和通用风格,请参阅其文档:https://developer.apple.com/documentation/docc

该项目包括两个辅助脚本,用于构建和预览文档。

构建文档

./scripts/docs/generate_docc.sh

要预览和浏览作为网页的文档,请运行

./scripts/docs/preview_docc.sh

这将导致类似于以下的输出

========================================
Starting Local Preview Server
	          https://:8000/documentation/distributecluster

集成测试

集成测试包括运行集群的实际多个节点,例如终止它们以测试集群的恢复机制。

要求

支持的版本

此项目需要 Swift 5.7+