# API网关部署
**本文档引用的文件**
- [ocelot.json](file://gateways/internal/LINGYUN.MicroService.Internal.ApiGateway/src/LINGYUN.MicroService.Internal.ApiGateway/ocelot.json)
- [yarp.json](file://gateways/web/LY.MicroService.ApiGateway/yarp.json)
- [InternalApiGatewayOptions.cs](file://gateways/internal/LINGYUN.MicroService.Internal.ApiGateway/src/LINGYUN.MicroService.Internal.ApiGateway/InternalApiGatewayOptions.cs)
- [AbpResponseMergeAggregator.cs](file://gateways/internal/LINGYUN.MicroService.Internal.ApiGateway/src/LINGYUN.MicroService.Internal.ApiGateway/Ocelot/Multiplexer/AbpResponseMergeAggregator.cs)
- [Program.cs](file://gateways/internal/LINGYUN.MicroService.Internal.ApiGateway/src/LINGYUN.MicroService.Internal.ApiGateway/Program.cs)
- [appsettings.json](file://gateways/internal/LINGYUN.MicroService.Internal.ApiGateway/src/LINGYUN.MicroService.Internal.ApiGateway/appsettings.json)
- [docker-compose.yml](file://docker-compose.yml)
- [deploy.ps1](file://deploy/deploy.ps1)
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构概述](#架构概述)
5. [详细组件分析](#详细组件分析)
6. [依赖分析](#依赖分析)
7. [性能考虑](#性能考虑)
8. [故障排除指南](#故障排除指南)
9. [结论](#结论)
## 简介
本文档详细说明了内部和外部API网关的部署配置,包括Ocelot和YARP的路由规则配置、请求聚合、认证集成、限流熔断策略。文档涵盖了网关集群的部署方案,确保高可用性。提供了与认证服务的深度集成配置,包括JWT验证、权限检查。说明了网关的监控配置、日志收集和性能调优策略,以及在Kubernetes环境下的部署最佳实践。
## 项目结构
项目包含两个主要的网关:内部API网关和外部API网关。内部API网关使用Ocelot实现,外部API网关使用YARP实现。两个网关都配置了详细的路由规则和认证集成。
```mermaid
graph TD
subgraph "网关"
InternalGateway[内部API网关]
ExternalGateway[外部API网关]
end
subgraph "服务"
AuthServer[认证服务器]
BackendAdmin[后台管理]
Localization[本地化]
Platform[平台服务]
Messages[消息服务]
Tasks[任务管理]
Webhooks[Webhooks]
Workflow[工作流]
end
InternalGateway --> AuthServer
InternalGateway --> BackendAdmin
InternalGateway --> Localization
InternalGateway --> Platform
InternalGateway --> Messages
InternalGateway --> Tasks
InternalGateway --> Webhooks
InternalGateway --> Workflow
ExternalGateway --> AuthServer
ExternalGateway --> BackendAdmin
ExternalGateway --> Platform
ExternalGateway --> Messages
ExternalGateway --> Tasks
ExternalGateway --> Webhooks
```
**图示来源**
- [yarp.json](file://gateways/web/LY.MicroService.ApiGateway/yarp.json)
- [ocelot.json](file://gateways/internal/LINGYUN.MicroService.Internal.ApiGateway/src/LINGYUN.MicroService.Internal.ApiGateway/ocelot.json)
**本节来源**
- [gateways](file://gateways)
## 核心组件
核心组件包括内部API网关和外部API网关,分别使用Ocelot和YARP实现。内部API网关负责聚合多个微服务的API定义,外部API网关负责路由到各个微服务。
**本节来源**
- [InternalApiGatewayOptions.cs](file://gateways/internal/LINGYUN.MicroService.Internal.ApiGateway/src/LINGYUN.MicroService.Internal.ApiGateway/InternalApiGatewayOptions.cs)
- [AbpResponseMergeAggregator.cs](file://gateways/internal/LINGYUN.MicroService.Internal.ApiGateway/src/LINGYUN.MicroService.Internal.ApiGateway/Ocelot/Multiplexer/AbpResponseMergeAggregator.cs)
## 架构概述
系统架构采用微服务架构,通过API网关统一对外提供服务。内部API网关使用Ocelot实现,负责聚合多个微服务的API定义;外部API网关使用YARP实现,负责路由到各个微服务。
```mermaid
graph TB
subgraph "前端"
UI[用户界面]
end
subgraph "网关"
ExternalGateway[外部API网关]
InternalGateway[内部API网关]
end
subgraph "微服务"
AuthServer[认证服务器]
BackendAdmin[后台管理]
Localization[本地化]
Platform[平台服务]
Messages[消息服务]
Tasks[任务管理]
Webhooks[Webhooks]
Workflow[工作流]
end
UI --> ExternalGateway
ExternalGateway --> InternalGateway
InternalGateway --> AuthServer
InternalGateway --> BackendAdmin
InternalGateway --> Localization
InternalGateway --> Platform
InternalGateway --> Messages
InternalGateway --> Tasks
InternalGateway --> Webhooks
InternalGateway --> Workflow
```
**图示来源**
- [docker-compose.yml](file://docker-compose.yml)
- [yarp.json](file://gateways/web/LY.MicroService.ApiGateway/yarp.json)
- [ocelot.json](file://gateways/internal/LINGYUN.MicroService.Internal.ApiGateway/src/LINGYUN.MicroService.Internal.ApiGateway/ocelot.json)
## 详细组件分析
### 内部API网关分析
内部API网关使用Ocelot实现,配置了详细的路由规则和聚合策略。
#### 路由配置
内部API网关的路由配置在`ocelot.json`文件中定义,包括应用配置、API定义和多租户等路由。
```mermaid
graph TD
A[请求] --> B{路由匹配}
B --> |应用配置| C[后台管理服务]
B --> |API定义| C
B --> |多租户| C
C --> D[响应]
```
**图示来源**
- [ocelot.json](file://gateways/internal/LINGYUN.MicroService.Internal.ApiGateway/src/LINGYUN.MicroService.Internal.ApiGateway/ocelot.json)
#### 请求聚合
内部API网关实现了请求聚合功能,通过自定义的`AbpResponseMergeAggregator`类实现。
```mermaid
classDiagram
class AbpResponseMergeAggregator {
+ILogger Logger
+InternalApiGatewayOptions Options
+Task Aggregate(List responses)
+Task MapAbpApiDefinitionAggregateContentAsync(List responses)
}
AbpResponseMergeAggregator --> InternalApiGatewayOptions : "使用"
```
**图示来源**
- [AbpResponseMergeAggregator.cs](file://gateways/internal/LINGYUN.MicroService.Internal.ApiGateway/src/LINGYUN.MicroService.Internal.ApiGateway/Ocelot/Multiplexer/AbpResponseMergeAggregator.cs)
- [InternalApiGatewayOptions.cs](file://gateways/internal/LINGYUN.MicroService.Internal.ApiGateway/src/LINGYUN.MicroService.Internal.ApiGateway/InternalApiGatewayOptions.cs)
**本节来源**
- [AbpResponseMergeAggregator.cs](file://gateways/internal/LINGYUN.MicroService.Internal.ApiGateway/src/LINGYUN.MicroService.Internal.ApiGateway/Ocelot/Multiplexer/AbpResponseMergeAggregator.cs)
- [InternalApiGatewayOptions.cs](file://gateways/internal/LINGYUN.MicroService.Internal.ApiGateway/src/LINGYUN.MicroService.Internal.ApiGateway/InternalApiGatewayOptions.cs)
### 外部API网关分析
外部API网关使用YARP实现,配置了详细的路由规则。
#### 路由配置
外部API网关的路由配置在`yarp.json`文件中定义,包括账户、身份、认证服务器等路由。
```mermaid
graph TD
A[请求] --> B{路由匹配}
B --> |账户| C[认证服务器API]
B --> |身份| C
B --> |认证服务器| C
B --> |特性管理| D[特性管理服务]
B --> |权限管理| E[权限管理服务]
C --> F[响应]
D --> F
E --> F
```
**图示来源**
- [yarp.json](file://gateways/web/LY.MicroService.ApiGateway/yarp.json)
**本节来源**
- [yarp.json](file://gateways/web/LY.MicroService.ApiGateway/yarp.json)
## 依赖分析
系统依赖于多个微服务和中间件,通过Docker Compose进行部署管理。
```mermaid
graph TD
A[Docker Compose] --> B[认证服务器]
A --> C[后台管理]
A --> D[本地化]
A --> E[平台服务]
A --> F[消息服务]
A --> G[任务管理]
A --> H[Webhooks]
A --> I[工作流]
A --> J[内部API网关]
A --> K[外部API网关]
```
**图示来源**
- [docker-compose.yml](file://docker-compose.yml)
**本节来源**
- [docker-compose.yml](file://docker-compose.yml)
## 性能考虑
网关配置了详细的日志记录和监控策略,确保系统的稳定性和可维护性。
```mermaid
flowchart TD
Start([开始]) --> ConfigureLogging["配置日志记录"]
ConfigureLogging --> LoggingSinks["配置日志输出"]
LoggingSinks --> ConsoleSink["控制台输出"]
LoggingSinks --> FileSink["文件输出"]
LoggingSinks --> ElasticsearchSink["Elasticsearch输出"]
FileSink --> RollingFiles["按天滚动日志文件"]
ElasticsearchSink --> IndexByDate["按日期创建索引"]
ConsoleSink --> End([完成])
RollingFiles --> End
IndexByDate --> End
```
**图示来源**
- [appsettings.json](file://gateways/internal/LINGYUN.MicroService.Internal.ApiGateway/src/LINGYUN.MicroService.Internal.ApiGateway/appsettings.json)
## 故障排除指南
### 启动问题
如果网关无法启动,请检查以下几点:
1. 确认所有依赖服务已启动
2. 检查配置文件是否正确
3. 查看日志文件获取详细错误信息
### 路由问题
如果路由不工作,请检查:
1. 路由配置是否正确
2. 目标服务是否可达
3. 网络配置是否正确
**本节来源**
- [Program.cs](file://gateways/internal/LINGYUN.MicroService.Internal.ApiGateway/src/LINGYUN.MicroService.Internal.ApiGateway/Program.cs)
- [deploy.ps1](file://deploy/deploy.ps1)
## 结论
本文档详细介绍了API网关的部署配置,包括内部和外部网关的实现、路由规则、认证集成、监控配置等。通过合理的配置和部署,可以确保系统的高可用性和稳定性。