I. Mô hình OSI (Open Systems Interconnection)

Mô hình OSI (Open Systems Interconnection) là một khung khái niệm được sử dụng để mô tả các chức năng của một hệ thống mạng. Mô hình OSI mô tả các chức năng tính toán thành một bộ quy tắc và yêu cầu chung để hỗ trợ khả năng tương tác giữa các sản phẩm và phần mềm khác nhau.

Trong mô hình OSI, giao tiếp giữa một hệ thống máy tính được chia thành bảy lớp trừu tượng khác nhau: Physical, Data Link, Network, Transport, Session, Presentation, and Application.

Layer 1 đến Layer 3 là các lớp phần cứng. Trong khi đó Layer 5 đến Layer 7  là những lớp phần mềm. Transport (Layer 4) là trung tâm của mô hình OSI.
Dưới đây là 7 lớp của mô hình OSI:

  • Layer 7 – Application: các giao thức ứng dụng như HTTP, SSH và SMTP
  • Layer 6 – Presentation: mã hoá ký tự như ASCII, UTF-8
  • Layer 5 – Session: thiết lập cơ chế truyền thông point-to-point
  • Layer 4 – Transport: Các giao thức truyền dữ liệu như TCP và UDP
  • Layer 3 – Network: các giao thức định tuyến mạng như IP và OSPF
  • Layer 2 – Data Link: các giao thức kết nối lớp vật lý với lớp mạng, chẳng hạn như Ethernet và ARP
  • Layer 1 – Physical: các thành phần vật lý như hệ thống dây cáp và Wi-Fi

Mỗi lớp trong mô hình OSI có các chức năng được xác định rõ ràng và các chức năng của mỗi lớp giao tiếp và tương tác với các lớp ngay bên trên và bên dưới nó, trừ khi lớp đó không có các lớp bên dưới hoặc bên trên.

II. Load Balancer

1. Tại sao lại cần xử lý Load Balancing

Load Balancing là quá trình phân phối lưu lượng mạng trên nhiều máy chủ. Điều này đảm bảo không có máy chủ nào có quá nhiều nhu cầu. Bằng cách trải đều công việc, cân bằng tải giúp cải thiện khả năng phản hồi. Các phương pháp cân bằng tải cũng làm tăng tính khả dụng của các ứng dụng và trang web cho người dùng.

Khi một máy chủ ứng dụng không khả dụng, Load Balancer sẽ hướng tất cả các yêu cầu mới đến các máy chủ khả dụng khác. Load Balancing có thể được cung cấp bởi các thiết bị phần cứng hoặc phần mềm. Các thiết bị phần cứng thường chạy phần mềm độc quyền được tối ưu hóa để chạy trên bộ xử lý tùy chỉnh. Khi lưu lượng truy cập tăng lên, nhà cung cấp chỉ cần thêm nhiều thiết bị Load Balancer hơn để xử lý khối lượng. Phần mềm cân bằng tải thường chạy trên phần cứng x86 tiêu chuẩn. Ngoài ra, cũng có thể cài đặt phần mềm trong môi trường đám mây như AWS EC2 giúp loại bỏ nhu cầu về thiết bị vật lý.

2. Load Balancing trên Layer 4 và Layer 7

Có hai loại Load Balancer chính: Layer 4Layer 7. Các loại Load Balancer này hoạt động và đưa ra quyết định dựa trên các yếu tố khác nhau.

Sự khác biệt giữa Load Balancing L4 và L7 là gì?

Load Balacing L4 hoạt động ở tầng Transport ở mô hình OSI cung cấp khả năng quản lý lưu lượng try cập ở lớp giao thức mạng (TCP/UDP), cung cấp lưu lượng truy cập với thông tin mạng hạn chế bằng thuật toán cân bằng tải (thuật toán Round Robin) và bằng cách tính toán máy chủ tốt nhất dựa trên ít kết nối nhất và thời gian phản hồi của máy chủ nhanh nhất.

Load Balacing L7 hoạt động ở tầng cao nhất trong mô hình OSI (Application). Do đó, nó đưa ra quyết định định tuyến dựa trên thông tin chi tiết hơn như nội dung thư, dữ liệu cookie, đặc điểm tiêu đề HTTP/HTTPS, loại dữ liệu (video, text, image, v.v.) và loại URL. Các giao thức DNS, FTP, HTTP và SMTP đều là các truy cập ở cấp Application. Nói cách khác, sự khác biệt giữa Load Balancing L4 và L7 là nguồn và loại thông tin mà bộ cân bằng tải có thể sử dụng để đưa ra quyết định.

III. HAProxy

