2 个版本
0.1.1 | 2024 年 2 月 18 日 |
---|---|
0.1.0 | 2024 年 2 月 7 日 |
#703 在 数据库接口
180KB
4K SLoC
传输
此项目受 MIT 许可证的许可。
传输是一个用于可靠调度和传输延迟和周期性消息的程序。它采用模块化架构和无关设计,可以无缝集成到各种部署环境中。
主要功能
- 灵活的调度:支持延迟、间隔和 Cron 调度,提供多样化的传输选项。
- 可靠投递:通过如 Nats 等强大的传输适配器确保消息到达目的地。
- 数据完整性:在传输和存储过程中使用可配置的适配器(如内存和 Postgres)确保消息数据的安全。
- 可定制的部署:作为独立二进制文件、Docker 容器或 Kubernetes 微服务运行,满足不同需求。
- 全面的配置:提供专门的代数数据结构作为配置,便于设置和定制。
- 详细的监控:与 Prometheus 指标集成,以深入了解程序行为和性能。
- 健康检查:实现了 gRPC 健康检查协议,用于监控服务健康。
- 优雅关闭:处理终止信号(SIGINT、SIGTERM),确保程序正确关闭。
- 严格的测试:强调彻底的测试实践,以确保可靠性和稳定性。
安装
独立二进制文件
目前,定义的二进制应用程序仅支持 postgres 仓库和 nats 传输适配器。因此,需要在您提供的配置文件中运行并可访问这些适配器在主机和端口上。
为了方便,这些依赖项包含在仓库根目录下的 ./docker-compose.yaml
文件中。
# Checkout the repository.
git checkout https://github.com/kasbuunk/transmit
cp transmit
# Run dependencies (verify no conflicting pre-existing processes listen on these ports).
make setup
# Install
cargo install transmit
# Copy the configuration file.
cp sample.ron config.ron # Adjust to access nats and postgres dependencies.
# Run the program.
transmit config.ron
Docker-compose
要使用 docker-compose 运行整个程序及其依赖项,请参阅 tests
目录中的正确且持续测试的示例配置。
Kubernetes
此程序设计的首选部署环境是在 Kubernetes 集群中以微服务运行。
Helm
要使用 Helm 部署,请运行以下命令。
# Add the helm repository.
helm repo add transmit https://kasbuunk.github.io/transmit
# Install the release. N.B.: make sure the required dependencies (Nats and Postgres) are deployed and accepting connections on the configured ports, with the configurable Postgres connection credentials.
helm install transmit transmit/transmit --values tests/values.yaml # Replace with your configuration.
用法
用法取决于配置的传输适配器和选择的 Message
变体。
支持的传输适配器
- gRPC:假设程序正在运行并通过gRPC服务器可访问,请使用为编程语言生成的protobuf客户端,位于
proto/client/{LANGUAGE}
。使用运行Transmit服务的宿主机和端口初始化客户端。接下来,使用客户端构建和发送gRPC请求。
支持的 Message
变体
NatsEvent
:如果已安排消息进行传输,则连接到作为Transmit部署传输依赖项配置的Nats服务器,并断言已发布预期的计划事件。
例如,如果Nats在Kubernetes上运行,请在独立的终端运行
先决条件:kubectl
和 nats
CLI。
# Make nats accessible from the host.
kubectl port-forward svc/nats 4222:4222
# Observe and assert the expected events are published when scheduled.
nats sub -s "nats://127.0.0.1:4222" "MYSUBJECT.details"
Go客户端
请参考 client/go/client_test.go
文件,了解如何与Transmit程序进行交互的简单、正确测试。
其他语言
文件 proto/transmit.proto
包含了生成protobuf和gRPC客户端代码所需的所有必需类型和gRPC定义,以便为大多数流行的编程语言生成代码。
设计
程序实施了关注点的分离。首先,它被设计成对部署环境无感知。
应用程序有一组松散耦合的组件。每个组件由 contract
模块中的一个特性定义,这样组件就可以进行适当的单元测试。将适配器组合成适合一系列部署环境的合适集合。
- 调度器
- 仓库
- 发射器
- 传输
- 配置
调度器
调度器是程序的核心,它定义了领域行为。它负责确定应该传输哪些消息,何时传输,并与仓库协商计划传输的状态检索和管理。
支持的 Schedule
变体
Delayed
:在指定的时间安排传输。Interval
:在指定的时间开始安排传输,然后以指定的间隔持续时间重复。Cron
:在指定的时间之后开始安排传输,然后以指定的cron计划重复。
仓库
仓库负责执行调度器命令的状态更新。
支持的适配器
- 内存:一个简单的内存中仓库,在退出时丢弃所有状态。
- Postgres:一个生产就绪适配器,通过给定的Postgres数据库连接管理状态。
发射器
对于每个 Message
变体,都实现了传输适配器以进行传输中介。发射器负责发送消息并报告传输是否成功,这样调度器就可以对实现细节保持无感知。
支持的适配器
- Nats:一个云原生事件总线。
传输
传输适配器负责解析传入消息并在外部调用者与领域核心(即调度器)之间进行经纪。
支持传输
- gRPC:可以通过其gRPC接口安排传输。这提供了在网络上的类型安全语言互操作性通信。
配置
模块 config
提供了一种代数数据结构,完全模拟了系统启动时的有效状态。因此,程序只有在精确配置后才会启动运行
- 恰好一个传输适配器。
- 恰好一个仓库适配器。
- 对于每个
Message
变体,恰好一个传输适配器。 - 一些其他自解释的配置字段。
贡献
任何反馈和开发方面的帮助都备受赞赏。请随意提出问题或发起功能请求、错误报告、安装问题或您可能有的任何其他疑问的issue或pull request。
路线图
路线图列出了许多功能、额外的Message
变体和目标部署环境,以及其他使Transmit程序状态管理更加强大的有趣功能。预计路线图的内容和优先级将会有所变化。根据当前情况,它尚未准备好公开发布。
依赖项
~71MB
~1.5M SLoC