跳到主要内容

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

💻 技术栈选型

后端技术栈

技术版本作用选型理由
.NET10.0后端框架高性能、跨平台、生态丰富
FreeSql3.5+ORM 框架支持多数据库、CodeFirst 自动建表
CAP8.0+事件总线最终一致性、事务消息
FreeRedis最新缓存高性能 Redis 客户端
MeiliSearchv1.13搜索引擎快速、精准、易用
SignalR内置实时通信实时推送、连接管理
FreeScheduler1.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用户行为触发更新

搜索性能优化

  • 索引预加载: 启动时预热常用索引
  • 分词优化: 中英文混合分词策略
  • 结果缓存: 热门搜索结果缓存
  • 异步更新: 数据变更异步更新索引

事件处理流程

  1. 领域事件: 聚合根内部状态变化
  2. 应用事件: 跨聚合根的业务逻辑
  3. 集成事件: 跨服务的数据同步
  4. 基础设施事件: 系统级别的处理

🛡️ 安全架构设计

认证授权

  • JWT Token: 无状态认证
  • Refresh Token: 长期有效性
  • 权限控制: 基于角色的访问控制(RBAC)
  • API 限流: 防止恶意请求

数据安全

  • 数据加密: 敏感数据加密存储
  • SQL 注入防护: ORM 参数化查询
  • XSS 防护: 内容过滤和转义
  • CSRF 防护: Token 验证

📈 性能优化设计

数据库优化

📊 监控和可观测性

应用监控

  • APM: Application Insights
  • 日志聚合: ELK Stack
  • 链路追踪: Jaeger
  • 指标监控: Prometheus + Grafana

健康检查

🚀 扩展性设计

水平扩展

  • 无状态服务: 支持多实例部署
  • 负载均衡: Nginx/HAProxy
  • 数据分片: 按用户 ID 或时间分片
  • CDN 加速: 静态资源全球分发

垂直扩展

  • 服务拆分: 微服务架构
  • 数据库分离: 按业务域拆分数据库
  • 缓存分层: 多级缓存架构
  • 异步处理: 消息队列解耦