Load Balancers

Load balancer diagram

Introduction

What is load balancing?

1 trong những vấn đề cấp bách nhất mà hệ thống nào cũng phải đối mặt khi được đưa lên production chính là khả năng chịu tải từ hàng triệu requests.

Để có thể hứng được lưu lượng requests khổng lồ trong thời gian ngắn, đòi hỏi phải có hàng trăm hàng ngàn, chục ngàn, trăm ngàn servers hoạt động liên kết cùng nhau để chẻ nhỏ số lượng request đó ra.

Từ đó, load balancers xuất hiện. Công việc của chúng chính là phân chia tất cả requests từ client 1 cách hợp lý tới các servers đang sẵn sàng, nhằm tránh việc quá tải gây crash lên 1 đơn vị server, giúp tăng tính scalability, availability, performance của cả hệ thống lên.

Load balancing nằm ở lớp tương tác đầu tiên sau tường lửa trong 1 hệ thống trung tâm dữ liệu.

Placing load balancers

Thông thường, ta đều biết LBs đc đặt giữa clients và servers. Các requests sẽ đi qua lớp load balancing để tới servers và lấy phản hồi về lại clients. Nhưng đây ko phải là nơi duy nhất sử dụng LBs trong hệ thống.

Trước hết, để ý tới 3 nhóm servers phổ biến: web, application và database servers. Để có thể phân chia tải qua các servers đang sẵn sàng, load balancers có thể đc đặt ở giữa 3 services theo các cách như sau:

Load balancer diagram

Trong thực tế, cũng có khả năng load balancers đc sử dụng giữa 2 services bất kỳ với nhiều instances.

Services offered by load balancers

LBs ko chỉ tăng cường scalability, availability và performance cho các services, chúng còn cung cấp 1 số dịch vụ cốt lõi như sau:

What if load balancers fail? Are they not a single point of failure (SPOF)?

Global and Local Load Balancing

Global server load balancing

GSLB đảm bảo các traffic tải ở quy mô toàn cầu đc forward tới data center 1 cách hiệu quả. Ví dụ, khi 1 data center bị mất điện hoặc mất mạng, đòi hỏi tất cả traffic phải đc chuyển hướng tới data center khác. GSLB đưa ra quyết định forward dựa trên vị trí địa lý của ng dùng, số hosting servers ở các vị trí khác nhau, sức khỏe của data center, etc...

Illust dưới đây diễn tả rằng 1 GSLB có thể forward các requests tới 3 data centers khác nhau, trong mỗi data center sẽ lại có 1 con LB khác để forward tới các servers:

Global server load balancing diagram

Load balancing in DNS

Ta đc biết rằng DNS có thể phản hồi tới nhiều địa chỉ IP chỉ với 1 DNS query. Ở post DNS, ta cũng đc biết DNS cũng có thể sử dụng load balancing từ output của nslookup.

DNS sử dụng 1 kỹ thuật đơn giản để sắp xếp lại list các địa chỉ IP trong phản hồi của mỗi DNS query. Vì thế, các users khác nhau đều nhận list các địa chỉ IP đã đc sắp xếp. Bằng cách này, DNS phân tán tải của các requests đến data centers theo kỹ thuật round-robin:

ISP 1 -> DNS infra
=> DNS infra -> ISP 1 -> Data center 1's IP

ISP 2 -> DNS infra
=> DNS infra -> ISP 2 -> Data center 2's IP

ISP 3 -> DNS infra
=> DNS infra -> ISP 3 -> Data center 3's IP

ISP 4 -> DNS infra
=> DNS infra -> ISP 4 -> Data center 1's IP (round-robin)

Tuy nhiên, round-robin vẫn có 1 số hạn chế sau:

DNS ko chỉ là 1 hình thái của GSLB. Application delivery controllers (ADCs) và cloud-based load balancing cũng là ví dụ điển hình cho áp dụng GSLB.

Local load balancers

The need for local load balancers

DNS đóng vai trò sống còn trong việc cân bằng tải, nhưng nó cũng chịu những hạn chế sau:

Để giải quyết mấy vấn đề trên, ta cần 1 layer khác của load balancing dưới dạng các LB nội bộ...

What is local load balancing?

Các local load balancers đc đặt trong 1 data center, chúng thực hiện nhiệm vụ như 1 reverse proxy và cố gắng chia các requests đi tới các servers đang sẵn sàng. Các requests đi tới từ clients connect liền 1 mạch tới LB sử dụng 1 loại virtual IP address (VIP)

1 VIP là 1 address mà ko có máy chủ vật lý tương ứng.

Advanced Details of Load Balancers

Algorithms of load balancers

Load balancer phân tán các requests từ client dựa trên 1 số thuật toán, như là:

Static versus dynamic algorithms

Các thuật toán có thể static hoặc dynamic dựa trên trạng thái của máy tính:

Stateful vs stateless LBs

Stateful load balancing

Các stateful load balancing tham gia vào việc bảo trì 1 state của các sessions giữa clients và hosting servers. Stateful LB hợp nhất các thông tin của state vào thuật toán mà chúng sử dụng để thực hiện load balancing.

Đặc biệt, các stateful LBs lưu giữ 1 cấu trúc dữ liệu nhằm map các clients tới hosting servers. Tất cả thông tin về session của tất cả clients sẽ đc bảo toàn xuyên suốt toàn bộ load balancer khiến cho chúng trở nên phức tạp hơn và giảm độ scalability xuống.

Stateful load balancing diagram
Stateless load balancing

Các stateless load balancing ko phải bảo trì các state nên nhẹ và nhanh hơn. Chúng sử dụng consistent hashing để thực hiện để thực hiện các forwading decisions.

Tuy nhiên, nếu cơ sở hạ tầng thay đổi, chẳng hạn như khi ta tạo thêm 1 application server mới, các stateless LBs có lẽ sẽ ko đủ cứng cáp bằng các stateful LBs. Chỉ 1 mình consistent hashing là ko đủ để route các request tới đúng application servers.

Stateless load balancing diagram

Types of load balancers

Layer 7 thông minh, layer 4 nhanh...

Load balancer deployment

Trên thực tế, chỉ 1 lớp LB là ko đủ cho 1 trung tâm dữ liệu lớn. 1 data center truyền thống có thể có cấu trúc 3-tier LB như sau:

Load balancer layers diagram

Tier-0 and tier-1 LBs

Nếu DNS đc coi là tier-0 load balancer, equal cost multipath (ECMP) routers sẽ là tier-1 LBs.

Ở lớp này, lượng tải đi tới sẽ được chia đều dựa theo IP hoặc 1 số thuật toán như round-robin hoặc weighted round-robin. Tier-1 LBs sẽ cân bằng lượng tải giữa các đg dẫn khác nhau tới các tier load balancers cao hơn.

ECMP routers đóng vai trò thiết yếu cho tính horizontal scalability.

Tier-2 LBs

Tier-2 sẽ bao gồm layer 4 load balancers. Ở tier này, các LBs đảm bảo với bất kỳ kết nối nào, tất cả gói tin đi tới sẽ đc forward tới tier-3 LBs.

Tier-3 LBs

Ở tier-3 sẽ là layer 7 load balancers. Đây sẽ là lớp connect trực tiếp tới các backend servers. Và vì đây là lớp cuối trc server pool, chúng sẽ thực hiện việc montoring cho các servers ở cấp độ HTTP.

  • Tier-1 cân bằng tải giữa các load balancers

  • Tier-2 làm cầu nói để requests đc forward từ tier-1 tới tier-3 mượt mà

  • Tier-3 thực hiện nhiệm vụ load balancing giữa các backend servers