Dịch vụ load balancing nào tối ưu cho API có lượng truy cập lớn

Mình có hệ thống API có lượng truy cập lớn, đông người truy cập là bị 502. Giờ muốn load balancing để tránh quá tải, mình đã thử qua nhiều dịch vụ load balancing của DigitalOcean, Linode, VinaData nhưng đều không hiệu quả, 502 ngay tại con phân giải IP, chứ không phải bị quá tải ở mấy con server phía sau. Hiện mình định tự cài đặt HAProxy xem như thế nào, không biết ai có kinh nghiệm mảng này, có giải pháp nào tốt chia sẻ cho mình nha, thanks cả nhà.

Có quá nhiều biến trong câu hỏi của bạn nên rất khó để trả lời sao cho chính xác.

  1. Dịch vụ load balancing dùng để cân bằng tải giữa các server với nhau, nếu bạn chỉ có 1 server thì dịch vụ này hầu như không có ý nghĩa (ngoài việc cache nếu bạn có áp dụng)
  2. Error 502 không hoạt động ở tầng phân giải IP, nên điều đó có nghĩa là lỗi của bạn không nằm ở chỗ phân giải IP như bạn nói. 502 có nghĩa là khi Gateway hay Proxy server (trong trường hợp của bạn là Load Balancing) nhận được response từ Application Server nhưng response đó là không hợp lệ. Có nhiều lý do để respone không hợp lệ:
    2.1 Server bị quá tải
    2.2 Server đang bị lỗi (500, 403, 404,…), application không hoạt động đúng
    2.3 Firewall, SSL error
    … Nói chung là bất cứ lỗi nào trong quá trình truyền dữ liệu từ LB->Application Server
  3. Bạn không nói rõ API có truy cập lớn ra sao? (500 ccu? 5000ccu?) hay thời gian để xử lý 1 API query là bao nhiêu nên khó để bàn đến giải pháp tiếp theo.
2 Likes

Thanks bác doannguyen đã trả lời, mình xin nói chi tiết hơn

  1. Sau con LB mình có 3-5 server con chạy đằng sau
  2. Khi quá tải xảy ra(502 hoặc connection timeout), mình đã kiểm tra các server phía sau đều truy cập tốt thông qua IP, kiểm tra CPU, RAM đều ở mức bình thường. API của mình chạy HTTP
  3. Theo mình đo đếm được tầm hơn 10k ccu
    Mình phỏng đoán ở đây là con LB bị quá tải, lượng ccu quá lớn trong 1 khoảng thời gian. Mình đã hỏi các bên cung cấp DigitalOcean max được 5000 concurrent connection, và Linode là 10k, mấy bên Việt Nam thì mình chưa check được. Theo mình hiểu con LB cũng chỉ là 1 con linux cài HAProxy lên, tuỳ nhà cung cấp nó sẽ được setup chịu tải như thế nào(chắc ít bên LB là dùng phần cứng). Mình định thử cài 1 con LB dùng HAProxy lên và thử mức chịu tải của nó ntn.

VÃI

sorry, api service thì ccu là hơi thừa, không biết số lượng rps của bạn là bao nhiêu? nhưng 10k với api service là quá khủng!

Mình không nghĩ bottleneck là ở http service, nginx có thể xử lý 100k req/s mà không gặp khó khăn gì. Trong thời gian đang bị quá tải, bạn có thấy số lượng người dùng đang online có gì khác biệt không?

PS: Ngoài việc dùng 1 LB thì bạn còn có thể sử dụng thêm một số LB nữa và setup round robin dns. Nhưng có 3-5 API server thì việc làm này cũng hơi thừa thãi. Mình vẫn nghĩ nút thắt cổ chai không phải ở LB server.

Minh đang tính 1 là dùng dns round robin hoặc tự setup 1 con HAProxy rồi test full tải xem ntn. Mình thì vẫn nghĩ nút thắt đang ở LB, mình đã hỏi DigitalOcean max được 5k concurrent connection, và Linode được 10k, trong khi hệ thống mình cao điểm là hơn 10k. Mình suy luận là hệ thống LB của các bên dịch vụ đều giới hạn băng thông, khi vượt quá 1 con số nào đó thì họ sẽ tắt của mình đi, vì vậy mình tự setup 1 con HAProxy rồi test full tải ntn.

:ok_hand: Ok bạn, case này khá thú vị. Hy vọng phản hồi của bạn sau khi test.

Ok, thanks bạn đã trả lời mình

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?