Soyo

Tản mạn Load Balancer

Có thể hiểu đơn giản load-balancer là công cụ điều hướng request theo mục đích và hiệu quả, phục vụ cho việc mở rộng theo chiều ngang (Horizontal-scale hoặc Scale-out) một cách dễ dàng.

Công ty có 1000 nhân viên, làm cùng một công việc giống nhau. Sẽ có người rảnh và người bận. Người bận sẽ không nhận thêm việc, người rảnh thì giao việc, cho khỏi facebook, youtube

load-balancing-8809-165

Có 3 cách dùng thông tin để phân phối tải thường gặp

  • Host-based: dựa vào host-name của request (domain).
  • Path-based: dựa vào toàn bộ URL của request chứ không phải chỉ host.
  • Content-based: dựa vào nội dung request, có thể là url params hoặc body.
    Việc phân phối tải bắt nguồn từ request của user nên mỗi khi nhận được request, cần phân tích nó trước, sau đó mới lấy thông tin trạng thái các resource (*) để chuyển tải.

Trạng thái của resource: dead or alive, current workload, region ...

Việc phân phối tải được thực hiện ở một trong 2 cấp độ sau:

  • Network-layer: cái này là layer 4 (?). Hoạt động dựa vào thông tin của mạng như là IP Addresses, UDP, TCP ... vì thế dùng các thiết bị phần cứng chuyên dụng.
  • Application-layer: Layer 7 (?) (HTTP), hoạt động ở tầng application nên có thể đọc nội dung request. Lúc này có thể hoàn toàn quản lý nội dung và phân phối một cách hiệu quả nhất.

Ừm, để load-balancing hiệu quả chúng ta có các thuật toán sau khi cài đặt một load balancer:

  • Round Robin: cá resource là ngang hàng vả sẽ được sắp vòng tròn, các request sẽ được phân bố lần lượt theo vòng tròn đó.
  • Weighted Round Robin: Giống như RoundRobin, nhưng các resource được đánh trọng số (Round Robin trọng số tất cả là 1), resource nào có trọng số lớn hơn sẽ giao lượng việc nhiều hơn, giống kiểu trả lương cao thì làm nhiều =)).
  • Least Connections: giống ví dụ công ty ở trên, resource nào có ít kết nối nhất thì đẩy kết nối mới đến resource đó. Để làm được việc này, phải đếm được số kết nối hiện tại đến từng server
  • Least Response Time: Resource hồi đáp nhanh nhất sẽ được giao thêm việc. Cái này bất công quá =))
  • Adaptive Load Balancing: Nhận feedback từ từng resource về trạng thái của mình (giống kiểu hỏi survey, nó bảo nó nhiều việc thì miễn =))).

Toàn bộ những Cloud service đều có hỗ trợ LoadBalancer. Cài đặt rất đơn giản và trả thêm tiền cũng rất đơn giản cho họ =)) (tầm 20$/tháng)

AWS: https://aws.amazon.com/vi/elasticloadbalancing/
Google Cloud: https://cloud.google.com/load-balancing/
Cloudflare: https://www.cloudflare.com/load-balancing/
Incapsula: https://www.imperva.com/products/load-balancer/
DigitalOcean: https://www.digitalocean.com/products/load-balancer/
Azure: https://azure.microsoft.com/en-us/services/load-balancer/

Có hàng trả tiền thì cũng có hàng free =)), xài miễn phí thì phải có chút kiến thức.
Cài đặt, quản lý, theo dõi, sắp xếp j j đó thì phải tự làm. Dưới đây là một số open source mà mình có thể dùng.

Seesaw
LoadMaster by KEMP
HAProxy
ZEVENET
Neutrino
Balance
Pen
Nginx
Traefik
Gobetween

https://geekflare.com/open-source-load-balancer/

Thôi thì chưa làm việc với Loadbalancer nào vì toàn dự án nhỏ, nên là đọc cho biết để còn đi loè thiên hạ =)).
Hy vọng mọi người có kiến thức tổng quan giống mình sau khi xem bài.

Thân.

Comments