什么是 silky?
silky 是一个基于 .NET 平台构建的开源微服务开发框架,专注于 RPC 通信与微服务治理两大核心能力。它遵循 .NET 生态的主流编程模型,以最小侵入的方式将普通的 .NET 主机应用转变为具有服务注册、服务发现、远程调用、分布式事务等能力的微服务应用。
silky 的核心理念是:
接口即服务 — 一个标注了
[ServiceRoute]的普通 C# 接口,就是一个完整的微服务端点,框架自动生成 HTTP WebAPI 和 RPC 端点,无需手写路由、无需额外配置。

核心架构
┌──────────────────────────────────────────────────────────┐
│ HTTP / WebSocket 客户端 │
└─────────────────────────┬────────────────────────────────┘
│ HTTPS
┌─────────────▼─────────────┐
│ Silky API 网关 │
│ Swagger · JWT · 限流 │
│ CORS · 审计 · Profiler │
└─────────────┬─────────────┘
│ DotNetty TCP RPC
┌──────────────────┼──────────────────┐
│ │ │
┌─────▼─────┐ ┌─────▼─────┐ ┌─────▼─────┐
│ 服务 A │ ←──► │ 服务 B │ ←──►│ 服务 C │
│ (Host) │ RPC │ (Host) │ RPC│ (Host) │
└─────┬─────┘ └─────┬─────┘ └─────┬─────┘
└──────────────────┼──────────────────┘
│
┌────────────────┼────────────────┐
┌─────▼──────┐ ┌──────▼─────┐ ┌──────▼──────┐
│ Consul / │ │ Redis / │ │ MySQL / PG │
│ Nacos / │ │ 分布式缓存 │ │ SQL Server │
│ Zookeeper │ │ │ │ (EF Core) │
└────────────┘ └────────────┘ └─────────────┘
silky 的整体架构由以下几个层次组成:
1. 服务引擎与模块化系统
silky 基于模块化设计,每个功能单元都封装为独立的 SilkyModule,通过 [DependsOn] 特性声明依赖关系,框架在启动时按依赖顺序完成服务注册和初始化。
- 开发者无需手动管理复杂的服务注册顺序
- 可以通过自定义模块扩展框架能力,也可以通过插件方式动态加载模块
- 支持在模块的
Initialize/Shutdown生命周期钩子中执行自定义逻辑(如数据库迁移)
2. RPC 通信层
silky 使用 DotNetty 作为底层传输框架,基于 TCP 长连接实现高性能 RPC 通信:
- 接口代理:通过 Autofac 动态代理,依赖注入接口即可透明调用远程服务
- 多种编解码:支持 JSON(默认)、MessagePack、ProtoBuf 等序列化格式
- 心跳检测:长连接支持心跳包,自动检测并移除不健康的服务实例
- RPC 安全:通过
rpc.token保护内部 RPC 通道,外部无法绕过网关直接访问
3. 微服务治理层
| 治理能力 | 说明 |
|---|---|
| 服务注册与发现 | 支持 Zookeeper / Nacos / Consul,实例上下线实时感知(发布-订阅或心跳轮询) |
| 负载均衡 | 轮询(Polling)、随机(Random)、哈希一致性(HashAlgorithm),可按接口方法级别覆盖 |
| 超时控制 | 全局或方法级别配置 RPC 超时时间,开发环境可设置为 0(不超时) |
| 故障转移 | IO 异常、通信异常时自动选择其他实例重试,可配置重试次数和间隔 |
| 熔断保护 | 连续非业务异常 n 次后触发断路器,在配置时间内拒绝调用,基于 Polly |
| RPC 限流 | 实例级别最大并发数控制,超出后自动路由到其他实例 |
| HTTP 限流 | 集成 AspNetCoreRateLimit,支持按 IP 或客户端 ID 限流 |
| 服务降级 | 通过 [Fallback] 特性指定回退接口,RPC 失败时自动执行降级逻辑 |
| 缓存拦截 | RPC 调用时从 Redis 读取缓存,命中则直接返回,不发起真正的网络请求 |
4. 主机类型
silky 提供四种主机类型,满足不同部署场景:
| 主机类型 | 构建方法 | 对外 HTTP | RPC 服务 | WebSocket |
|---|---|---|---|---|
| 通用主机 | ConfigureSilkyGeneralHostDefaults | ❌ | ✅ | ❌ |
| Web 主机 | ConfigureSilkyWebHostDefaults | ✅ | ✅ | ❌ |
| WebSocket 主机 | ConfigureSilkyWebSocketDefaults | ❌ | ✅ | ✅ |
| 网关主机 | ConfigureSilkyGatewayDefaults | ✅ | ❌ | ❌ |
5. 安全体系
- 网关统一认证:JWT Token 在网关层统一校验,各业务微服务无需重复实现认证逻辑
- RPC Token 保护:集群内所有服务共享同一
rpc.token,外部无法直接访问 RPC 端口 - 接口级权限控制:
[Authorize]/[AllowAnonymous]/[Governance(ProhibitExtranet = true)]精细控制访问权限 - SSL 支持:RPC 通信支持 SSL/TLS 加密
6. 可观测性
- 链路追踪:集成 SkyAPM,追踪 HTTP 请求、RPC 调用、TCC 分布式事务、EFCore 数据访问的完整链路
- 日志:内置 Serilog 支持,结构化日志,可输出到控制台、文件、Elasticsearch 等
- Dashboard:内置集群管理控制台,可视化查看所有服务实例的状态、服务条目配置、实时性能指标
生态集成
silky 完全兼容 ASP.NET Core 生态,可与以下组件无缝集成:
| 类别 | 支持的组件 |
|---|---|
| ORM / 数据访问 | Entity Framework Core、FreeSql、Dapper |
| 消息总线 | MassTransit、CAP(支持 RabbitMQ、Kafka 等) |
| 对象映射 | AutoMapper(Silky.ObjectMapper.AutoMapper)、Mapster(Silky.ObjectMapper.Mapster) |
| 参数验证 | DataAnnotations(内置)、FluentValidation(Silky.Validation.Fluent) |
| 缓存 | 内存缓存(默认)、Redis(Silky.Caching.StackExchangeRedis) |
| 注册中心 | Zookeeper(Silky.RegistryCenter.Zookeeper)、Nacos(Silky.RegistryCenter.Nacos)、Consul(Silky.RegistryCenter.Consul) |
| 链路追踪 | SkyAPM(Silky.SkyApm.Agent) |
| 日志 | Serilog(Silky.Logging.Serilog) |
| 分布式锁 | DistributedLock.Redis(Silky.DistributedLock.Redis) |
支持的 .NET 版本
| Silky 版本 | 支持的 .NET 版本 |
|---|---|
| 3.x(当前稳定版) | .NET 6 / .NET 7 / .NET 8 / .NET 9 / .NET 10 |
与其他框架的对比
| 特性 | silky | Dapr | MassTransit | gRPC |
|---|---|---|---|---|
| 开发语言 | C# / .NET | 多语言 | C# / .NET | 多语言 |
| RPC 方式 | 接口代理(透明) | HTTP / gRPC Sidecar | 消息总线 | 代码生成(Protobuf) |
| 服务治理 | 内置 | 内置(Sidecar 模式) | 部分 | 需自行实现 |
| 分布式事务 | TCC(内置) | Saga(Sidecar) | Saga(Outbox) | 不支持 |
| 学习成本 | 低(.NET 原生模型) | 中(需了解 Sidecar 架构) | 中 | 中 |
| 部署复杂度 | 低 | 高(需部署 Dapr Runtime) | 低 | 低 |
silky 的优势在于:对 .NET 开发者极其友好,无需学习新的编程范式,利用现有的接口、DI、中间件知识即可构建完整的微服务应用,且无需引入额外的 Sidecar 进程。
开源地址
贡献
参与 Issue 讨论,报告 Bug 或提出功能建议
提交 Pull Request 贡献代码
加入 QQ 群(934306776)参与框架学习和讨论

