ในแอปพลิเคชันของเรา เราจำเป็นต้องสร้างเซิร์ฟเวอร์ HTTP โดยที่เมื่อเริ่มต้นระบบ การเชื่อมต่อ HTTP แบบถาวรประมาณ 1,600 รายการจะถูกเปิดโดยเซิร์ฟเวอร์ระยะไกลต่างๆ และคำขอ HTTP POST หลายพันรายการจะถูกส่งลงการเชื่อมต่อแต่ละครั้งอย่างรวดเร็วเป็นเวลาประมาณ 30 รายการ วินาที - เราใช้เวลาเพียงไม่กี่มิลลิวินาทีในการตอบสนองต่อแต่ละรายการ หลังจากผ่านไป 30 วินาที การเชื่อมต่อจะถูกปิด และอีกการเชื่อมต่อหนึ่งจะถูกเปิดขึ้น
เราเลือก Netty เพราะโดยบัญชีส่วนใหญ่แล้ว มันเหมาะสมอย่างยิ่งในการสร้างเซิร์ฟเวอร์ HTTP ที่มีประสิทธิภาพ
ในการใช้งานเซิร์ฟเวอร์ HTTP ของเรา เราได้ปฏิบัติตาม Snoop ตัวอย่างของเซิร์ฟเวอร์ Netty HTTP
ขออภัย เรากำลังประสบปัญหาที่ Netty อาจอธิบายได้ว่ามีการใช้งานมากเกินไป ดังนั้นเราจึงพิจารณาว่ามีการกำหนดค่าอย่างเหมาะสมหรือไม่ โดยเฉพาะอย่างยิ่งวิธีจัดการเธรด เรากำหนดค่าเซิร์ฟเวอร์ดังนี้:
ServerBootstrap bootstrap = new ServerBootstrap(
new NioServerSocketChannelFactory(
Executors.newCachedThreadPool(),
Executors.newCachedThreadPool()));
เมื่อเราได้รับคำขอ เราจะจัดการมันภายในเธรดเดียวกันกับที่เรียก messageReceived() ใน SimpleChannelUpstreamHandler ของเรา
แนวทางนี้ควรใช้ได้กับแอปพลิเคชันของเราหรือไม่
แก้ไข: ค่าเฉลี่ยการโหลดบนกล่องในขณะที่เกิดความล้มเหลวคือ 0.05 ซึ่งต่ำมาก ฉันได้จัดสรร 4GB ให้กับกระบวนการ Java แล้ว แต่แทบจะไม่ได้ใช้งานอะไรเลย โดยพื้นฐานแล้ว กล่องมีภาระหนักเกินไปโดยสิ้นเชิง