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+。