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