[CTMS]微服务架构网关服务ctms-gateway实现说明

84 阅读2分钟

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

公众号二维码 1.png