[System Design] P3 - Load Balancing & Proxy Server

Table of contents
- Phần 1: Giới thiệu về Quản lý Lưu lượng Web
- Phần 2: Bộ cân bằng tải
- 2.1. Bộ cân bằng tải chính xác là gì? (Định nghĩa & Mục đích cốt lõi)
- 2.2. Tại sao chúng ta cần Bộ cân bằng tải?
- 2.3. Cách Bộ cân bằng tải Chọn đường đi
- Least Connections (Ít kết nối nhất - Hàng đợi ngắn nhất)
- Least Response Time (Thời gian phản hồi thấp nhất - Dịch vụ nhanh nhất)
- Hash-Based (Phân công nhất quán - Dựa trên Băm)
- Random with 2 Choices (Chọn ngẫu nhiên thông minh)
- Phần 3: Các Lớp Cân bằng tải
- Phần 4: Máy chủ Proxy
- Phần 5: Tổng kết

Phần 1: Giới thiệu về Quản lý Lưu lượng Web
Hãy coi internet và các mạng mà ứng dụng chạy trên đó như một hệ thống đường cao tốc rộng lớn hoặc những con đường thành phố đông đúc. Giống như đường bộ vật lý, những con đường kỹ thuật số này có thể bị tắc nghẽn bởi lưu lượng truy cập – hàng triệu người dùng cố gắng truy cập trang web, xem video hoặc sử dụng dịch vụ trực tuyến cùng một lúc. Nếu không có quản lý phù hợp, lưu lượng truy cập này có thể dẫn đến tắc nghẽn, tốc độ chậm và thậm chí là dừng hoàn toàn (trang web bị sập).
Đây là lúc các nhân vật chính của chúng ta xuất hiện: Bộ cân bằng tải (Load Balancer) và Máy chủ Proxy (Proxy Server). Chúng hoạt động như những "người quản lý giao thông" hoặc "người gác cổng" thiết yếu trên xa lộ kỹ thuật số này. Công việc của chúng là đảm bảo lưu lượng truy cập diễn ra suôn sẻ, hiệu quả và đáng tin cậy, cho phép các trang web và ứng dụng xử lý nhiều người dùng mà không gặp sự cố.
Phần 2: Bộ cân bằng tải
2.1. Bộ cân bằng tải chính xác là gì? (Định nghĩa & Mục đích cốt lõi)
Về cơ bản, Bộ cân bằng tải (Load Balancer - LB) là một thiết bị hoặc phần mềm hoạt động giống như một người điều phối giao thông, được đặt ở phía trước các máy chủ (backend server). Nhiệm vụ chính của nó là phân phối lưu lượng mạng (các yêu cầu từ trình duyệt hoặc ứng dụng) đến các máy chủ trong nhóm có khả năng thực hiện các yêu cầu đó một cách hiệu quả.
Hãy sử dụng một số ví dụ tương tự để làm rõ điều này:
Quầy thanh toán siêu thị: Tưởng tượng một siêu thị đông đúc vào giờ cao điểm. Nếu chỉ có một quầy thanh toán mở, hàng đợi sẽ nhanh chóng trở nên rất dài. Tuy nhiên, nếu cửa hàng mở nhiều quầy thanh toán và có một nhân viên hướng dẫn khách hàng đến các quầy tiếp theo còn trống hoặc có ít người xếp hàng nhất, luồng khách hàng sẽ cải thiện đáng kể và mọi người được phục vụ nhanh hơn. LB giống như nhân viên hữu ích đó, và các quầy thanh toán là các máy chủ xử lý yêu cầu của khách hàng.
Cảnh sát giao thông: Tại một giao lộ tắc nghẽn, một sĩ quan cảnh sát giao thông điều khiển ô tô đi vào các làn đường khác nhau còn trống để ngăn chặn tắc đường và giữ cho giao thông di chuyển. Bộ cân bằng tải thực hiện vai trò này đối với lưu lượng kỹ thuật số.
Mục tiêu cơ bản của LB là tối đa hóa tốc độ và tận dụng tốt nhất dung lượng máy chủ. Nó đảm bảo rằng không có máy chủ đơn lẻ nào bị quá tải (điều có thể dẫn đến hiệu suất hoặc độ trễ - latency chậm hoặc thậm chí gây ra sự cố máy chủ, làm cho ứng dụng không khả dụng).
2.2. Tại sao chúng ta cần Bộ cân bằng tải?
LB thực hiện một số chức năng quan trọng mang lại lợi ích đáng kể cho các ứng dụng và người dùng giúp tạo ra một hệ thống mạnh mẽ và hiệu quả:
Phân phối lưu lượng hiệu quả: Đây là chức năng cốt lõi – phân chia đồng đều các yêu cầu từ người dùng đến máy chủ, ngăn chặn tình trạng quá tải cho các máy chủ đơn lẻ, đảm bảo phân phối cân bằng, góp phần vào hiệu quả tổng thể của hệ thống.
Tính sẵn sàng cao và Độ tin cậy: LB hoạt động như những người giám sát, liên tục thực hiện "kiểm tra sức khỏe" (health check) trên các máy chủ. Nếu một máy chủ không phản hồi LB ngay lập tức ngừng gửi lưu lượng đến máy chủ này đồng thời chuyển hướng các yêu cầu mới đến các máy chủ khỏe mạnh còn lại. Việc định tuyến lại tự động này, thường được gọi là "chuyển đổi dự phòng" (failover).
Khả năng mở rộng và Tính linh hoạt: LB giúp việc điều chỉnh khả năng xử lý của ứng dụng trở nên cực kỳ dễ dàng bằng cách thêm hoặc bớt các máy chủ khỏi nhóm khi nhu cầu thay đổi. Khi một máy chủ mới được thêm vào nhóm (mở rộng quy mô - scaling out), LB sẽ tự động phát hiện và đưa nó vào sử dụng, gửi yêu cầu đến nó. Ngược lại, nếu một máy chủ bị loại bỏ (thu hẹp quy mô - scaling in), LB sẽ ngừng gửi lưu lượng đến máy chủ này.
Tăng cường bảo mật: LB có thể cung cấp một số cơ chế bảo mật: ẩn giấu địa chỉ IP nội bộ của các máy chủ backend khỏi việc tiếp xúc trực tiếp với internet, giảm thiểu tác động của các cuộc tấn công Từ chối dịch vụ Phân tán (Distributed Denial-of-Service - DDoS) nhờ việc phân phối lưu lượng trên nhiều máy chủ (khiến việc làm quá tải bất kỳ máy chủ nào trở nên khó khăn hơn).
Điều quan trọng là phải thấy cách những lợi ích này hoạt động cùng nhau. Phân phối hiệu quả ngăn chặn quá tải máy chủ, trực tiếp cải thiện hiệu suất và độ tin cậy. Kiểm tra tình trạng là chìa khóa cho tính sẵn sàng cao. Khả năng dễ dàng thêm hoặc bớt máy chủ cung cấp khả năng mở rộng, từ đó giúp duy trì hiệu suất trong thời gian lưu lượng truy cập cao và cho phép bảo trì mà không cần thời gian chết. LB không chỉ thực hiện một nhiệm vụ riêng lẻ; nó đang điều phối các chức năng này để đảm bảo toàn bộ hệ thống chạy trơn tru, đáng tin cậy và hiệu quả.
2.3. Cách Bộ cân bằng tải Chọn đường đi
Làm thế nào một bộ cân bằng tải thực sự quyết định máy chủ nào sẽ nhận yêu cầu đến tiếp theo?
Nó sử dụng các thuật toán cân bằng tải để quyết định cách phân phối các yêu cầu. Về cơ bản, các thuật toán này được chia thành hai loại:
Thuật toán tĩnh (Static Algorithms): Phân phối lưu lượng dựa trên một kế hoạch cố định, được xác định trước mà không xem xét trạng thái hiện tại của các máy chủ (như tải hoặc thời gian phản hồi). Chúng đơn giản nhưng có thể không hiệu quả nếu điều kiện máy chủ thay đổi.
Thuật toán động (Dynamic Algorithms): Các thuật toán này tính toán trạng thái hiện tại của mỗi máy chủ, như mức độ bận rộn, tốc độ phản hồi hoặc tình trạng tổng thể – trước khi quyết định gửi lưu lượng đến máy chủ. Thuật toán động thích ứng với các điều kiện thay đổi nhưng thường phức tạp hơn để triển khai.
Hãy xem xét một số thuật toán phổ biến nhất:
Round Robin (Xoay vòng - Chia lượt)
Cơ chế:
Đây là một thuật toán tĩnh đơn giản nhất.
Nó phân phối các yêu cầu tới các máy chủ lần lượt theo một danh sách được xác định trước. Khi đến cuối danh sách, nó quay lại máy chủ đầu tiên và bắt đầu lại.
Ví dụ: Có 3 máy chủ (A, B, C). Yêu cầu 1 đi đến A, yêu cầu 2 đi đến B, yêu cầu 3 đi đến C, yêu cầu 4 lại quay về A, cứ thế lặp lại. Việc này giống như việc chia bài lần lượt cho từng người chơi quanh bàn
Ưu điểm:
Đơn giản để hiểu và triển khai.
Đảm bảo số lượng yêu cầu được gửi đến mỗi máy chủ bằng nhau theo thời gian.
Nhược điểm:
Bỏ qua tình trạng, trạng thái của các máy chủ. Nếu một máy chủ có khả năng xử lý yếu hơn so với các máy chủ khác, Round Robin vẫn sẽ gửi cho nó cùng số lượng yêu cầu, điều này dẫn đến việc máy chủ có khả năng quá tải.
Nó cũng không đảm bảo rằng các yêu cầu từ cùng một người dùng sẽ đi đến cùng một máy chủ (không có tính bền vững phiên - session persistence), điều này có thể không đúng trong các ứng dụng cần ghi nhớ trạng thái người dùng (như giỏ hàng trực tuyến).
Khi nào sử dụng: Khi tất cả máy chủ có cấu hình giống nhau và các yêu cầu có mức độ phức tạp tương đương.
Biến thể: Weighted Round Robin (Round Robin có trọng số)
Để giải quyết vấn đề khả năng xử lý, biến thể này cho phép gán "trọng số" cho mỗi máy chủ, thường dựa trên sức mạnh của nó. Các máy chủ có trọng số cao hơn sẽ nhận được nhiều yêu cầu hơn theo tỷ lệ trọng số.
Least Connections (Ít kết nối nhất - Hàng đợi ngắn nhất)
Cơ chế:
Đây là một thuật toán động.
Nó kiểm tra xem máy chủ nào hiện có ít kết nối đang hoạt động nhất và gửi yêu cầu đến mới đến máy chủ đó (như việc chọn hàng thanh toán đang có ít người nhất tại cửa hàng tạp hóa).
Ưu điểm:
- Thông minh hơn Round Robin vì nó xem xét tải hiện tại trên mỗi máy chủ (ước tính bằng số lượng kết nối). Điều này hoạt động tốt khi thời gian kết nối thay đổi đáng kể, hoặc khi một số kết nối là "bền vững" (duy trì mở trong một thời gian dài), vì nó ngăn chặn việc dồn các yêu cầu mới vào các máy chủ đã bận rộn với các tác vụ dài.
Nhược điểm:
Nó giả định rằng mọi kết nối yêu cầu lượng sức mạnh xử lý gần như bằng nhau từ máy chủ, điều này có thể không đúng.
Tăng thêm chi phí tính toán do LB cần phải theo dõi số lượng kết nối đến từng máy chủ.
Biến thể: Weighted Least Connections (Ít kết nối nhất có trọng số): Tương tự như Weighted Round Robin, biến thể này kết hợp logic Least Connections với trọng số máy chủ. Nó gửi yêu cầu đến máy chủ có ít kết nối nhất tương đối với dung lượng được gán của nó.
Least Response Time (Thời gian phản hồi thấp nhất - Dịch vụ nhanh nhất)
Cơ chế:
* Đây là một thuật toán động khác.
* Gửi yêu cầu mới đến máy chủ có thời gian phản hồi nhanh nhất (Dựa trên thời gian trung bình mà một máy chủ cần để phản hồi các yêu cầu gần đây, hoặc có thể kết hợp cả thời gian phản hồi với số lượng kết nối đang hoạt động).
Ưu điểm:
Giảm thiểu thời gian chờ đợi cho người dùng.
Thích ứng động với hiệu suất thời gian thực của từng máy chủ.
Nhược điểm:
- Phức tạp và tốn thêm chi phí đáng kể do LB phải liên tục theo dõi thời gian phản hồi của máy chủ.
Hash-Based (Phân công nhất quán - Dựa trên Băm)
Cơ chế: Thuật toán này sử dụng thông tin cụ thể từ yêu cầu đến – chẳng hạn như địa chỉ IP của máy khách, cookie hoặc URL – để tính toán một giá trị duy nhất gọi là "mã băm" (hash). Giá trị băm này sau đó được sử dụng để xác định một cách nhất quán máy chủ nào sẽ xử lý yêu cầu. Miễn là thông tin đầu vào (ví dụ: IP của máy khách) không thay đổi, giá trị băm sẽ giống nhau và yêu cầu sẽ luôn được gửi đến cùng một máy chủ.
Ưu điểm:
- Tính bền vững phiên (session persistence) hay tính "dính" (stickiness).:Nó đảm bảo rằng tất cả các yêu cầu từ một người dùng cụ thể (được xác định bằng IP, cookie, v.v.) luôn đi đến cùng một máy chủ. Điều này rất quan trọng đối với các ứng dụng "có trạng thái" (stateful) cần ghi nhớ thông tin về phiên của người dùng, như các mặt hàng trong giỏ hàng trực tuyến hoặc trạng thái đăng nhập. Nó cũng có thể giúp kết nối lại người dùng với cùng một máy chủ nếu kết nối của họ tạm thời bị rớt.
Nhược điểm:
Có thể dẫn đến phân phối tải không đồng đều nếu một số đầu vào băm (như một số địa chỉ IP nhất định hoặc các URL phổ biến) tạo ra lưu lượng truy cập nhiều hơn đáng kể so với các đầu vào khác.
Ngoài ra, nếu một máy chủ được nhắm mục tiêu bởi hàm băm bị lỗi, tất cả người dùng hiện đang "dính" vào máy chủ đó sẽ bị ảnh hưởng cho đến khi bộ cân bằng tải nhận ra lỗi và có khả năng băm lại chúng vào một máy chủ khác.
Các loại cụ thể:
IP Hash: Một phương pháp dựa trên băm rất phổ biến, trong đó hàm băm được tính toán bằng địa chỉ IP nguồn của máy khách (và đôi khi cả địa chỉ IP đích).
URL Hash: Việc băm dựa trên URL được yêu cầu. Điều này đặc biệt hữu ích để cân bằng tải các máy chủ proxy bộ nhớ đệm (caching proxy servers), đảm bảo các yêu cầu cho cùng một nội dung luôn đi đến cùng một máy chủ bộ nhớ đệm, tối đa hóa hiệu quả bộ nhớ đệm.
Random with 2 Choices (Chọn ngẫu nhiên thông minh)
Cơ chế: Thuật toán này cố gắng tạo sự cân bằng sự đơn giản và thông minh. Thay vì kiểm tra tất cả các máy chủ (có thể chậm với nhiều máy chủ), nó chọn ngẫu nhiên hai máy chủ từ nhóm. Sau đó, nó áp dụng một quy tắc đơn giản (như Least Connections hoặc Least Response Time) để chọn máy chủ tốt hơn trong số hai máy chủ được chọn để gửi yêu cầu đến. Điều này dựa trên khái niệm gọi là "Sức mạnh của Hai lựa chọn" (Power of Two Choices).
Tưởng tượng: Hãy tưởng tượng bạn cần chọn hàng thanh toán ngắn nhất, nhưng cửa hàng rất lớn. Thay vì đi vòng quanh và kiểm tra từng hàng (mất thời gian), bạn nhanh chóng liếc nhìn hai hàng gần đó được chọn ngẫu nhiên và chỉ chọn hàng ngắn hơn trong số hai hàng đó. Bạn có thể không tìm thấy hàng ngắn nhất trong toàn bộ cửa hàng, nhưng bạn có thể nhanh chóng tránh chọn phải một hàng dài.
Ưu điểm:
It tốn kém về mặt tính toán hơn so với các thuật toán cần đánh giá tất cả các máy chủ, đặc biệt khi có nhiều LB hoạt động độc lập (nó giúp tránh "hành vi bầy đàn" nơi tất cả các bộ cân bằng tải có thể đồng thời quyết định cùng một máy chủ là "tốt nhất" và làm quá tải nó).
Cung cấp một sự cân bằng tốt giữa tính ngẫu nhiên của các thuật toán đơn giản và nhận thức về tải của các thuật toán phức tạp hơn.
Nhược điểm:
- Không đảm bảo chọn được máy chủ tốt nhất tuyệt đối hiện có, chỉ là máy chủ tốt hơn trong hai lựa chọn ngẫu nhiên.
Việc chọn thuật toán phù hợp liên quan đến sự đánh đổi. Các phương pháp đơn giản hơn như Round Robin dễ dàng và có chi phí thấp nhưng không phản ứng với điều kiện máy chủ. Các phương pháp động, thông minh hơn như Least Connections hoặc Least Response Time thích ứng tốt hơn với các điều kiện thực tế nhưng yêu cầu bộ cân bằng tải phải làm nhiều việc hơn – theo dõi kết nối, đo thời gian phản hồi, v.v., gây tiêu tốn tài nguyên. Các phương pháp dựa trên hàm băm cung cấp tính bền vững phiên thiết yếu cho một số ứng dụng nhất định nhưng có thể dẫn đến tải không đồng đều. Random with 2 Choices cung cấp một sự cân bằng thực dụng, đặc biệt đối với các hệ thống quy mô lớn.
Cuối cùng, thuật toán "tốt nhất" phụ thuộc rất nhiều vào nhu cầu cụ thể của ứng dụng được cân bằng tải: Nó có cần tính bền vững phiên không? Các máy chủ có mạnh ngang nhau không? Khối lượng công việc trên mỗi yêu cầu thay đổi như thế nào?.
Phần 3: Các Lớp Cân bằng tải
Bạn có thể nghe mọi người nói về cân bằng tải "Lớp 4" (Layer 4) hoặc "Lớp 7" (Layer 7). Những "lớp" này có nghĩa là gì? Để hiểu điều này, chúng ta cần xem xét nhanh cách giao tiếp mạng thường được khái niệm hóa.
3.1. Sơ lược về các Lớp Mạng (Mô hình OSI Giải thích Đơn giản)
Hãy tưởng tượng việc chế tạo một cỗ máy phức tạp như ô tô. Bạn không chỉ ném tất cả các bộ phận lại với nhau cùng một lúc. Thay vào đó, các kỹ sư chia quy trình thành các hệ thống hoặc lớp logic: động cơ, hộp số, hệ thống điện, thân xe, v.v. Mỗi lớp có một công việc cụ thể và tương tác với các lớp bên cạnh nó theo một cách xác định.
Mạng máy tính sử dụng một cách tiếp cận phân lớp tương tự để quản lý sự phức tạp của giao tiếp. Mô hình Kết nối Hệ thống Mở (Open Systems Interconnection - OSI) là một khung khái niệm chia giao tiếp mạng thành bảy lớp riêng biệt. Mặc dù internet hiện đại không tuân thủ nghiêm ngặt mô hình này ở mọi chi tiết, các khái niệm vẫn cực kỳ hữu ích để hiểu cách các phần khác nhau của quy trình giao tiếp hoạt động. Đối với cân bằng tải, chúng ta chủ yếu quan tâm đến hai lớp: Lớp 4 và Lớp 7.
Lớp 4: Lớp Giao vận (The Transport Layer - Dịch vụ Giao hàng Đáng tin cậy)
Hãy coi Lớp 4 như dịch vụ bưu chính hoặc một người chuyển phát đáng tin cậy cho dữ liệu của bạn. Công việc chính của nó là quản lý cuộc hội thoại và truyền dữ liệu giữa hai ứng dụng cụ thể chạy trên các máy tính khác nhau (giao tiếp đầu cuối - end-to-end).
Nó lấy các khối dữ liệu lớn hơn từ các lớp trên nó và chia chúng thành các phần nhỏ hơn, dễ quản lý gọi là các đoạn (segments) để truyền đi. Ở đầu nhận, nó tập hợp lại các đoạn này thành dữ liệu gốc, đảm bảo chúng đến đúng thứ tự.
Nó xử lý kiểm soát luồng (flow control), đảm bảo người gửi không làm quá tải người nhận bằng dữ liệu quá nhanh.
Nó thực hiện kiểm soát lỗi cơ bản, phát hiện các đoạn bị mất hoặc bị hỏng và có khả năng yêu cầu truyền lại.
Thông tin chính mà Lớp 4 làm việc bao gồm Số cổng (Port Numbers). Hãy coi địa chỉ IP (được xử lý bởi Lớp 3, Lớp Mạng) là địa chỉ đường của một tòa nhà chung cư, và số cổng là số căn hộ cụ thể cho ứng dụng sống ở đó.
Hai giao thức (ngôn ngữ) quan trọng nhất ở Lớp 4 là TCP (Transmission Control Protocol - Giao thức Điều khiển Truyền vận), cung cấp việc giao hàng đáng tin cậy, có thứ tự và được kiểm tra lỗi (như thư bảo đảm), và UDP (User Datagram Protocol - Giao thức Datagram Người dùng), nhanh hơn nhưng kém tin cậy hơn, không đảm bảo việc giao hàng hoặc thứ tự (như gửi bưu thiếp).
Lớp 7: Lớp Ứng dụng (The Application Layer - Nơi Bạn Tương tác)
Đây là lớp trên cùng, lớp gần nhất với người dùng cuối. Đó là nơi các ứng dụng bạn sử dụng – trình duyệt web (Chrome, Firefox), ứng dụng email (Outlook, Gmail), chương trình truyền tệp – tương tác với mạng.
Lớp 7 xử lý nội dung thực tế và ý nghĩa của giao tiếp. Nó sử dụng các giao thức dành riêng cho ứng dụng để cấu trúc dữ liệu.
Các giao thức Lớp 7 phổ biến bao gồm:
HTTP (Hypertext Transfer Protocol): Nền tảng của World Wide Web, được trình duyệt sử dụng để yêu cầu và hiển thị các trang web.
HTTPS (HTTP Secure): HTTP với mã hóa (SSL/TLS).
SMTP (Simple Mail Transfer Protocol): Để gửi email.
DNS (Domain Name System): Dịch tên trang web mà con người đọc được (như www.google.com) thành địa chỉ IP mà máy tính đọc được.
FTP (File Transfer Protocol): Để truyền tệp.
Lớp 7 hiểu những thứ như URL (địa chỉ web), tiêu đề HTTP (HTTP headers - thông tin bổ sung được gửi cùng với yêu cầu/phản hồi, như loại trình duyệt hoặc tùy chọn ngôn ngữ) và cookie (các mẩu dữ liệu nhỏ mà trang web lưu trữ trong trình duyệt của bạn để ghi nhớ bạn).
Hiểu các lớp này giúp giải thích các khả năng khác nhau của bộ cân bằng tải Lớp 4 và Lớp 7.
3.2. Cân bằng tải Lớp 4: Bộ điều hướng Gói tin Tốc độ cao
Bộ cân bằng tải Lớp 4 (L4 LB) hoạt động ở Lớp Giao vận (Transport Layer). Nó đưa ra quyết định định tuyến chỉ dựa trên thông tin có sẵn ở lớp này và lớp bên dưới nó (Lớp 3, Lớp Mạng):
Địa chỉ IP nguồn (Nơi yêu cầu đến từ)
Địa chỉ IP đích (Nơi yêu cầu đang đi đến – ban đầu là địa chỉ của LB)
Số cổng nguồn
Số cổng đích (Ứng dụng mà yêu cầu dành cho, ví dụ: cổng 80 cho HTTP, cổng 443 cho HTTPS)
Loại giao thức (TCP hoặc UDP)
Quan trọng là bộ cân bằng tải L4 không kiểm tra nội dung dữ liệu thực tế bên trong các gói tin. Nó coi mỗi gói tin như một phong bì được niêm phong, chỉ nhìn vào thông tin địa chỉ bên ngoài.
Cách thức hoạt động & Biên dịch địa chỉ mạng (Network Address Translation - NAT):
Thông thường, LB L4 được gán một địa chỉ IP công cộng mà máy khách kết nối đến. Khi một máy khách gửi yêu cầu (ví dụ: để truy cập một trang web) đến địa chỉ IP của bộ cân bằng tải và một cổng cụ thể, điều sau xảy ra:
Bộ cân bằng tải L4 nhận (các) gói tin đến.
Nó chọn một máy chủ từ nhóm của mình bằng một trong các thuật toán chúng ta đã thảo luận.
Sau đó, nó thực hiện Biên dịch Địa chỉ Mạng (Network Address Translation - NAT) trước khi chuyển tiếp gói tin đến máy chủ đã chọn.
Ví dụ: Máy chủ trả lời với nguồn 172.16.0.2. Load Balancer đổi thành 203.0.113.1 để người dùng nghĩ rằng họ đang giao tiếp trực tiếp với Load Balancer.
Hãy tưởng tượng một công ty lớn với hàng trăm nhân viên, mỗi người có số máy nội bộ riêng (giống như địa chỉ IP riêng). Tuy nhiên, công ty có thể chỉ có một số điện thoại công cộng chính (một địa chỉ IP công cộng).
Khi ai đó từ bên ngoài gọi đến số chính (IP công cộng) và hỏi một nhân viên, lễ tân (thiết bị NAT, trong trường hợp của chúng ta là L4 LB) sẽ kết nối cuộc gọi đến số máy nội bộ chính xác (IP riêng).
Khi một nhân viên thực hiện cuộc gọi ra ngoài, ID người gọi mà bên ngoài nhìn thấy chính là số công ty chính (IP công cộng), chứ không phải số máy trực tiếp của nhân viên.
NAT được phát minh chủ yếu để bảo tồn nguồn cung cấp địa chỉ IPv4 public có hạn, cho phép nhiều thiết bị trên mạng riêng (sử dụng các địa chỉ như 192.168.x.x, 10.x.x.x không phải là duy nhất trên internet toàn cầu) chia sẻ một địa chỉ IP công cộng duy nhất để truy cập internet. Nó cũng thêm một lớp bảo mật cơ bản bằng cách ẩn cấu trúc mạng nội bộ.
Trong bối cảnh bộ cân bằng tải L4 sử dụng NAT:
Yêu cầu đến: LB thay đổi địa chỉ IP đích trong tiêu đề gói tin từ IP công cộng của chính nó thành địa chỉ IP riêng của máy chủ được chọn.
Phản hồi đi: Khi máy chủ gửi phản hồi trở lại, LB chặn nó và thay đổi địa chỉ IP nguồn từ IP riêng của máy chủ trở lại IP công cộng của LB trước khi gửi cho máy khách.
Đôi khi, số cổng cũng được biên dịch trong một quy trình gọi là Biên dịch Địa chỉ Cổng (Port Address Translation - PAT) hoặc NAT Overload, cho phép nhiều thiết bị nội bộ chia sẻ cùng một IP công cộng bằng cách sử dụng các số cổng nguồn khác nhau cho các kết nối đi.
Điểm mấu chốt là bộ cân bằng tải L4 về cơ bản thiết lập một đường dẫn giao tiếp trực tiếp (mặc dù đã được biên dịch) giữa máy khách và máy chủ phụ trợ đã chọn trong suốt thời gian kết nối đó (phiên TCP). Nó chủ yếu hoạt động như một bộ chuyển tiếp gói tin tốc độ cao dựa trên thông tin địa chỉ ban đầu.
Ưu & Nhược điểm (Tại sao dùng Lớp 4 LB?)
Ưu điểm:
Tốc độ và Hiệu quả: Bởi vì L4 LB không cần nhìn vào bên trong các gói tin hoặc hiểu giao thức ứng dụng, chúng yêu cầu ít sức mạnh xử lý (CPU) hơn và có thể chuyển tiếp lưu lượng rất nhanh. Đây là một lợi thế lớn khi tài nguyên máy tính đắt đỏ và kém mạnh mẽ hơn.
Đơn giản: Thường đơn giản hơn để cấu hình và quản lý cho các tác vụ cân bằng tải cơ bản.
Không phụ thuộc giao thức (trong L4): Có thể cân bằng bất kỳ lưu lượng dựa trên TCP hoặc UDP nào mà không cần hiểu giao thức ứng dụng cụ thể chạy trên đó.
Bảo toàn mã hóa: Vì không kiểm tra nội dung, nó không cần giải mã lưu lượng được mã hóa SSL/TLS, duy trì mã hóa đầu cuối giữa máy khách và máy chủ (mặc dù bản thân LB có thể chấm dứt kết nối ở một số chế độ, chế độ NAT thường không yêu cầu giải mã).
Nhược điểm:
Thông minh hạn chế ("Ngốc nghếch"): Không thể đưa ra quyết định định tuyến dựa trên thông tin cấp ứng dụng như URL được yêu cầu, cookie người dùng hoặc tiêu đề HTTP. Điều này có nghĩa là nó không thể, ví dụ, gửi yêu cầu hình ảnh đến các máy chủ hình ảnh chuyên dụng và yêu cầu gọi API đến các máy chủ API.
Không tối ưu hóa nội dung: Không thể thực hiện các tối ưu hóa nhận biết ứng dụng như lưu trữ đệm nội dung web, nén dữ liệu hoặc xử lý thông minh các phiên người dùng ngoài việc băm IP cơ bản. Không thể thực hiện giảm tải SSL (xử lý mã hóa/giải mã thay cho máy chủ) trong chế độ NAT đơn giản.
Lợi thế hiệu suất giảm: Với CPU hiện đại, mạnh mẽ và phần mềm hiệu quả, lợi thế tốc độ thô của L4 so với L7 thường không đáng kể hoặc không liên quan đối với nhiều ứng dụng web phổ biến.
Tính bền vững phiên hạn chế: Các tùy chọn duy trì phiên thường bị giới hạn ở các phương pháp dựa trên địa chỉ IP (như IP Hash).
3.3. Cân bằng tải Lớp 7: Bộ định tuyến Nội dung Thông minh
Ngược lại, bộ cân bằng tải Lớp 7 (L7 LB) hoạt động ở Lớp Ứng dụng, lớp cao nhất trong mô hình OSI. Điều này có nghĩa là nó hiểu ngôn ngữ của ứng dụng, phổ biến nhất là HTTP cho lưu lượng web.
Cách thức hoạt động (Định tuyến dựa trên Nội dung):
Sự khác biệt chính là bộ cân bằng tải L7 hoạt động như một Reverse Proxy (thảo luận ở phần sau):
Chấm dứt Kết nối: Nó nhận yêu cầu kết nối từ máy khách và thiết lập kết nối TCP với máy khách. Về cơ bản, nó chấm dứt kết nối của máy khách tại bộ cân bằng tải. Nếu lưu lượng được mã hóa (HTTPS), L7 LB thường giải mã nó ở giai đoạn này (Chấm dứt SSL - SSL Termination).
Kiểm tra Nội dung: Bởi vì nó hiểu giao thức ứng dụng (như HTTP), nó có thể nhìn vào bên trong thông báo yêu cầu. Nó đọc dữ liệu cấp ứng dụng.
Đưa ra Quyết định Thông minh: Dựa trên nội dung đọc được, nó có thể đưa ra các quyết định định tuyến thông minh hơn nhiều bằng cách sử dụng các tiêu chí như:
Đường dẫn URL: Gửi yêu cầu
/images/logo.png
đến các máy chủ được phục vụ hình ảnh tĩnh, trong khi gửi yêu cầu/api/v1/users
đến máy chủ cho API.Tiêu đề HTTP: Định tuyến dựa trên tiêu đề
User-Agent
để gửi người dùng di động đến các máy chủ được tối ưu hóa cho di động, hoặc sử dụng tiêu đềAccept-Language
để định tuyến người dùng đến các máy chủ có nội dung bằng ngôn ngữ ưa thích của họ.Cookie: Đọc giá trị cookie để duy trì tính bền vững phiên (sticky sessions), đảm bảo người dùng tương tác nhất quán với cùng một máy chủ ngay cả khi địa chỉ IP của họ thay đổi.
Dữ liệu khác như tham số truy vấn trong URL hoặc phương thức HTTP (GET, POST, v.v.).
Thiết lập Kết nối Mới: Sau khi chọn máy chủ backend thích hợp, LB L7 thiết lập một kết nối TCP mới đến máy chủ đó. Sau đó, nó gửi yêu cầu của máy khách (có thể đã được sửa đổi) qua kết nối thứ hai này. (Các L7 LB hiệu quả thường tái sử dụng các kết nối nhàn rỗi hiện có đến các máy chủ backend bằng cách sử dụng HTTP keepalives để tránh chi phí thiết lập kết nối mới cho mọi yêu cầu).
Tưởng tượng: L7 LB như một phòng văn thư trong một tập đoàn lớn. Nó không chỉ nhìn vào địa chỉ tòa nhà đích (IP) và số phòng ban (cổng) trên phong bì như L4 LB. Nó mở phong bì (kiểm tra yêu cầu HTTP), đọc bản ghi bên trong để hiểu điều gì đang được yêu cầu và thực sự dành cho ai (ví dụ: "Yêu cầu Báo cáo Bán hàng", "Yêu cầu Tệp Hình ảnh" hay "Truy vấn Hỗ trợ Khách hàng"). Dựa trên nội dung này, nó định tuyến bản ghi đến bộ phận chuyên môn một cách chính xác (nhóm máy chủ cụ thể) bằng hệ thống thư nội bộ (một kết nối TCP mới). Nó thậm chí có thể tạo một bản sao của tài liệu được yêu cầu thường xuyên (lưu trữ đệm) hoặc dịch bản ghi nhớ sang định dạng khác nếu cần. Hoặc xem xét một lễ tân công ty thông minh, không chỉ kết nối bạn dựa trên số bạn đã gọi, mà còn hỏi mục đích cuộc gọi của bạn ("Bạn đang gọi cho bộ phận Bán hàng hay Hỗ trợ Kỹ thuật?") và sau đó định tuyến bạn đến nhóm thích hợp.
Ưu & Nhược điểm (Tại sao dùng Lớp 7 LB?)
Ưu điểm:
Định tuyến Thông minh, Linh hoạt: Cho phép định tuyến dựa trên nội dung hoặc ngữ cảnh thực tế của yêu cầu, điều này rất cần thiết cho các ứng dụng hiện đại, phức tạp, kiến trúc vi dịch vụ (microservices) và cung cấp trải nghiệm người dùng phù hợp.
Tối ưu hóa Nội dung & Cải thiện Hiệu suất:
Lưu trữ đệm (Caching): Có thể lưu trữ các bản sao của nội dung tĩnh được yêu cầu thường xuyên (hình ảnh, tệp CSS, JavaScript) và phục vụ trực tiếp cho máy khách mà không làm phiền các máy chủ phụ trợ. Điều này giảm đáng kể tải máy chủ và tăng tốc thời gian tải trang.
Nén (Compression): Có thể nén dữ liệu (như HTML, CSS, JS) bằng các thuật toán như gzip trước khi gửi cho máy khách, giảm lượng dữ liệu được truyền và tăng tốc độ phân phối, đặc biệt trên các kết nối chậm hơn.
Giảm tải/Chấm dứt SSL (SSL Offloading/Termination): Có thể xử lý tác vụ tốn kém về mặt tính toán là mã hóa (cho phản hồi) và giải mã (cho yêu cầu) lưu lượng SSL/TLS. Điều này giải phóng tài nguyên CPU của máy chủ phụ trợ để tập trung vào xử lý logic ứng dụng. Kết nối giữa L7 LB và các máy chủ phụ trợ sau đó có thể không được mã hóa (nếu mạng nội bộ an toàn), đơn giản hóa cấu hình máy chủ.
Đệm kết nối (Connection Buffering): Có thể quản lý kết nối với máy khách một cách hiệu quả, đặc biệt là các máy khách chậm, ngăn chúng chiếm giữ tài nguyên máy chủ phụ trợ một cách không cần thiết.
Tính bền vững phiên Nâng cao: Cung cấp các phương pháp mạnh mẽ hơn để đảm bảo "tính dính" bằng cách sử dụng dữ liệu cấp ứng dụng như cookie hoặc giá trị tiêu đề cụ thể, thường đáng tin cậy hơn là chỉ dựa vào địa chỉ IP của máy khách.
Cải thiện Bảo mật: Có thể kiểm tra lưu lượng ứng dụng để tìm các mối đe dọa và tích hợp với Tường lửa Ứng dụng Web (Web Application Firewalls - WAF) để cung cấp bảo mật sâu hơn chống lại các cuộc tấn công như SQL injection hoặc cross-site scripting (XSS). Cũng có thể viết lại tiêu đề hoặc URL HTTP để ẩn chi tiết nội bộ hoặc thực thi các chính sách bảo mật.
Hiệu suất Tổng thể Tốt hơn: Mặc dù bản thân L7 LB sử dụng nhiều CPU hơn L4 LB, sự kết hợp của định tuyến thông minh, lưu trữ đệm, nén, giảm tải SSL và quản lý kết nối thường dẫn đến hiệu suất ứng dụng và trải nghiệm người dùng tổng thể tốt hơn đáng kể.
Nhược điểm:
Tiêu thụ Tài nguyên Cao hơn (trên LB): Việc kiểm tra và xử lý nội dung lớp ứng dụng đòi hỏi nhiều sức mạnh CPU và bộ nhớ hơn trên chính bộ cân bằng tải so với L4. (Tuy nhiên, như đã lưu ý trước đó, phần cứng hiện đại thường làm cho điều này có thể quản lý được).
Độ phức tạp Tăng lên: Cấu hình và quản lý thường phức tạp hơn do phạm vi tính năng và tiêu chí ra quyết định rộng hơn.
Độ trễ Tiềm ẩn: Các bước xử lý bổ sung (giải mã, kiểm tra, quyết định định tuyến, mã hóa lại nếu cần) có thể gây ra một lượng nhỏ độ trễ so với việc chuyển tiếp trực tiếp của L4. Tuy nhiên, điều này thường được bù đắp bằng lợi ích hiệu suất từ việc lưu trữ đệm hoặc phản hồi phụ trợ nhanh hơn.
Yêu cầu Giải mã SSL/TLS để Kiểm tra: Để kiểm tra lưu lượng được mã hóa (HTTPS), bộ cân bằng tải L7 phải giải mã nó. Điều này có nghĩa là LB cần quyền truy cập vào khóa riêng và chứng chỉ SSL/TLS của trang web. Điều này phá vỡ khái niệm mã hóa đầu cuối giữa máy khách và máy chủ cuối cùng, và biến bộ cân bằng tải thành một điểm bảo mật quan trọng – nếu LB bị xâm phạm, lưu lượng được mã hóa có thể bị lộ.
(Lưu ý quan trọng: Như đã đề cập, các thiết bị thực hiện cân bằng tải Lớp 7 rất thường được gọi là Máy chủ Proxy Ngược (Reverse Proxy Servers). Chúng ta sẽ khám phá Reverse Proxy chi tiết hơn ngay sau đây).
3.4. Lớp 4 vs. Lớp 7: Chọn Công cụ Phù hợp
Vậy, khi nào bạn nên sử dụng loại cân bằng tải nào?
Lớp 4: Phù hợp nhất cho các tình huống bạn cần chuyển tiếp gói tin tốc độ rất cao, đơn giản và nội dung của lưu lượng không ảnh hưởng đến quyết định định tuyến. Ví dụ bao gồm cân bằng một số loại lưu lượng truyền trực tuyến dựa trên UDP, máy chủ DNS hoặc các giao thức TCP không phải HTTP khác mà việc kiểm tra cấp ứng dụng là không cần thiết hoặc không thể.
Lớp 7: Là lựa chọn ưu tiên cho hầu hết các ứng dụng web và API hiện đại (lưu lượng HTTP/HTTPS). Sử dụng L7 khi bạn cần:
Quyết định định tuyến dựa trên URL, tiêu đề, cookie hoặc dữ liệu ứng dụng khác.
Các tính năng như giảm tải SSL, lưu trữ đệm, nén.
Tính bền vững phiên nâng cao (sticky sessions).
Tích hợp với các công cụ bảo mật như WAF.
Cân bằng tải cho kiến trúc vi dịch vụ nơi các đường dẫn khác nhau cần đi đến các dịch vụ khác nhau.
Trong nhiều hệ thống hiện đại, phức tạp, việc sử dụng cả hai loại cân bằng tải là phổ biến. Ví dụ, một bộ cân bằng tải L4 có thể nằm ở rìa mạng để xử lý phân phối lưu lượng ban đầu ở tốc độ cao và cung cấp bảo vệ DDoS cơ bản, chuyển tiếp lưu lượng đến một tập hợp các bộ cân bằng tải/reverse proxy L7. Các thiết bị L7 này sau đó thực hiện định tuyến thông minh hơn, nhận biết ứng dụng, chấm dứt SSL, lưu trữ đệm và các chức năng khác gần hơn với các máy chủ ứng dụng.
Để giúp củng cố sự khác biệt, đây là bảng so sánh:
Bảng 1: So sánh Cân bằng tải Lớp 4 và Lớp 7
Tính năng | Bộ cân bằng tải Lớp 4 (L4 LB) | Bộ cân bằng tải Lớp 7 (L7 LB - Reverse Proxy) |
Lớp OSI | Lớp 4 (Giao vận) | Lớp 7 (Ứng dụng) |
Cơ sở Quyết định | Địa chỉ IP, Số cổng (TCP/UDP) | Tiêu đề HTTP, URL, Cookie, Nội dung ứng dụng |
Kiểm tra Gói tin | Không (Phong bì niêm phong) | Có (Mở phong bì, Đọc nội dung) |
Xử lý Kết nối | Chuyển tiếp gói tin (thường với NAT) | Proxy đầy đủ (Chấm dứt kết nối client, bắt đầu kết nối mới) |
Tính năng Chính | Tốc độ, Đơn giản, Không phụ thuộc giao thức (ở L4) | Định tuyến thông minh, Caching, Nén, Giảm tải SSL, Persistence nâng cao, Bảo mật (WAF) |
Hiệu suất (CPU của LB) | Sử dụng CPU thấp hơn | Sử dụng CPU cao hơn (nhưng thường hiệu suất ứng dụng tổng thể tốt hơn) |
Độ phức tạp | Thấp hơn | Cao hơn |
Trường hợp Sử dụng Phổ biến | Cân bằng TCP/UDP đơn giản, Chuyển tiếp gói tin tốc độ cao | Ứng dụng Web (HTTP/S), API, Microservices |
Phép loại suy | Cảnh sát giao thông cơ bản, Bưu tá (Chỉ địa chỉ) | Lễ tân thông minh, Người phân loại phòng văn thư (Nhận biết nội dung) |
3.5. Chuyển hướng nhanh: Bộ cân bằng tải vs. Cổng API (API Gateway)
Trước khi đến phần tiếp theo, hãy làm rõ mối quan hệ giữa Bộ cân bằng tải (đặc biệt là L7) và một thuật ngữ khác: Cổng API (API Gateway).
Cả Cổng API và Bộ cân bằng tải L7 thường hoạt động như các reverse proxy, nằm giữa máy khách và các dịch vụ phụ trợ, quản lý các yêu cầu đến. Tuy nhiên, chúng có mục tiêu chính khác nhau và thường cung cấp các bộ tính năng khác nhau.
Sự khác biệt Cốt lõi: Trọng tâm
Bộ cân bằng tải: Trọng tâm chính là phân phối lưu lượng trên nhiều phiên bản của cùng một ứng dụng hoặc dịch vụ. Mục tiêu chính của nó là đảm bảo tính sẵn sàng cao (không có điểm lỗi đơn lẻ) và khả năng mở rộng (xử lý nhiều tải hơn bằng cách thêm nhiều máy chủ giống hệt nhau). Hãy coi nó như việc làm cho một ứng dụng chạy đáng tin cậy và mở rộng theo chiều ngang.
Cổng API: Trọng tâm chính là quản lý API. Nó hoạt động như một điểm vào duy nhất, thống nhất cho các máy khách truy cập nhiều dịch vụ phụ trợ hoặc vi dịch vụ khác nhau. Mục tiêu của nó xoay quanh việc đơn giản hóa tương tác của máy khách, thực thi các chính sách bảo mật một cách nhất quán trên các dịch vụ đa dạng và quản lý vòng đời của API. Hãy coi nó như việc điều phối quyền truy cập vào một hệ thống phức tạp bao gồm nhiều phần.
So sánh Chức năng:
Định tuyến: Cả hai đều định tuyến lưu lượng. LB thường sử dụng các thuật toán để phân phối tải giữa các phiên bản giống hệt nhau. Cổng API thực hiện định tuyến phức tạp hơn, thường dựa trên đường dẫn URL hoặc tiêu đề, để hướng các yêu cầu đến các vi dịch vụ backend khác nhau (ví dụ:
/users
đi đến Dịch vụ Người dùng,/orders
đi đến Dịch vụ Đơn hàng).Bảo mật: Cả hai đều có thể cung cấp các tính năng bảo mật như chấm dứt SSL. Tuy nhiên, API Gateway thường cung cấp các cơ chế bảo mật phong phú hơn, tập trung vào API, bao gồm:
Xác thực & Ủy quyền (Authentication & Authorization): Xác minh danh tính máy khách (ví dụ: qua khóa API, token như JWT, OAuth) và kiểm tra xem họ có quyền truy cập điểm cuối API được yêu cầu hay không.
Giới hạn Tốc độ & Điều tiết (Rate Limiting & Throttling): Kiểm soát số lượng yêu cầu mà một máy khách có thể thực hiện trong một khoảng thời gian cụ thể để ngăn chặn lạm dụng hoặc quá tải.
Các Tính năng Khác của API Gateway:
Biến đổi Yêu cầu/Phản hồi (Request/Response Transformation): Sửa đổi yêu cầu trước khi chúng đến dịch vụ backend hoặc biến đổi phản hồi trước khi chúng trả về cho máy khách.
Biên dịch Giao thức (Protocol Translation): Biên dịch giữa các giao thức giao tiếp khác nhau (ví dụ: máy khách gửi yêu cầu REST, nhưng dịch vụ phụ trợ mong đợi gRPC).
Lưu trữ đệm API (API Caching): Lưu trữ đệm các phản hồi từ các lệnh gọi API phụ trợ.
Giám sát & Ghi nhật ký (Monitoring & Logging): Cung cấp các số liệu và nhật ký chi tiết liên quan cụ thể đến việc sử dụng API, độ trễ và lỗi.
Quản lý Vòng đời API (API Lifecycle Management): Các tính năng để quản lý phiên bản API, tạo tài liệu, cung cấp cổng thông tin cho nhà phát triển.
Tưởng tượng: Nếu Bộ cân bằng tải là cảnh sát giao thông điều phối hiệu quả nhiều làn xe hướng đến cùng một thành phố, thì API Gateway giống như người điều phối trung tâm tại một trung tâm vận chuyển lớn (như sân bay hoặc bến xe buýt lớn). Người điều phối (API Gateway) nhận yêu cầu từ hành khách (máy khách), xác minh vé và danh tính của họ (xác thực/ủy quyền), cho họ biết cổng hoặc số xe buýt cụ thể nào để đi đến các điểm đến khác nhau của họ (định tuyến đến các vi dịch vụ khác nhau), cung cấp thông tin và quản lý luồng tổng thể qua nhà ga.
Khi nào Sử dụng Loại nào:
Sử dụng Bộ cân bằng tải khi nhu cầu chính của bạn là phân phối lưu lượng trên nhiều phiên bản giống hệt nhau của một ứng dụng duy nhất để có khả năng mở rộng và tính sẵn sàng cao.
Sử dụng API Gateway khi bạn đang xây dựng một hệ thống với nhiều backend service (đặc biệt là microservices) và cần một điểm vào duy nhất để quản lý định tuyến, bảo mật, giới hạn tốc độ và các mối quan tâm cụ thể khác về API trên các dịch vụ đó.
Việc sử dụng chúng cùng nhau cũng rất phổ biến. Ví dụ, bạn có thể có một Cổng API quản lý các yêu cầu đến các vi dịch vụ khác nhau của mình, và sau đó đặt một Bộ cân bằng tải phía trước nhiều phiên bản của chính Cổng API đó để đảm bảo cổng này có tính sẵn sàng cao và khả năng mở rộng.
Sự trỗi dậy của kiến trúc microservices, nơi các ứng dụng được chia thành nhiều dịch vụ nhỏ hơn, độc lập, đã thúc đẩy đáng kể sự phát triển và áp dụng API Gateway. Việc quản lý bảo mật, định tuyến và khả năng quan sát trên hàng tá hoặc hàng trăm vi dịch vụ riêng lẻ là cực kỳ phức tạp. API Gateway nổi lên như một công cụ chuyên biệt để tập trung hóa việc quản lý này, trừu tượng hóa sự phức tạp của backend khỏi máy khách. Mặc dù Bộ cân bằng tải L7 đã phát triển để xử lý một số định tuyến dựa trên nội dung, API Gateway cung cấp một bộ tính năng toàn diện hơn được thiết kế đặc biệt để quản lý hợp đồng và vòng đời API. Sự lựa chọn phụ thuộc vào độ phức tạp của kiến trúc backend và nhu cầu quản lý cụ thể.
Đây là bảng tóm tắt các điểm khác biệt chính:
Tính năng | Bộ cân bằng tải (đặc biệt L7) | Cổng API (API Gateway) |
Mục tiêu chính | Phân phối lưu lượng (cho tính sẵn sàng/khả năng mở rộng) | Quản lý API (định tuyến, bảo mật, giới hạn tốc độ, v.v.) |
Lớp điển hình | Lớp 4 hoặc Lớp 7 | Lớp 7 |
Trọng tâm Định tuyến | Đến nhiều phiên bản của cùng một dịch vụ | Đến các dịch vụ/microservice backend khác nhau |
Tính năng Bảo mật Chính | Chấm dứt SSL, Lọc cơ bản (Có thể có WAF) | Xác thực, Ủy quyền, Xác thực Khóa API, Giới hạn Tốc độ, Điều tiết |
Tính năng Phổ biến Khác | Caching, Nén | Biến đổi Yêu cầu/Phản hồi, Biên dịch Giao thức, API Caching, Giám sát/Ghi nhật ký, Quản lý Phiên bản |
Trường hợp Sử dụng Chính | Mở rộng/Sẵn sàng cho một ứng dụng/dịch vụ đơn lẻ | Quản lý truy cập vào kiến trúc microservices |
Phần 4: Máy chủ Proxy
Chúng ta đã đề cập đến proxy, đặc biệt là khi thảo luận về Bộ cân bằng tải Lớp 7 và Cổng API (là các loại Reverse Proxy). Bây giờ hãy xem xét Máy chủ Proxy một cách rộng rãi hơn.
4.1. Máy chủ Proxy là gì? (Định nghĩa & Mục đích cốt lõi)
Máy chủ Proxy là một máy chủ hoặc ứng dụng trung gian hoạt động như một cổng kết nối giữa người dùng (client) và máy chủ đích (destination server). Khi một người dùng muốn yêu cầu một tài nguyên từ một máy chủ, thay vì kết nối trực tiếp, nó kết nối với máy chủ proxy. Máy chủ proxy sau đó chuyển tiếp yêu cầu đến máy chủ đích thay mặt cho máy khách, nhận phản hồi và sau đó gửi phản hồi đó trở lại cho máy khách ban đầu.
Hãy nghĩ về nó như:
Một người trung gian xử lý các giao dịch cho bạn.
Một lễ tân sàng lọc các cuộc gọi hoặc khách truy cập trước khi họ đến được người dự định.
Một dịch vụ chuyển tiếp thư: Bạn gửi yêu cầu đến địa chỉ của proxy; nó lấy "thư" (dữ liệu) từ đích và chuyển tiếp lại cho bạn.
Mục đích cốt lõi của việc sử dụng proxy thường là để đơn giản hóa hoặc kiểm soát quá trình giao tiếp, hoặc để thêm các lợi ích bổ sung mà không thể có được với kết nối trực tiếp. Những lợi ích này thường bao gồm tăng cường quyền riêng tư, cải thiện bảo mật, tăng hiệu suất thông qua bộ nhớ đệm hoặc kiểm soát quyền truy cập vào tài nguyên.
4.2. Lý do Phổ biến để Sử dụng Proxy:
Quyền riêng tư và Ẩn danh: Proxy giúp che dấu địa chỉ IP thực của người dùng. Khi proxy thực hiện yêu cầu đến máy chủ đích, máy chủ sẽ thấy địa chỉ IP của proxy, chứ không phải IP của người dùng ban đầu. Điều này giúp bảo vệ quyền riêng tư của người dùng và làm cho việc theo dõi hoạt động trực tuyến trở nên khó khăn hơn.
Bảo mật: Proxy có thể hoạt động như một hàng rào bảo mật. Chúng có thể lọc các phản hồi đến để xác định phần mềm độc hại hoặc nội dung nguy hiểm trước khi chuyển tiếp chúng đến người dùng. Chúng cũng có thể được cấu hình như tường lửa, chặn quyền truy cập vào các trang web nguy hiểm hoặc ngăn chặn truy cập trái phép vào mạng nội bộ.
Lưu trữ đệm (Caching): Proxy có thể hoạt động như một bộ nhớ đệm, lưu trữ các bản sao của các tài nguyên được truy cập thường xuyên. Khi một yêu cầu khác đến cho cùng một tài nguyên, proxy có thể phục vụ trực tiếp từ bộ nhớ đệm thay vì tìm nạp lại từ máy chủ gốc. Điều này tăng tốc đáng kể quyền truy cập cho người dùng và giảm tiêu thụ băng thông.
Kiểm soát Truy cập / Lọc Nội dung: Các tổ chức (như doanh nghiệp hoặc trường học) thường sử dụng proxy để kiểm soát và giám sát việc sử dụng internet. Họ có thể cấu hình proxy để chặn quyền truy cập vào các trang web cụ thể (ví dụ: mạng xã hội trong giờ làm việc) hoặc lọc ra các loại nội dung nhất định dựa trên từ khóa hoặc danh mục, thực thi các chính sách sử dụng chấp nhận được.
Vượt qua Hạn chế Địa lý (Geo-Restrictions): Một số nội dung trực tuyến bị hạn chế dựa trên vị trí địa lý của người dùng (được xác định bằng địa chỉ IP của họ). Bằng cách sử dụng một máy chủ proxy đặt tại một khu vực được phép, người dùng có thể làm cho yêu cầu của họ xuất hiện như thể bắt nguồn từ vị trí đó, do đó vượt qua hạn chế và truy cập nội dung.
4.3. Các Loại Proxy Chính:
Proxy có nhiều loại khác nhau, được phân loại dựa trên hướng của chúng (xuôi - ngược) và mức độ ẩn danh mà chúng cung cấp.
Proxy Xuôi (Forward Proxy) vs. Proxy Ngược (Reverse Proxy):
Sự phân biệt này là về việc proxy chủ yếu phục vụ ai:
Proxy Xuôi (Forward Proxy): Proxy này hoạt động thay mặt cho một hoặc nhiều máy khách (người dùng). Nó nằm giữa người dùng và internet rộng lớn, chặn các yêu cầu đi ra của họ và chuyển tiếp chúng đến các máy chủ đích khác nhau. Hãy coi nó là cổng kết nối của máy khách với internet. Các ứng dụng phổ biến bao gồm lọc quyền truy cập internet của nhân viên, lưu trữ đệm nội dung cho một nhóm người dùng, vượt qua các hạn chế địa lý cho người dùng hoặc che dấu địa chỉ IP của người dùng vì quyền riêng tư.
Proxy Ngược (Reverse Proxy): Proxy này hoạt động thay mặt cho một hoặc nhiều máy chủ. Nó nằm ở phía trước các máy chủ web/ứng dụng, chặn các yêu cầu đến từ máy khách trên internet và chuyển tiếp chúng đến (các) máy chủ thích hợp. Hãy coi nó là cổng kết nối hoặc phần công khai của máy chủ đối với internet. Các ứng dụng phổ biến bao gồm cân bằng tải trên nhiều máy chủ, cung cấp bảo mật cho máy chủ (ẩn IP của chúng, WAF), lưu trữ đệm nội dung máy chủ và xử lý mã hóa/giải mã SSL (tăng tốc SSL).
Tưởng tượng: Hãy tưởng tượng phòng văn thư nội bộ của một công ty. Khi nhân viên gửi thư ra thế giới bên ngoài, phòng văn thư hoạt động như một Proxy Xuôi (thu thập thư đi, có thể sàng lọc nó). Khi thư từ thế giới bên ngoài gửi đến công ty, phòng văn thư hoạt động như một Proxy Ngược (nhận tất cả thư đến, phân loại và chuyển đến bộ phận/máy chủ nội bộ chính xác).
Proxy Mở (Open Proxies) & Mức độ Ẩn danh:
"Proxy Mở" thường đề cập đến một máy chủ proxy có thể truy cập bởi bất kỳ ai sử dụng internet, thường miễn phí nhưng có khả năng không đáng tin cậy hoặc không an toàn. Proxy, đặc biệt là proxy xuôi, thường được phân loại theo mức độ ẩn danh mà chúng cung cấp cho máy khách:
Proxy Trong suốt (Transparent Proxy - Mức 3 - Ẩn danh Thấp nhất):
Cơ chế: Loại proxy này chặn yêu cầu của người dùng nhưng không cố gắng che giấu địa chỉ IP gốc của người dùng. Nó thường chuyển tiếp địa chỉ IP gốc trong một tiêu đề HTTP gọi là
X-Forwarded-For
. Nó cũng thường tự nhận mình là một máy chủ proxy, thường bằng cách thêm hoặc sửa đổi tiêu đềVia
. Máy chủ đích biết cả IP thực của người dùng và biết rằng có một proxy tham gia.Phép loại suy: Một người đưa thư giao một gói hàng và nói với người nhận, "Cái này từ John Doe ở 123 Main St, và tôi chỉ là người giao hàng."
Trường hợp sử dụng: Chủ yếu được sử dụng để lưu trữ đệm nội dung web nhằm tăng tốc độ truy cập cho người dùng trên mạng (như trường học hoặc văn phòng) hoặc để lọc nội dung. Không được sử dụng cho quyền riêng tư hoặc ẩn danh.
Proxy Ẩn danh (Anonymous Proxy - Mức 2 - Ẩn danh Trung bình):
Cơ chế: Proxy này che giấu địa chỉ IP gốc của người dùng khỏi máy chủ đích (nó không chuyển tiếp tiêu đề
X-Forwarded-For
hoặc thay thế IP của máy khách bằng IP của chính nó). Tuy nhiên, nó vẫn tự nhận mình là một máy chủ proxy, thường thông qua tiêu đềVia
. Máy chủ đích không biết IP thực của người dùng nhưng biết yêu cầu đến thông qua một proxy. (Đôi khi được gọi là "proxy làm sai lệch" - distorting proxies - nếu chúng gửi một IP máy khách giả, nhưng không phải là thật).Tưởng tượn: Một người đưa thư giao một gói hàng ẩn danh và nói với người nhận, "Tôi không thể cho bạn biết ai đã gửi cái này, nhưng để bạn biết, tôi là người giao hàng."
Trường hợp sử dụng: Cung cấp một mức độ ẩn danh cơ bản cho việc duyệt web thông thường hoặc vượt qua các hạn chế dựa trên IP đơn giản. Vì trang web đích biết rằng một proxy đang được sử dụng, nó vẫn có thể chọn chặn yêu cầu.
Proxy Tinh nhuệ / Ẩn danh Cao cấp (Elite / High Anonymity Proxy - Mức 1 - Ẩn danh Cao nhất):
Cơ chế: Proxy này cung cấp mức độ riêng tư cao nhất. Nó che giấu địa chỉ IP gốc của máy khách VÀ không tự nhận mình là một máy chủ proxy. Nó sửa đổi hoặc loại bỏ các tiêu đề như
X-Forwarded-For
vàVia
để yêu cầu xuất hiện với máy chủ đích như thể nó đến trực tiếp từ một người dùng thông thường, không phải thông qua proxy.Phép loại suy: Một điệp viên bí mật chuyển cứu nhạy cảm hoặc đảm bảo các hoạt động trực tuyến cực kỳ khó theo dõi.
Đây là bảng tóm tắt các mức độ ẩn danh này:
Tính năng | Proxy Trong suốt (Mức 3) | Proxy Ẩn danh (Mức 2) | Proxy Tinh nhuệ (Mức 1) |
Che giấu IP gốc? | Không | Có | Có |
Tự nhận là Proxy? | Có | Có | Không |
X-Forwarded-For | Chứa IP Client | Vắng mặt hoặc Chứa IP Proxy | Vắng mặt |
Tiêu đề Via | Thường có mặt | Thường có mặt | Vắng mặt |
Mục đích sử dụng chính | Caching, Lọc | Ẩn danh cơ bản, Vượt qua Geo-Restriction | Quyền riêng tư tối đa, Tránh né |
Mức độ Ẩn danh | Thấp (Không có) | Trung bình | Cao |
Proxy Ngược (Reverse Proxy): Vệ sĩ và Trợ lý của Máy chủ
Reverse Proxy nằm ở phía trước các máy chủ, chặn tất cả các yêu cầu đến của người dùng. Từ góc độ của người dùng, họ đang giao tiếp trực tiếp với Reverse Proxy, thường không biết về các máy chủ thực sự đằng sau nó.
Bộ cân bằng tải (đặc biệt là Lớp 7) và Cổng API thường được triển khai dưới dạng Proxy Ngược. Thuật ngữ "Proxy Ngược" mô tả mô hình kiến trúc, trong khi "Bộ cân bằng tải" và "Cổng API" mô tả các chức năng hoặc vai trò cụ thể mà một proxy ngược có thể thực hiện.
Reverse Proxy cung cấp một sự kết hợp mạnh mẽ các lợi ích cho các máy chủ mà chúng bảo vệ:
Cân bằng tải: Như chúng ta đã thảo luận, một proxy ngược có thể phân phối các yêu cầu đến trên một nhóm máy chủ bằng các thuật toán khác nhau. Điều này ngăn chặn bất kỳ máy chủ đơn lẻ nào bị quá tải, cải thiện thời gian phản hồi và tăng khả năng chịu lỗi.
Tăng cường Bảo mật:
Che giấu IP: Chúng ẩn địa chỉ IP và cấu trúc nội bộ của các máy chủ phụ trợ khỏi internet công cộng, khiến kẻ tấn công khó nhắm mục tiêu trực tiếp hơn.
Điểm Phòng thủ Duy nhất: Chúng cung cấp một điểm tập trung để triển khai các biện pháp bảo mật. Nhiều proxy ngược có thể lưu trữ hoặc tích hợp với Tường lửa Ứng dụng Web (WAF) để kiểm tra các yêu cầu đến tìm các cuộc tấn công web phổ biến (như SQL injection, XSS) và chặn lưu lượng độc hại trước khi nó đến máy chủ ứng dụng.
Giảm thiểu DDoS: Chúng có thể giúp hấp thụ hoặc lọc lưu lượng trong các cuộc tấn công Từ chối Dịch vụ Phân tán (DDoS), bảo vệ các máy chủ phụ trợ.
Mã hóa/Tăng tốc SSL (Giảm tải SSL): Proxy ngược có thể xử lý bắt tay SSL/TLS với máy khách, giải mã các yêu cầu HTTPS đến và mã hóa các phản hồi đi. Điều này giảm tải công việc tính toán nặng nề của mã hóa/giải mã khỏi các máy chủ backend, giải phóng tài nguyên của chúng để phục vụ nội dung ứng dụng nhanh hơn. Kết nối giữa proxy ngược và các máy chủ phụ trợ thường có thể là HTTP không mã hóa nếu mạng nội bộ an toàn, đơn giản hóa cấu hình backend.
Lưu trữ đệm Nội dung Tĩnh (Caching Static Content): Chúng có thể lưu trữ các bản sao của các tài sản tĩnh được yêu cầu thường xuyên (như hình ảnh, tệp CSS, tệp JavaScript) do các máy chủ phụ trợ cung cấp. Khi các yêu cầu tiếp theo cho các tài sản này đến, proxy ngược phục vụ chúng trực tiếp từ bộ nhớ đệm của nó, nhanh hơn nhiều và giảm tải đáng kể cho các máy chủ phụ trợ. Các máy chủ web phổ biến như Nginx thường được sử dụng làm proxy ngược đặc biệt vì khả năng lưu trữ đệm hiệu quả của chúng.
Nén (Compression): Proxy ngược có thể nén các phản hồi (ví dụ: sử dụng gzip) trước khi gửi chúng đến máy khách. Điều này làm giảm lượng dữ liệu được truyền qua mạng, dẫn đến thời gian tải nhanh hơn cho người dùng, đặc biệt trên các kết nối chậm hơn.
Giới hạn Tốc độ (Rate Limiting): Một số proxy ngược có thể được cấu hình để giới hạn số lượng yêu cầu được phép từ một địa chỉ IP máy khách duy nhất trong một khoảng thời gian nhất định, giúp ngăn chặn lạm dụng và đảm bảo sử dụng công bằng.
Điểm Truy cập Tập trung (Centralized Access Point): Cung cấp một điểm vào duy nhất, nhất quán cho máy khách, ngay cả khi các dịch vụ phụ trợ được trải rộng trên nhiều máy chủ hoặc tên miền, đơn giản hóa kiến trúc mạng tổng thể.
Điều thực sự mạnh mẽ về proxy ngược là một máy chủ proxy ngược duy nhất (như Nginx, HAProxy hoặc các dịch vụ của nhà cung cấp đám mây) thường thực hiện đồng thời nhiều chức năng này. Nó có thể đang xử lý chấm dứt SSL, cân bằng tải yêu cầu trên nhiều máy chủ, lưu trữ đệm tệp tĩnh, nén phản hồi và lọc lưu lượng thông qua WAF – tất cả cùng một lúc. Bởi vì nó nằm ở một điểm giao nhau quan trọng, chặn tất cả lưu lượng đến, nó có vị trí hoàn hảo để áp dụng các tối ưu hóa và biện pháp bảo mật khác nhau này. Điều này làm cho proxy ngược trở thành một thành phần cực kỳ linh hoạt và có giá trị trong cơ sở hạ tầng web hiện đại, gói gọn các chức năng thiết yếu vào một lớp có thể quản lý được.
Phần 5: Tổng kết
Chúng ta đã đi qua rất nhiều nội dung, khám phá vai trò thiết yếu của Bộ cân bằng tải và Máy chủ Proxy trong việc quản lý luồng lưu lượng trên internet và trong các mạng ứng dụng.
Để tóm tắt lại:
Bộ cân bằng tải là những người điều phối giao thông, chủ yếu tập trung vào việc phân phối hiệu quả các yêu cầu đến trên nhiều máy chủ. Mục tiêu chính của chúng là tăng cường tính sẵn sàng (giữ cho ứng dụng hoạt động ngay cả khi máy chủ bị lỗi), cho phép khả năng mở rộng (dễ dàng điều chỉnh dung lượng để đáp ứng nhu cầu) và cải thiện hiệu suất (ngăn chặn tắc nghẽn và giảm độ trễ). Chúng sử dụng các thuật toán khác nhau, từ Round Robin đơn giản đến các phương pháp thông minh hơn như Least Connections hoặc định tuyến dựa trên nội dung Lớp 7, để đạt được các mục tiêu này.
Máy chủ Proxy hoạt động như những người trung gian.
Proxy Xuôi hoạt động thay mặt cho máy khách, thường được sử dụng để lọc quyền truy cập của người dùng, lưu trữ đệm nội dung cho người dùng, tăng cường quyền riêng tư của người dùng hoặc vượt qua các hạn chế.
Proxy Ngược hoạt động thay mặt cho máy chủ, nằm ở phía trước chúng để quản lý các yêu cầu đến. Chúng là những "con ngựa thồ" của cơ sở hạ tầng web hiện đại, thường thực hiện đồng thời nhiều tác vụ quan trọng: cân bằng tải, tăng cường bảo mật, xử lý mã hóa SSL/TLS, lưu trữ đệm nội dung và nén dữ liệu. Bộ cân bằng tải Lớp 7 và Cổng API là các loại proxy ngược chuyên biệt.
Hiểu các thành phần này – cách chúng hoạt động, tại sao chúng được sử dụng và sự khác biệt giữa chúng (như L4 vs. L7 LB, hoặc LB vs. API Gateway, hoặc Proxy Xuôi vs. Proxy Ngược) – là nền tảng cho bất kỳ ai tham gia vào việc xây dựng, triển khai hoặc quản lý các trang web, API và ứng dụng ngày nay. Từ việc đảm bảo một trang web nhỏ vẫn trực tuyến trong thời gian tăng đột biến lưu lượng truy cập đến việc điều phối các kiến trúc vi dịch vụ phức tạp trên đám mây, những công cụ quản lý lưu lượng này là không thể thiếu
Subscribe to my newsletter
Read articles from Ha Ngoc Hieu directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