HAProxy có thể linh hoạt chuyển đổi sang các chế độ TCP, tương ứng với Layer 4 hoặc chế độ HTTP, tương ứng với Layer 7, bằng cách đặt chỉ thị chế độ của nó trong cấu hình HAProxy. Chế độ bạn chọn sẽ thay đổi các tính năng có sẵn cho bạn. Đó là điều làm cho mô hình OSI trở nên hữu ích. Nó phân loại phần mềm theo vị trí phù hợp trong tầng mạng và cho bạn biết bạn có thể mong đợi chức năng gì.

1. Layer 4 Proxy Mode

Cấu hình HAProxy thành proxy Layer 4 bằng cách đặt mode  thành tcp, như được hiển thị trong đoạn cấu hình sau:

defaults
    # mode is inherited by sections that follow
    mode tcp

frontend db
    # receives traffic from clients
    bind :3306
    default_backend databases

backend databases
    # relays the client messages to servers
    server db1 192.168.0.10:3306
    server db2 192.168.0.11:3306

Layer 4 của mô hình OSI là tầng Transport. Nó chịu trách nhiệm truyền dữ liệu qua mạng. Một trong những giao thức phổ biến nhất được sử dụng ở đây là Transmission Control Protocol  (TCP). TCP cắt một message thành các phân đoạn và sau đó gửi chúng từ máy tính nguồn đến đích. Máy tính gửi và nhận có thể có nhiều cuộc hội thoại diễn ra với nhiều máy tính cùng một lúc. Vì lý do đó, mỗi luồng giao tiếp được gán một tổ hợp địa chỉ IP và số cổng duy nhất để các cuộc hội thoại đó có thể diễn ra song song mà không xung đột.

vd: 1 luồng kết nối sẽ trông như thế này

[root@aws01 ~]$ sudo netstat 
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0    164 aws01:ssh               ********:53912    ESTABLISHED

Proxy ở lớp này nhẹ và nhanh vì nó chỉ liên quan đến vận chuyển. HAProxy không đọc các messages, nó chỉ đóng vai trò chuyển phát nhanh các messages qua lại. Tuy nhiên, nó vẫn có thể bổ sung rất nhiều lợi ích bao gồm kiểm tra tình trạng máy chủ, ẩn mạng nội bộ của bạn khỏi Internet công cộng,  đưa các kết nối vào hàng đợi để tránh quá tải máy chủ và giới hạn tốc độ kết nối. Nó hoạt động tốt cho các Load Balancer giao tiếp qua TCP, chẳng hạn như lưu lượng truy cập cơ sở dữ liệu đến các máy chủ MySQL, Postgres và Redis,...

2. Layer 7 Proxy Mode

Cấu hình HAProxy thành proxy Layer 7 bằng cách đặt http  thành tcp, như được hiển thị trong đoạn cấu hình sau:

defaults
    # mode is inherited by sections that follow
    mode http

frontend www
    # receives traffic from clients
    bind :80
    default_backend web_servers

backend web_servers
    # relays the client messages to servers
    server s1 192.168.0.10:3000
    server s2 192.168.0.11:3000

Layer 7 là lớp Aplication, nhưng nó không có nghĩa là ứng dụng theo nghĩa thông thường. Nó đề cập đến giao thức cơ bản mà một ứng dụng sử dụng, chẳng hạn như cách máy chủ web sử dụng HTTP để đóng gói một trang web. Ở lớp này, HAProxy có thể đưa ra quyết định định tuyến dựa trên bất kỳ chi tiết nào của thông báo được xác định trong lớp 4 đến lớp 7. Điều đó bao gồm tất cả những điều sau:

  • Địa chỉ IP nguồn, IP đích và cổng
  • SSL handshake metadata
  • HTTP metadata bao gồm header, cookie, URL và method

Trong chế độ này, bạn nhận được những gì bạn có với chế độ tcp, nhưng còn hơn thế nữa. Bạn có thể chọn nhóm máy chủ dựa trên thông tin tìm thấy trong quá trình SSL handshake, chẳng hạn như các trường SNI. Hoặc bạn có thể định tuyến đến một nhóm máy chủ cụ thể dựa trên đường dẫn URL được yêu cầu. Hoặc bạn có thể định tuyến dựa trên tiêu đề HTTP nhận được, chẳng hạn như tiêu đề máy chủ hoặc cookie. HAProxy có thể đưa ra quyết định thông minh hơn trong chế độ này, nhưng nó vẫn hoạt động với tốc độ cực nhanh. Chế độ này lý tưởng cho các ứng dụng web cân bằng tải.

IV. Các bài toán khác

V. Tham khảo