我们的技术
SWeather 全天候自动地把航天器和观测站的数据变成空间天气预报。它由一个小团队在现代 .NET 平台上打造。
架构
系统被拆分为相互独立的部分,因此每个部分都可以修改而不影响其他部分。
- 模块化单体:一个服务由多个独立模块组成。
- 每个模块都有自己的契约层、领域层、数据层和 API 层。
- 模块之间通过编译时生成的进程内中介者以及消息总线上的集成事件进行通信。
- 一旦某个模块依赖另一个模块,架构测试就会使构建失败。
现代平台
我们使用工具的最新版本,并对代码保持严格要求。
- 全面采用 .NET 11、runtime async 和可空引用类型。
- ASP.NET Core 搭配 Minimal API、OpenAPI 和版本化端点,以及 Blazor Server。
- 使用 Microsoft Aspire 搭建本地环境。
- 通过 Entity Framework Core 和 Dapper 访问数据。
- 严格构建:任何警告都视为错误,构建时检查代码风格。
- 多语言:俄语、英语、中文、芬兰语和挪威语。
人工智能
AI 帮助解释空间天气,AI 智能体也可以使用我们的数据。
- Microsoft.Extensions.AI 和兼容 OpenAI 的客户端。
- Microsoft Agent Framework。
- DeepL。
- Tesseract OCR。
- 为 AI 智能体提供工具的 MCP 服务器。
存储与消息
每类数据都存放在最适合它的存储中。
- PostgreSQL 与 PostGIS。
- ClickHouse。
- Garnet 与两级混合缓存。
- RustFS,兼容 S3 的对象存储。
- RabbitMQ 与 Rebus。
性能
繁重的计算运行得很快,且不浪费内存。
- Geopack 采用 SIMD 向量化和 FMA 指令。
- Geopack 的计算和数据解析器不分配内存。
- NativeAOT:Geopack 是原生库,Python 无需 .NET 即可使用。
可视化
图表和地图在服务器端自动绘制。
- 基于 ScottPlot 的自有库,图表采用 WebP 格式。
测试
每次改动在到达用户之前都会自动检查。
- 每个代码仓库都有单元测试。
- 在容器中运行 PostgreSQL、RabbitMQ 和 S3 存储的集成测试。
- 架构测试和依赖注入容器测试。
- 图表渲染测试。
- 基于 BenchmarkDotNet 的基准测试,防止性能退化。
容器与运维
系统以容器形式交付,并能报告自身的健康状况。
- 分阶段构建的 Docker 镜像;构建由 Fallout 自动化。
- OpenTelemetry、Prometheus、Loki、Tempo 和 Grafana;健康检查和业务指标。
- 诊断 sidecar 容器在不停止服务的情况下采集内存转储和跟踪。
- 持续集成对每次变更进行风格检查、构建、测试和发布。
开源
我们支持开源:我们的科学库和基础设施库公开发布在 GitHub、NuGet.org 和 PyPI 上。