ฉันยังใหม่ต่อการพัฒนาแบ็กเอนด์และฉันจะพยายามอธิบายสถานการณ์ของฉัน:

ซ้อนกัน:

  1. กระติกน้ำ (nginx, uwsgi)
  2. ผักชีฝรั่ง
  3. Redis (แบ็คเอนด์)
  4. RabbitMQ (นายหน้า)
  5. MongoDB (เก็บข้อมูลจำนวนมาก)

ฉันต้องการบรรลุอะไร
ฉันต้องการรับคำขอพร้อมกันนับพันบนเซิร์ฟเวอร์ขวดและประมวลผลในพื้นหลังโดยใช้คิวบางประเภทในมัลติเธรด ฉันได้อ่านเอกสารคื่นฉ่ายที่พวกเขากล่าวถึงการใช้ eventlet/gevent ของงานที่เข้มข้น I/O

celery -A helper.public_data_celery worker --loglevel=info -P eventlet -c 1000 -n [email protected]%h
celery -A helper.public_data_celery worker --loglevel=info -P eventlet -c 1000 -n [email protected]%h
celery -A helper.public_data_celery worker --loglevel=info -P eventlet -c 1000 -n [email protected]%h
celery -A helper.public_data_celery worker --loglevel=info -P eventlet -c 1000 -n [email protected]%h

ฉันมีคนงานสี่คนนี้ทำงาน

helper.py

public_data_celery = Celery('helper', broker='pyamqp://[email protected]//', backend='redis://localhost:6379/0')

งาน

  1. คื่นฉ่ายได้รับงาน
  2. ฟังก์ชั่นดำเนินการ เรียกปลายทางรับข้อมูล เก็บไว้ใน mongo และส่งกลับข้อมูลนั้น
  3. เสร็จสิ้นภารกิจ

ปัญหาที่ฉันกำลังเผชิญ

  1. งานเดียวกันดำเนินการโดยคนงานหลายคน ไม่รู้ว่าทำไม? ฉันคิดว่าฉันต้องตั้งค่าคิว แต่ไม่สามารถทำได้
  2. เมื่อมีการร้องขอจำนวนมาก eventlet จะส่งคำเตือน OSError: Load averages are unobtainable
  3. Mongo ก็โยนข้อผิดพลาด pymongo.errors.ServerSelectionTimeoutError: ec2-13-235-54-153.ap-south-1.compute.amazonaws.com:27017: [Errno 24] Too many open files, Timeout: 30s, Topology Description: <TopologyDescription id: 60b7a531e261cd9e6d578fd2, topology_type: Single, servers: [<ServerDescription ('ec2-13-235-54-153.ap-south-1.compute.amazonaws.com', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('ec2-13-235-54-153.ap-south-1.compute.amazonaws.com:27017: [Errno 24] Too many open files')>]>
  4. Redis เกิดข้อผิดพลาด: ConnectionError('Error 24 connecting to localhost:6379. Too many open files.')

ฉันต้องการทราบว่าฉันทำอะไรผิดในการตั้งค่าโครงสร้างพื้นฐานหรือแนวคิดที่ฉันขาดหายไป ฉันสับสนอย่างสมบูรณ์

ขอบคุณ!

no answer