一个用于 Swift 的点对点集群 Actor 系统实现。
注意: 本项目为分布式 Actor 语言特性提供了一个集群运行时实现。
重要提示: 该库目前作为 beta 预览软件发布。 尽管我们预计很少有更改,但请注意,在宣布稳定的 1.0 版本之前,该库不保证源代码兼容性。
我们预计在 Swift 5.7 的 beta 阶段发布多个 1.0.0-beta-n
版本,并在不久后发布源代码稳定的 1.0 版本。
大多数 API 和运行时都相当稳定,并且已经长期证明了其自身价值。 剩下的大部分工作都是确保所有 API 都能与 distributed actor
语言特性的最新修订版本良好配合。
重要提示: 请忽略并且不要使用任何以
_
为前缀的功能(例如类型和方法),因为我们计划在达到稳定的 1.0 版本时将其删除。
分布式 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
最新的 (beta) Xcode 版本包含对 distributed
语言语法(distributed actor
、distributed func
)的完整支持,因此请使用可用的最新 Beta Xcode 编辑项目和任何使用分布式 Actor 的项目。
可以在其他 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
集成测试包括运行集群的实际多个节点,例如终止它们以测试集群的恢复机制。
要求
brew install coreutils
安装 stdbuf
此项目需要 Swift 5.7+。