Phân tải api tới các node bằng nginx
server {
listen 8899;
location / {
proxy_pass http://allbackend;
add_header Real-NodeInfo $upstream_addr always;
}
}
upstream allbackend {
least_conn;
server 127.0.0.1:8801;
server 127.0.0.1:8802;
server 127.0.0.1:8803;
}
Nếu client cài timeout là 5 giây. Khi nginx chia vào node 8803 xử lý mất 8 giây thì client sẽ ko nhận được response (cả header), chủ động đóng kết nối, server sẽ có access log với http status code 499
Nếu client cài timeout là 10 giây, nginx cài thêm cấu hình trong location "proxy_read_timeout 5s;". Khi nginx chia tải gọi vào node 8803 xử lý mất 8 giây thì client sẽ nhận được response là 504 Gateway timeout (header có http status code 504 và thông tin Real-NodeInfo cho biết node timeout tương ứng là 8803)
Khuyến cáo thêm là nên cài proxy_next_upstream off;
thay vì mặc định proxy_next_upstream error timeout;
Vì nếu ko client ko set timeout thì khi gọi node 1 timeout nó sẽ đẩy request vào tiếp node 2, có thể gây lỗi duplicate trên hệ thống