在构建现代AI应用,尤其是涉及海量非结构化数据检索(如RAG系统)时,向量数据库Milvus是核心组件。作为一名AI基础设施工程师,深入理解Milvus的网络架构,特别是其默认暴露的关键端口,对于部署、监控和故障排查至关重要。Milvus默认对外暴露的两个主要端口是 19530 和 9091,它们分别承担着截然不同的职责。
Contents
1. 端口 19530:数据与控制平面 (gRPC)
19530 是 Milvus Proxy 默认监听的端口,它是客户端与 Milvus 集群进行交互的唯一入口。
作用解析
19530 端口用于承载 gRPC 协议通信,处理所有高层级的业务逻辑,包括:
- 数据操作 (DML): 向量的插入、删除、更新和最关键的向量搜索(Search/Query)。
- 控制操作 (DDL): 创建、删除和管理 Collection,以及创建和管理索引。
- 连接管理: 客户端 SDK (如 PyMilvus, Go SDK) 初始化连接时,都需要指向这个端口。
在生产环境中,所有的 RAG 应用、推荐系统或图像搜索服务,都将通过这个端口发送查询请求。
实践示例:通过 19530 连接 Milvus
以下示例展示了如何使用 PyMilvus 客户端通过默认的 19530 端口连接到 Milvus 服务并执行基本操作:
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 from pymilvus import connections, Collection, FieldSchema, CollectionSchema, DataType
# 假设 Milvus 在本地运行
HOST = "localhost"
PORT = "19530"
print(f"-> 尝试连接 Milvus:{HOST}:{PORT}")
connections.connect(
alias="default",
host=HOST,
port=PORT
)
# 验证连接
print("连接成功。正在创建测试 Collection...")
# 定义 Schema
fields = [
FieldSchema(name="id", dtype=DataType.INT64, is_primary=True),
FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=128)
]
collection_schema = CollectionSchema(fields, "测试 19530 端口连接")
# 创建 Collection (DDL操作)
collection_name = "test_collection"
if collection_name in connections.get_connection().list_collections():
Collection(collection_name).drop()
collection = Collection(collection_name, collection_schema)
print(f"Collection '{collection_name}' 创建完成。")
# 插入数据 (DML操作)
vectors = [[float(i) + j * 0.1 for j in range(128)] for i in range(10)]
ids = list(range(10))
data = [
ids,
vectors
]
collection.insert(data)
print("数据插入成功,操作通过 19530 端口完成。")
2. 端口 9091:运维监控平面 (Metrics/Prometheus)
9091 端口在 Milvus 架构中扮演的角色是提供 运维可见性(Observability)。
作用解析
9091 端口主要用于暴露集群的运行状态和性能指标,通常是面向 Prometheus 或其他监控系统。
Milvus 的每个核心组件(如 Proxy, QueryNode, IndexNode, DataNode)都会通过这个端口暴露其内部指标,包括:
- 系统健康度: 组件是否存活、启动时间。
- 性能指标: 查询延迟 (P99/P95)、QPS (每秒查询次数)、插入速率。
- 资源利用率: 内存使用、CPU 负载、磁盘I/O。
- 内部状态: 索引构建进度、Segment 数量等。
在生产部署中,我们必须配置 Prometheus 来抓取 9091 端口的数据,从而实现自动化报警和容量规划。
实践示例:通过 9091 获取 Metrics
通过简单的 curl 命令,我们可以直接访问 9091 端口来查看 Milvus 暴露的原始指标数据。这些指标采用了 Prometheus 的文本格式。
假设 Milvus Proxy 在 localhost:9091 上暴露指标:
1
2 # 访问 Milvus Metrics Endpoint
curl http://localhost:9091/metrics
输出示例 (节选):
1
2
3
4
5
6
7
8
9
10 # HELP milvus_server_start_time_seconds Since when milvus server started
# TYPE milvus_server_start_time_seconds gauge
milvus_server_start_time_seconds 1.6788863084240755e+09
# HELP milvus_query_latency Query latency in seconds
# TYPE milvus_query_latency histogram
milvus_query_latency_bucket{status="success",le="0.001"} 0
...
# HELP milvus_insert_requests_total Total number of insert requests
# TYPE milvus_insert_requests_total counter
milvus_insert_requests_total{collection="test_collection", status="success"} 1
总结对比
| 端口 | 默认值 | 协议/用途 | 交互角色 | 关键功能 |
|---|---|---|---|---|
| 数据/控制平面 | 19530 | gRPC | AI应用客户端 (PyMilvus等) | 向量搜索、数据插入、DDL操作 |
| 运维监控平面 | 9091 | HTTP | 监控系统 (Prometheus) | 性能指标采集、健康检查、运维报警 |
汤不热吧