Score:1

UWSGI บล็อกการเชื่อมต่อขาเข้าเมื่อเธรดทั้งหมดไม่ว่าง

ธง cn

ฉันมีแอป UWSGI อย่างง่ายที่วางอยู่เบื้องหลัง LB ด้วยการกำหนดค่า .ini ต่อไปนี้

[uwsgi]
ซ็อกเก็ต=0.0.0.0:5071
chdir = src/
ไฟล์ wsgi = uwsgi.py
กระบวนการ = 2
เธรด = 1
โปรโตคอล = http
ปลั๊กอิน = หลาม
exit-on-reload=เท็จ
มาสเตอร์=จริง
# การล้างไฟล์ temp
สุญญากาศ = จริง    

เมื่อทั้งหมด 2x1 เธรดไม่ว่างแอปพลิเคชัน ให้บริการต่อไป การเชื่อมต่อเข้ามาโดยการเข้าคิวรอให้เธรดว่าง

นี่เป็นพฤติกรรมที่ไม่พึงประสงค์ในกรณีของฉัน เนื่องจากฉันต้องการให้ UWSGI ส่งคืนรหัสสถานะ 5xx ซึ่งจะทำให้ฉันไม่ใช้ทรัพยากรมากเกินไปในการแจกจ่ายครั้งเดียว

รหัสการทดสอบไคลเอนต์

การแนบรหัสไคลเอนต์ทดสอบสำหรับแอปพลิเคชัน UWSGI

พร็อกซี่ = {
    'http':'http://localhost:5071'
}

@เธรด
def f():
    พิมพ์ ('ส่งคำขอ')
    ตอบกลับ = request.get('http://dummy.site',พร็อกซี=พร็อกซี)
    พิมพ์(str(response.status_code )+ response.text)

สำหรับผมในช่วง (5):
    ฉ()

แบบทดสอบ (1)

การเพิ่ม ฟัง = 2 เป็น .ini และเริ่มทำงาน 3 คำขอพร้อมกันก็จะพิมพ์:

*** คิวฟัง uWSGI ของ socket "0.0.0.0:5071" (fd: 3) เต็ม !!! (3/2) ***

ในขณะที่การเชื่อมต่อที่สามดูเหมือนจะยังคงได้รับการยอมรับ เข้าคิวและดำเนินการในภายหลังแทน a 5xx เกิดข้อผิดพลาด

การทดสอบ (2)

การเพิ่ม ฟัง = 0 เป็น .ini และเริ่มทำงาน 5 คำขอพร้อมกัน จะดำเนินการเพียงสองคำขอในแต่ละครั้ง เอาต์พุตคิวเต็มไม่แสดงอีกต่อไป ยังไงก็ตาม คำขอนั้นยังคงอยู่ในคิวและดำเนินการเมื่อเธรดว่าง

ฉันจะบล็อกการเชื่อมต่อขาเข้ากับแอปพลิเคชัน UWSGI ได้อย่างไรเมื่อเธรดทั้งหมดไม่ว่าง

anx avatar
fr flag
anx
การกำหนดค่าของคุณมีพอร์ตและคิวการฟังที่แตกต่างจากข้อความที่บันทึกไว้ คุณใช้งานสองอินสแตนซ์และตรวจสอบอินสแตนซ์อื่นนอกเหนือจากที่คุณต้องการหรือไม่ นอกจากนี้ *เกือบ* ทุกกรณีการใช้งานทำงานได้ดีขึ้นด้วย (อย่างน้อยบางส่วน) ฟังค้าง - เมื่อเสร็จแล้ว ให้ตรวจสอบว่าเมตริกประสิทธิภาพของคุณตรงกับความคาดหวังของคุณจริงๆ หรือไม่
Constantin avatar
cn flag
@anx เป็นความผิดพลาดเมื่อฉันเปลี่ยนพอร์ตขณะเขียนคำถาม เกี่ยวกับงานค้าง คุณอ้างถึงตัวเลือกใดเป็นพิเศษ
anx avatar
fr flag
anx
ไคลเอนต์ที่คุณใช้เพื่อทดสอบสิ่งนี้อาจ **ลองใหม่** *หลังจาก* uwsgi ปฏิเสธความพยายามในการเชื่อมต่อหนึ่งครั้งหรือไม่ บางทีการกำหนดค่าของคุณอาจใช้งานได้ แต่วิธีทดสอบของคุณใช้ไม่ได้?
Constantin avatar
cn flag
@anx มันไม่ได้ลองใหม่เลยโดยใช้ `requests.get(url,proxies)` อย่างง่ายใน python
Score:0
ธง cz

นี่เป็นคำขอที่แปลกประหลาดจริงๆ แต่ถ้าคุณต้องการทำจริงๆ คุณสามารถลองลดจำนวน ฟังคิว (เป็นศูนย์) เช่น --ฟัง0. ฉันยังไม่ได้ทดสอบสิ่งนี้และไม่รู้ว่าศูนย์ถือเป็นค่าที่ถูกต้องหรือไม่ นี่คือสิ่งที่เป็นปกติ เพิ่มขึ้น เมื่อไซต์ได้รับปริมาณการเข้าชมไม่ลดลง

Constantin avatar
cn flag
ด้วย `listen = 0` ทั้งหมดที่เกิดขึ้นคือผลลัพธ์ของคิวที่เต็มจะไม่แสดงอีกต่อไป ดูเหมือนว่า "ที่ไหนสักแห่ง" จะแขวนอยู่จนกว่าเธรดจะเป็นอิสระ ฉันได้แนบไคลเอนต์ทดสอบของฉันในคำถาม ขอขอบคุณ!
Michael Hampton avatar
cz flag
@Constantin อาจเป็นไปได้ว่าสิ่งนี้เป็นไปไม่ได้ ฉันไม่พบใครอื่นที่พยายามทำสิ่งนี้
Constantin avatar
cn flag
ขอบคุณสำหรับความคิดเห็น.นี่มันแปลกจริง ๆ - ฉันสงสัยว่าทำไมเว็บเซิร์ฟเวอร์ไม่ควรมีความสามารถในการจำกัดจำนวนการเชื่อมต่อ โดยเฉพาะอย่างยิ่งเมื่อแอปพลิเคชันเหล่านี้ถูกวางไว้เบื้องหลังโครงสร้างพื้นฐานทั้งหมดเพื่อทำงานร่วมกับโหลดบาลานซ์ กลุ่มปรับขนาดอัตโนมัติ และทรัพยากรที่จัดสรรล่วงหน้าที่คำนวณไว้

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา