Có gì đảm bảo cho việc xóa bộ đệm gửi TCP, nếu có, khi hệ thống con tủ đông đóng băng một cgroup?
Xem xét tình huống sau: Máy chủ A, chạy trong cgroup, gửi dữ liệu đến Máy chủ B qua TCP. Ổ cắm TCP được cấu hình để sử dụng thuật toán của Naggle (các TCP_NODELAY
tùy chọn không được đặt). Vì vậy, gửi
Việc gửi dữ liệu qua ổ cắm không chặn ACK của Máy chủ B nhưng trả về sau khi dữ liệu được gửi đã được sao chép vào bộ đệm gửi TCP. Sau đó, nhưng trước khi dữ liệu được gửi đến Máy chủ B, nhóm bị đóng băng.
Điều gì xảy ra với dữ liệu trong bộ đệm gửi TCP?
- Hoạt động đóng băng sẽ đợi cho đến khi tất cả dữ liệu trong bộ đệm được Máy chủ B xác nhận? Điều gì xảy ra nếu bộ đệm nhận của Máy chủ B đầy? Việc đóng băng sẽ chờ vô thời hạn đối với ack của Máy chủ B?
- Việc đóng băng sẽ không đợi ACK của Máy chủ B và tiếp tục gửi dữ liệu sau khi cgroup đã được làm tan băng? Nếu độ trễ giữa đóng băng và tan băng đủ lâu để Máy chủ B đóng kết nối TCP, dữ liệu trong bộ đệm sẽ bị mất.
Liên kết đến thông số kỹ thuật và đảm bảo xung quanh hành vi đó được đánh giá cao. Nhưng có lẽ không có gì đảm bảo nên việc dựa vào một trong hai hành vi sẽ dễ vỡ?
Cơ sở của câu hỏi là tôi đang tự hỏi người ta phải cẩn thận đến mức nào khi gửi dữ liệu qua TCP trên AWS Lambda (giả định của tôi là AWS Lambda sử dụng các nhóm để đóng băng/tan băng sau/trước khi lệnh gọi Lambda được xử lý). Có đủ để xóa bộ đệm ứng dụng sang bộ đệm gửi TCP socket/TCP không? Hay người ta phải đảm bảo rằng Máy chủ B đã nhận được dữ liệu trên lớp ứng dụng, chẳng hạn bằng cách sử dụng HTTP và chờ phản hồi HTTP của máy chủ?