MinerU并发问题处理记录

MinerU并发问题处理记录

解决方案goocz2025-05-15 18:06:231A+A-

目前是一个mineru,启动了四个相同的服务。需要通过启动多个mineru服务,用户无感的调用一个地址。

方案一

一:外部负载均衡器

  • 架构调整
    将 NGINX 提取出来,部署在一个独立的容器或服务器上,专门作为外部负载均衡器。后端服务则分别部署在各个容器实例中。
  • 工作原理
    外部 NGINX 通过健康检查与服务发现机制,自动更新上游服务器列表。这样当某个容器实例不可用时,外部 NGINX 不会再向其转发请求,从而保证高可用性。
  • 优点
  • 实现了两级负载均衡:外部负载均衡器调度各个容器实例,容器内部可以继续使用 NGINX 做进程或端口级别的分发。 便于监控和故障隔离,提高整个系统的健壮性。

二:利用容器编排平台(如 Kubernetes 或 Docker Swarm)

  • 自动化管理
    使用编排平台可以自动管理容器的副本数量、健康检查和自动故障恢复。例如 Kubernetes 中的 Service 对象,可以为每个后端 Pod(容器实例)提供统一的访问入口,并自动进行负载均衡。
  • 动态服务发现
    编排平台会将服务实例注册到内部 DNS 或服务发现机制中,外部的负载均衡器或反向代理可以动态获取健康的服务实例列表,从而实现无缝的流量切换。
  • 优点
  • 编排平台可以在一个节点故障时自动迁移工作负载,从而提高整体系统的容错能力。 支持滚动更新和扩展,方便运维和管理。

三:虚拟 IP 或 Keepalived 实现高可用

  • 虚拟 IP 技术
    在同一网络中部署多个容器实例,并通过 Keepalived 或类似技术分配一个虚拟 IP,当一个实例不可用时,自动将虚拟 IP 迁移到健康的实例上。
  • 优点
  • 实现了快速的故障切换和无缝迁移。 可以在一定程度上屏蔽后端多实例的复杂性,对外提供单一入口。

总结

直接在一个容器内同时运行 NGINX 和应用服务,会导致高可用性受到限制。建议采取如下措施:

  • 解耦:将外部负载均衡器(如 NGINX)与应用服务分离部署;
  • 编排平台:利用 Kubernetes、Docker Swarm 等工具实现容器副本管理、健康检查和自动恢复;
  • 动态配置:采用服务发现或虚拟 IP 方案,确保当新增或移除容器实例时,外部负载均衡器能实时更新其上游列表,从而保证请求流量始终路由到健康实例上。

方案二(超时影响业务)

1.启动4个mineru服务

-gpu-mem ory-limit 4 batch ratio 设置

单机多进程,但仍然是一个服务,不能跨多台机器负载均衡

gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:app --bind 0.0.0.0:8000

多机

uvicorn main:app --host 0.0.0.0 --port 8001 &

uvicorn main:app --host 0.0.0.0 --port 8002 &

uvicorn main:app --host 0.0.0.0 --port 8003 &

2. Python 服务注册到 Nacos

pip install nacos-sdk-python

from nacos import NacosClient

# Nacos 服务器地址

NACOS_SERVER = "127.0.0.1:8848"

SERVICE_NAME = "python-service"

IP = "192.168.1.100" # 服务器 IP

PORT = 8001 # 这个实例的端口

client = NacosClient(NACOS_SERVER)

client.add_naming_instance(SERVICE_NAME, IP, PORT)

print(f"Python 实例 {IP}:{PORT} 注册到 Nacos 成功!")

3. Spring Cloud Gateway 进行负载均衡

spring:

cloud:

gateway:

discovery:

locator:

enabled: true # 启用 Nacos 服务发现

routes:

- id: python-service

uri: lb://python-service # 负载均衡到 Python 服务

predicates:

- Path=/python/**

filters:

- name: RequestRateLimiter

args:

redis-rate-limiter.replenishRate: 5 # 每秒 5 个请求

redis-rate-limiter.burstCapacity: 10 # 突发 10 个请求

4.挂了怎么启动

Supervisor / Systemd / Docker / Kubernetes 自动重启实例

点击这里复制本文地址 以上内容由goocz整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!

果子教程网 © All Rights Reserved.  蜀ICP备2024111239号-5