มีการรับประกันอะไรบ้างสำหรับการล้างบัฟเฟอร์การส่ง TCP (ถ้ามี) เมื่อ ระบบย่อยช่องแช่แข็ง หยุด cgroup หรือไม่
พิจารณาสถานการณ์ต่อไปนี้: เซิร์ฟเวอร์ A ซึ่งทำงานใน cgroup ส่งข้อมูลไปยังเซิร์ฟเวอร์ B ผ่าน TCP ซ็อกเก็ต TCP ได้รับการกำหนดค่าให้ใช้อัลกอริทึมของ Naggle (ไฟล์ TCP_NODELAY
ไม่ได้ตั้งค่าตัวเลือกไว้) ดังนั้น, ส่ง
ing ข้อมูลผ่านซ็อกเก็ตไม่ได้บล็อกสำหรับ ACK ของเซิร์ฟเวอร์ B แต่จะส่งคืนหลังจากข้อมูลที่จะส่งถูกคัดลอกไปยังบัฟเฟอร์การส่ง TCP หลังจากนั้น แต่ก่อนที่จะส่งข้อมูลไปยังเซิร์ฟเวอร์ B กลุ่ม c จะถูกแช่แข็ง
เกิดอะไรขึ้นกับข้อมูลใน TCP send buffer?
- การดำเนินการตรึงจะรอจนกว่าข้อมูลทั้งหมดในบัฟเฟอร์จะได้รับการยอมรับจากเซิร์ฟเวอร์ B หรือไม่ จะเกิดอะไรขึ้นถ้าบัฟเฟอร์รับของเซิร์ฟเวอร์ B เต็ม การหยุดทำงานจะรอการ ack ของเซิร์ฟเวอร์ B อย่างไม่มีกำหนดหรือไม่
- การแช่แข็งจะไม่รอ ACK ของเซิร์ฟเวอร์ B และส่งข้อมูลต่อไปหลังจากที่ cgroup ถูกละลายหรือไม่ หากการหน่วงเวลาระหว่างการหยุดและการละลายนานเพียงพอสำหรับเซิร์ฟเวอร์ B เพื่อปิดการเชื่อมต่อ TCP ข้อมูลในบัฟเฟอร์จะสูญหาย
ลิงก์ไปยังข้อกำหนดและการรับประกันเกี่ยวกับลักษณะการทำงานนั้นได้รับการชื่นชม แต่อาจไม่มีการรับประกันดังนั้นการพึ่งพาพฤติกรรมอย่างใดอย่างหนึ่งจะเปราะบาง?
เบื้องหลังของคำถามคือฉันสงสัยว่าต้องระมัดระวังเพียงใดเมื่อส่งข้อมูลผ่าน TCP บน AWS Lambda (ข้อสันนิษฐานของฉันคือ AWS Lambda ใช้กลุ่มกลุ่มเพื่อหยุด/ละลายหลัง/ก่อนที่จะจัดการการเรียกใช้ Lambda) เพียงพอหรือไม่ที่จะล้างแอปพลิเคชันบัฟเฟอร์ไปยังซ็อกเก็ต TCP/บัฟเฟอร์การส่ง TCP หรือต้องแน่ใจว่าเซิร์ฟเวอร์ B ได้รับข้อมูลบนชั้นแอปพลิเคชัน เช่น โดยใช้ HTTP และรอการตอบกลับ HTTP ของเซิร์ฟเวอร์