1. 综述
ctms-ms微服务架构中,网关ctms-gateway主要负责鉴权和请求转发。将鉴权(Authentication)放到网关(如ctms-gateway)中有如下考虑:
1.1 好处:
- 集中管理:所有请求都通过网关,可以在一个地方统一处理鉴权逻辑,避免在每个微服务中重复实现。
- 安全性增强:网关可以统一处理安全相关的事务,如验证令牌、防止重放攻击等,减少安全漏洞。
- 性能优化:网关可以在鉴权失败时直接拒绝请求,避免无效请求进入后端服务,减轻后端服务的压力。
- 简化微服务:微服务可以专注于业务逻辑,不需要关心鉴权等横切关注点,代码更加简洁。
- 统一日志和监控:网关可以统一记录鉴权相关的日志和监控数据,便于问题排查和审计。
1.2弊端:
- 单点故障:如果网关出现故障,整个系统的鉴权功能将失效,可能导致系统不可用。
- 性能瓶颈:所有请求都需要经过网关进行鉴权,如果网关的性能不足,可能成为系统的瓶颈。
- 复杂性增加:网关需要处理所有微服务的鉴权逻辑,可能增加网关的复杂性和维护成本。
- 灵活性降低:某些微服务可能需要特殊的鉴权逻辑,统一在网关中处理可能不够灵活。
- 版本管理困难:当鉴权逻辑需要更新时,可能需要同时更新网关和所有相关微服务,增加版本管理的复杂性。
总的来说,将鉴权放到网关中是一种常见的做法,但需要根据具体业务场景和系统需求来权衡利弊。对于ctms-gateway来说,系统规模不大,且鉴权逻辑相对简单,放在网关中是一个不错的选择。
2. 项目构成
2.1 目录结构
ctms-gateway/
├── .gitignore
├── application/
│ ├── __init__.py
│ ├── config/
│ │ ├── development.py
│ │ ├── production.py
│ ├── settings.py
│ └── urls.py
├── apps/
│ ├── __init__.py
│ ├── auth.py
│ ├── auth_view.py
│ ├── views.py
│ └── ws_view.py
├── core/
│ ├── __init__.py
│ ├── docs.py
│ ├── event.py
│ ├── exception.py
│ ├── logger.py
│ └── middleware.py
├── logs/
│ └── .gitkeep
├── main.py
├── requirements.txt
└── utils/
├── __init__.py
└── tools.py
2.2 目录结构说明
2.2.1 application/
- 应用配置相关
- config/:包含开发和生产环境的配置文件
- settings.py:主配置文件,负责整合和提供统一的配置接口
- urls.py:路由配置
2.2.2 apps/
- 应用模块
- auth.py:认证相关逻辑
- views.py:HTTP接口处理
- ws_view.py:WebSocket接口处理
2.2.3 core/
- 核心功能模块
- event.py:生命周期事件处理
- middleware.py:中间件实现
- exception.py:异常处理
2.2.4 utils/
工具类 tools.py:通用工具函数
2.2.5 logs/
- 日志目录
2.2.6 main.py
- 项目入口文件,负责启动FastAPI应用
2.2.7 requirements.txt
- 项目依赖包列表
这种结构设计有助于模块化开发,便于维护和扩展。settings.py 直接位于 application 目录下,作为主配置文件,负责整合 config/ 目录中的环境配置,并提供统一的配置接口。
3. 联系方式
- 公众号:ScienceStudio
- Github: github.com/KandyYe
- 知乎:www.zhihu.com/people/kand…