CmsKit 系统架构设计
本文档描述 CmsKit 仿掘金平台的技术架构设计,包括系统架构、技术选型、数据库设计和部署方案。
🏗️ 整体架构设计
系统架构图
graph TB
subgraph "前端层"
WebApp[Web应用]
MobileApp[移动端]
AdminPanel[管理后台]
end
subgraph "API网关层"
Gateway[API Gateway]
AuthService[认证服务]
end
subgraph "应用服务层"
CmsService[内容管理服务]
UserService[用户服务]
SearchService[搜索服务]
NotificationService[通知服务]
RecommendService[推荐服务]
end
subgraph "基础设施层"
Database[(SQL Server)]
Redis[(Redis)]
MeiliSearch[(MeiliSearch)]
FileStorage[文件存储]
end
WebApp --> Gateway
Gateway --> CmsService
CmsService --> Database
CmsService --> Redis
SearchService --> MeiliSearch
💻 技术栈选型
后端技术栈
| 技术 | 版本 | 作用 | 选型理由 |
|---|---|---|---|
| .NET | 10.0 | 后端框架 | 高性能、跨平台、生态丰富 |
| FreeSql | 3.5+ | ORM 框架 | 支持多数据库、CodeFirst 自动建表 |
| CAP | 8.0+ | 事件总线 | 最终一致性、事务消息 |
| FreeRedis | 最新 | 缓存 | 高性能 Redis 客户端 |
| MeiliSearch | v1.13 | 搜索引擎 | 快速、精准、易用 |
| SignalR | 内置 | 实时通信 | 实时推送、连接管理 |
| FreeScheduler | 1.2+ | 任务调度 | 基于 FreeRedis,分布式定时任务 |
数据存储技术
| 技术 | 作用 | 特点 |
|---|---|---|
| MySQL | 主数据库 | 事务支持、数据一致性 |
| Redis | 缓存层 | 高性能读写、分布式锁 |
| MeiliSearch | 搜索引擎 | 全文搜索、索引优化 |
| 文件存储 | 静态资源 | CDN 加速、云存储 |
🔄 分层架构设计
Domain 层(领域层)
Domain/
├── Articles/ # 文章聚合根
│ ├── Article.cs # 文章实体
│ ├── ArticleManager.cs # 文章领域服务
│ └── Events/ # 领域事件
├── ShortMsgs/ # 沸点聚合根
├── Users/ # 用户聚合根
└── Shared/ # 共享组件
├── Enums/ # 枚举定义
└── ValueObjects/ # 值对象
Application 层(应用层)
Application/
├── Articles/ # 文章应用服务
│ ├── ArticleService.cs
│ ├── Dtos/ # 数据传输对象
│ └── Commands/ # 命令处理器
├── Search/ # 搜索应用服务
├── Notifications/ # 通知应用服务
└── Recommendations/ # 推荐应用服务
Infrastructure 层(基础设施层)
Infrastructure/
├── Data/ # 数据访问
│ ├── Repositories/ # 仓储实现
│ └── Configurations/ # 实体配置
├── Search/ # 搜索引擎集成
├── Cache/ # 缓存实现
├── Events/ # 事件处理器
└── External/ # 外部服务集成
🚀 微服务架构
服务拆分策略
CmsKit.Services/
├── CmsKit.Content/ # 内容管理服务
│ ├── Articles # 文章管理
│ ├── ShortMsgs # 沸点管理
│ └── Comments # 评论管理
├── CmsKit.User/ # 用户服务
│ ├── Authentication # 认证授权
│ ├── Profile # 用户资料
│ └── Interactions # 用户互动
├── CmsKit.Search/ # 搜索服务
├── CmsKit.Notification/ # 通知服务
└── CmsKit.Analytics/ # 数据分析服务
服务通信
- 同步通信: HTTP/gRPC
- 异步通信: CAP 事件总线
- 实时通信: SignalR
📊 缓存架构设计
多级缓存策略
public class CacheArchitecture
{
// L1缓存: 内存缓存(应用程序内)
private readonly IMemoryCache _memoryCache;
// L2缓存: Redis缓存(分布式)
private readonly IDistributedCache _distributedCache;
public async Task<T> GetAsync<T>(string key)
{
// 1. 先检查L1缓存
if (_memoryCache.TryGetValue(key, out T value))
return value;
// 2. 检查L2缓存
var distributedValue = await _distributedCache.GetAsync<T>(key);
if (distributedValue != null)
{
// 回填L1缓存
_memoryCache.Set(key, distributedValue, TimeSpan.FromMinutes(5));
return distributedValue;
}
return default(T);
}
}
缓存策略配置
| 数据类型 | 缓存时间 | 缓存级别 | 更新策略 |
|---|---|---|---|
| 热门文章 | 15 分钟 | L1+L2 | 定时更新 |
| 用户信息 | 1 小时 | L2 | 变更失效 |
| 搜索结果 | 30 分钟 | L2 | 内容更新失效 |
| 推荐内容 | 1 小时 | L2 | 用户行为触发更新 |
搜索性能优化
- 索引预加载: 启动时预热常用索引
- 分词优化: 中英文混合分词策略
- 结果缓存: 热门搜索结果缓存
- 异步更新: 数据变更异步更新索引
事件处理流程
- 领域事件: 聚合根内部状态变化
- 应用事件: 跨聚合根的业务逻辑
- 集成事件: 跨服务的数据同步
- 基础设施事件: 系统级别的处理
🛡️ 安全架构设计
认证授权
- JWT Token: 无状态认证
- Refresh Token: 长期有效性
- 权限控制: 基于角色的访问控制(RBAC)
- API 限流: 防止恶意请求
数据安全
- 数据加密: 敏感数据加密存储
- SQL 注入防护: ORM 参数化查询
- XSS 防护: 内容过滤和转义
- CSRF 防护: Token 验证
📈 性能优化设计
数据库优化
📊 监控和可观测性
应用监控
- APM: Application Insights
- 日志聚合: ELK Stack
- 链路追踪: Jaeger
- 指标监控: Prometheus + Grafana
健康检查
🚀 扩展性设计
水平扩展
- 无状态服务: 支持多实例部署
- 负载均衡: Nginx/HAProxy
- 数据分片: 按用户 ID 或时间分片
- CDN 加速: 静态资源全球分发
垂直扩展
- 服务拆分: 微服务架构
- 数据库分离: 按业务域拆分数据库
- 缓存分层: 多级缓存架构
- 异步处理: 消息队列解耦