Rust 微服务框架

一只猫 Ecat

对标 Kratos v3 的 Rust 微服务框架。API-first,HTTP 与 gRPC 共享中间件,56 个 crate 按需组合。

56个 crate
19个数据后端
11个内置中间件
4种协议

生产环境的 Rust 微服务底座

Ecat 把服务生命周期、传输、中间件、配置、注册发现和数据访问收进一套一致的抽象。核心保持精简,能力按 feature 组合。

  • 与 Kratos 的 API-first 理念对齐,不做 Go in Rust。
  • 直接复用 tower::Service 与 tower::Layer,没有自定义中间件协议。
  • 56 个 crate 锁步发布,按需引入,不拖入无用依赖。

请求如何穿过 Ecat

HTTP 与 gRPC 从不同端口进入,经过同一套 tower::Layer,再由 Handler 处理。

应用
AppBuilderAppon_starton_stop
传输
HTTP / axumgRPC / tonicWebSocketGraphQL
中间件
RecoveryTracingLoggingTimeoutRateLimitSecurityCircuitBreakerMetricsRetryValidateCORS
数据
SQLxRedisMongoDBS319 个后端
基础
ProtobufErrorsMetadataConfigRegistryTracing

服务需要的能力,保持可组合

核心保持精简。每项能力都是一个 crate 或 feature,依赖树跟着服务走。

API-first,类型先行

用 Protobuf 定义 API、错误码和元数据,prost 与 tonic-build 在编译期生成强类型代码。

$ ecat proto client proto/service.proto

HTTP 与 gRPC 共用一套中间件

axum 与 tonic 都构建在 tower 之上,超时、限流、熔断、认证只需要写一次。

HTTP+gRPC→tower::Layer

11 个内置中间件

Recovery、Tracing、Logging、Timeout、RateLimit、Security、CircuitBreaker、Metrics、Retry、Validate、CORS。

RecoveryTracingTimeoutRateLimitSecurityCircuitBreaker

19 个数据后端

关系型、缓存、搜索、图、时序、文档、对象存储和 OLAP 共用统一 trait。

RDBMS
SQLitePostgreSQLMySQLTiDBSQL Server
Cache / Search
RedisMemcachedOpenSearchElasticsearch
Graph / Time-series
Neo4jNebulaGraphArangoDBInfluxDBIoTDBQuestDBTDengine
Document / Object / OLAP
MongoDBS3 / MinIOClickHouse

开箱即用的可观测性

tracing、Prometheus 指标和 /health、/ready 端点,trace_id 贯穿 HTTP 与 gRPC。

GET /metrics

默认收紧的安全边界

SecurityLayer 检测 SQL 注入、XSS、SSRF;JWT、API Key 与 mTLS 按需启用。

SQLiXSSSSRFJWTmTLS

编译期约束的 ORM

#[derive(Entity)]、类型状态查询构建器和五套方言。没有过滤条件无法删改。

#[derive(Entity)]

一条命令完成脚手架

new、proto、run --watch、build、upgrade,加上 pet 子命令。

$ ecat new helloworld

通信、消息与多协议

HttpClient 与 GrpcClient 接入服务发现和负载均衡;Kafka、RabbitMQ、MQTT、NATS 与 EventBus 传递消息;WebSocket、GraphQL、OpenAPI 和版本路由共用入口。

HttpClientGrpcClientKafkaRabbitMQMQTTNATSEventBusWebSocketGraphQLOpenAPI

基准、测试与交付

ecat-bench 对比裸 axum、MetricsLayer 与完整中间件栈;Docker、Kubernetes、Helm 与 CI 模板随 ecat-deploy 提供。

ecat-benchp50 / p95 / p99DockerKubernetesHelmGitHub ActionsGitLab CI

从骨架到 56 个 crate

从 2.x 的数据后端到 7.1 的宠物 CLI,八个节点。Phase 1–16 全部完成,每个版本都已发布并有测试覆盖。

v2.1.7

数据层打开局面

11 个数据库后端,TLS、WebSocket、API 版本路由与部署模板落地。

v3.0.0

消息与配置统一

消息流改为 Bytes,from_config 签名统一,全仓测试补齐。

v4.0.0

拆出 SqlExecutor

RdbmsClient 保留 transaction(),事务内可以直接执行 SQL。

v4.1.0

ORM 到来

ecat-orm 与派生宏发布,类型状态查询构建器阻止无过滤删改。

v5.0.0

熔断器公开

Breaker 与状态机对外暴露,RdbmsError 增加 NoAvailableReplica。

v6.0.0+v7.0.0

出站韧性覆盖全部后端

所有数据后端使用同一套许可、熔断、超时外壳,出站指标从配置自动注册。

v7.1.0

宠物进入工具链

13 个矢量形态,ecat pet 子命令,资源随 ecat-cli 打包。

v7.1.1

安全补丁

升级 rustls 与 quinn-proto,清理最新 RustSec 通告,无 API 变更。

常见问题

关于定位、数据库、安装与生产可用性的快速回答。

Ecat 是什么?

Ecat(一只猫)是对标 go-kratos/kratos v3 的 Rust 微服务框架,提供 API-first 开发体验、HTTP 与 gRPC 共用 tower 中间件,以及 56 个可按 feature 组合的 crate。

Ecat 和 Kratos 有什么关系?

Ecat 对齐 Kratos 的 API-first、可插拔与统一抽象理念,但使用 Rust 生态:tower::Service/Layer、axum、tonic 与 prost,不做 Go in Rust。

Ecat 支持哪些数据库?

19 个数据后端,覆盖 RDBMS(SQLite、PostgreSQL、MySQL、TiDB、SQL Server)、缓存、搜索、图、时序、文档、对象存储与 OLAP;除 Memcached 外均带超时与熔断。

如何安装 Ecat?

需要 Rust 1.85+ 与 protoc。运行 cargo install ecat-cli,然后用 ecat new 创建项目、ecat proto 生成代码、ecat run 启动服务。

Ecat 可以用于生产吗?

内置 Recovery、Tracing、Logging、Timeout、RateLimit、Security、CircuitBreaker、Metrics、Retry、Validate、CORS,提供健康检查、Prometheus 指标与 Docker/Kubernetes/Helm 模板;已知限制见文档参考页。

安装 Ecat

CLI 已发布到 crates.io。源码、发布说明和部署模板在 GitHub。

安装 CLI

只需要 Rust 1.85+ 和 protoc。命令会安装 ecat 二进制和宠物资源。

v7.1.1当前版本Rust 1.85+Apache-2.0
cargo install ecat-cli

API 文档

56 个 crate 的文档在 docs.rs,从 ecat 聚合入口开始。

docs.rs

部署模板

Dockerfile、Kubernetes manifest 和 Helm chart 在 ecat-deploy。

部署说明

代码遵循 Apache-2.0,视觉资产另附授权。

支持项目

如果 Ecat 节省了你的时间,可以支持维护。加密货币地址在仓库 README。

加密货币打赏地址

银行汇款信息