从零搭建一个rust ai微服务 - 0 整体设计

本人的下一份工作是一个基于rust的agent saas平台,而目前毫无相关经验,只是会一些基础的rust使用,所以想要实现一个简单的rust分布式ai项目练手。

目标

本人曾经酷爱阅读网络小说,但是有些小说读着读着会忘记任务和物品的剧情。

目前的ai平台如果将小说交给ai解析,ai会阅读全文进行总结,可能会导致剧透等问题。

如果可以实现一个根据阅读进度进行总结的ai项目,对当前章节的物品和人物进行标注,就可以同时实现回忆剧情和避免剧透的问题。

还可以模拟其他用户对当前章节有意思的地方进行ai评论,突破正版app的评论垄断。

整体设计

对于一个最简化微服务系统来说,架构中需要包含服务发现,消息队列,缓存,数据库,对于理解小说的ai系统来说,还需要向量数据库和外部llm api,和存储小说的对象存储服务。

使用较为成熟的微服务组件,向量库和对象存储使用rust开发的。

  1. 服务发现:Nacos
  2. 消息队列:RabbitMQ
  3. 缓存:Redis
  4. 数据库:Postgre
  5. 向量数据库:qdrant
  6. 对象存储:garage

这些组件在云上是可以直接获取集群和的服务,本地测试开发就先使用单体部署的方式进行。

通过docker compose一键部署所有中间件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
version: '3.8'

services:
# Nacos - 服务发现与配置中心
nacos:
image: nacos/nacos-server:v2.3.0
container_name: nacos
environment:
- MODE=standalone
- PREFER_HOST_MODE=hostname
- JVM_XMS=512m
- JVM_XMX=512m
- JVM_XMN=256m
ports:
- "8848:8848"
- "9848:9848"
- "9849:9849"
volumes:
- nacos_logs:/home/nacos/logs
- nacos_data:/home/nacos/data
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8848/nacos/v1/console/health/readiness"]
interval: 30s
timeout: 10s
retries: 5
start_period: 60s
networks:
- microservice-network

# RabbitMQ - 消息队列
rabbitmq:
image: rabbitmq:3.12-management-alpine
container_name: rabbitmq
environment:
- RABBITMQ_DEFAULT_USER=admin
- RABBITMQ_DEFAULT_PASS=admin123
ports:
- "5672:5672" # AMQP 协议端口
- "15672:15672" # 管理界面端口
volumes:
- rabbitmq_data:/var/lib/rabbitmq
healthcheck:
test: ["CMD", "rabbitmq-diagnostics", "check_running"]
interval: 30s
timeout: 10s
retries: 5
start_period: 40s
networks:
- microservice-network

# Redis - 缓存
redis:
image: redis:7.2-alpine
container_name: redis
command: redis-server --requirepass redis123 --appendonly yes
ports:
- "6379:6379"
volumes:
- redis_data:/data
healthcheck:
test: ["CMD", "redis-cli", "-a", "redis123", "ping"]
interval: 30s
timeout: 10s
retries: 5
start_period: 20s
networks:
- microservice-network

# PostgreSQL - 数据库
postgres:
image: postgres:16-alpine
container_name: postgres
environment:
- POSTGRES_USER=admin
- POSTGRES_PASSWORD=admin123
- POSTGRES_DB=microservice
- PGDATA=/var/lib/postgresql/data/pgdata
ports:
- "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U admin -d microservice"]
interval: 30s
timeout: 10s
retries: 5
start_period: 40s
networks:
- microservice-network

# Qdrant - 向量数据库
qdrant:
image: qdrant/qdrant:v1.7.4
container_name: qdrant
ports:
- "6333:6333" # REST API
- "6334:6334" # gRPC API
volumes:
- qdrant_data:/qdrant/storage
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:6333/health"]
interval: 30s
timeout: 10s
retries: 5
start_period: 20s
networks:
- microservice-network

# Garage - 对象存储 (Rust 编写,S3 兼容)
garage:
image: dxflrs/garage:v0.9.0
container_name: garage
ports:
- "3900:3900" # S3 API 端口
- "3901:3901" # Admin API 端口
- "3902:3902" # Web UI 端口
volumes:
- garage_data:/var/lib/garage
- ./garage.toml:/etc/garage.toml:ro
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3901/health"]
interval: 30s
timeout: 10s
retries: 5
start_period: 20s
networks:
- microservice-network

volumes:
nacos_logs:
nacos_data:
rabbitmq_data:
redis_data:
postgres_data:
qdrant_data:
garage_data:

networks:
microservice-network:
driver: bridge

服务说明

Nacos (服务发现与配置中心)

RabbitMQ (消息队列)

Redis (缓存)

  • 端口: 6379
  • 密码: redis123
  • 用途: 缓存、会话存储、分布式锁

PostgreSQL (数据库)

  • 端口: 5432
  • 账号: admin/admin123
  • 数据库: microservice
  • 用途: 业务数据持久化

Qdrant (向量数据库)

  • REST API: http://localhost:6333
  • gRPC API: localhost:6334
  • 用途: 向量存储与检索,用于 AI 语义搜索

Garage (对象存储)

初始化 Garage

首次启动后需要创建 bucket 和 access key:

1
2
3
4
5
6
7
8
9
10
11
# 进入容器
docker exec -it garage /bin/sh

# 创建 bucket
garage bucket create novels

# 创建 access key
garage key create --name my-key

# 授权 key 访问 bucket
garage bucket allow --read --write --key my-key --bucket novels

启动命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 启动所有服务
docker-compose up -d

# 查看服务状态
docker-compose ps

# 查看服务日志
docker-compose logs -f [service_name]

# 停止所有服务
docker-compose down

# 停止并删除数据卷
docker-compose down -v

至此准备工作已经完成,万事俱备,只欠东风。

本文作者:Zhang Yunjie

本文链接:https://blog.tomzds9.win/2026/03/16/ai-rust-microservice-0/

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!

ESC 关闭 | 导航 | Enter 打开
输入关键词开始搜索