架构概述
本文介绍如何使用FastAPI构建微服务架构,在AWS EKS上部署两个微服务:
- 服务A:接收用户提示
- 服务B:处理对话逻辑,与Redis缓存和MongoDB数据库交互
该架构利用AWS ElastiCache(Redis)实现快速响应,并通过MongoDB RDS持久化存储会话数据。
该架构提供了:
- 通过Kubernetes实现的可扩展性
- 通过Redis缓存实现的快速响应
- 通过MongoDB实现的持久化存储
- 通过微服务实现的模块化设计
这种架构非常适合需要处理大量会话数据并保证快速响应的对话式AI应用场景。
组件说明
AWS EKS (Elastic Kubernetes Service)
作为容器编排平台,托管所有微服务。
微服务A (Prompt Receiver)
- 基于FastAPI构建
- 通过REST API接收用户提示
- 将请求转发给微服务B
微服务B (Conversational Logic)
- 基于FastAPI构建
- 访问ElastiCache(Redis)缓存最近对话
- 使用MongoDB RDS持久化存储会话数据
AWS ElastiCache (Redis)
- 提供内存数据库服务
- 加速实时交互响应
- 缓存最近对话内容
MongoDB on RDS
- 关系型数据库服务
- 持久化存储完整聊天记录
- 支持元数据存储和长期检索
Kubernetes部署配置
Docker镜像构建
两个服务共享相同的Docker基础镜像:
FROM python:3.10-slim
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
依赖文件requirements.txt:
fastapi uvicorn httpx redis pymongo
微服务A部署配置(service-a-deployment.yaml)
apiVersion: apps/v1
kind: Deployment
metadata:
name: service-a-deployment
spec:
replicas: 2
selector:
matchLabels:
app: service-a
template:
metadata:
labels:
app: service-a
spec:
containers:
- name: service-a
image: your-docker-image
ports:
- containerPort: 8000
env:
- name: SERVICE_B_URL
value: "http://service-b-service:8000/process"
- name: REDIS_HOST
value: "redis-service"
- name: REDIS_PORT
value: "6379"
- name: MONGODB_URI
value: "mongodb://mongodb-service:27017"
---
apiVersion: v1
kind: Service
metadata:
name: service-a-service
spec: