1. Giới thiệu Gateway Load Balancer trong AWS.
Gateway Load Balancer trong AWS là một dịch vụ cân bằng tải mạng được thiết kế để phân phối lưu lượng truy cập đến ứng dụng chạy trong các mạng ảo riêng (VPCs) trên AWS. Nó cung cấp một cổng kết nối mạng trong suốt (transparent network gateway) và cho phép chia sẻ tài nguyên mạng chung giữa nhiều VPC và tài khoản AWS khác nhau. Gateway Load Balancer cũng hỗ trợ các tính năng bảo mật như phân tích lưu lượng và chặn các cuộc tấn công mạng.
Các tính năng chính của Gateway Load Balancer trong AWS:
- Triển khai, tỷ lệ và quản lý một bộ sưu tập các thiết bị ảo mạng bên thứ ba trên AWS. Ví dụ: Firewalls, Intrusion Detection and Prevention Systems, Deep Packet Inspection Systems, payload manipulation,…
- Hoạt động ở tầng mạng 3 (tầng mạng) – gói tin IP.
- Kết hợp các chức năng sau:
- Transparent Network Gateway – một lối vào/ra duy nhất cho tất cả lưu lượng.
- Bộ cân bằng tải – phân phối lưu lượng đến các thiết bị ảo mạng của bạn.
- Sử dụng giao thức GENEVE trên cổng 6081.
2. Target Groups.
Trong Gateway Load Balancer của AWS, Target Groups là một tập hợp các đích đến (targets) như các máy chủ ứng dụng hoặc các instance EC2 mà lưu lượng mạng sẽ được định tuyến đến thông qua Gateway Load Balancer. Target Groups cung cấp một cách để quản lý các tài nguyên đích đến và định nghĩa các quy tắc cân bằng tải để phân phối lưu lượng mạng cho các đích đến. Các Target Groups cũng cung cấp các tính năng bảo mật như chặn truy cập từ các địa chỉ IP không hợp lệ hoặc khai thác từ xa (remote exploitation) để bảo vệ các tài nguyên đích đến của bạn.
- EC2 instances (Amazon Elastic Compute Cloud instances) được sử dụng làm đích đến để nhận lưu lượng mạng được định tuyến từ Gateway Load Balancer. EC2 instances được chạy trong các mạng riêng ảo (VPCs) trên AWS và được đăng ký trong Target Groups để Gateway Load Balancer biết về sự tồn tại của chúng. Các EC2 instances này cần được cấu hình đúng và đảm bảo rằng chúng có thể xử lý lưu lượng mạng được định tuyến đến từ Gateway Load Balancer. Gateway Load Balancer sử dụng các thông tin từ Target Groups để quản lý và phân phối lưu lượng mạng đến các EC2 instances một cách thông minh, đảm bảo hiệu suất và tính sẵn sàng của ứng dụng của bạn.
- Load Balancer, IP Address (địa chỉ IP) phải là địa chỉ IP riêng tư (private IP) của EC2 instance, không thể sử dụng địa chỉ IP công khai (public IP). Điều này đảm bảo rằng lưu lượng mạng được định tuyến đến các EC2 instances thông qua Gateway Load Balancer chỉ diễn ra trong mạng riêng ảo (VPC) của bạn, giữ cho các tài nguyên của bạn an toàn và bảo mật. Nếu sử dụng địa chỉ IP công khai, lưu lượng mạng sẽ được định tuyến trực tiếp đến EC2 instances, không thông qua Gateway Load Balancer, làm giảm khả năng tự động phân phối tải và các tính năng bảo mật khác của Gateway Load Balancer.
3. Sticky Sessions (Session Affinity).
Sticky Sessions (Session Affinity) trong AWS cho phép phân phối lưu lượng mạng đến cùng một EC2 instance trong một khoảng thời gian nhất định để đảm bảo rằng cùng một khách hàng (client) luôn được định tuyến đến cùng một EC2 instance. Cơ chế này hoạt động bằng cách sử dụng “cookie” được gán cho khách hàng, cookie này có thể được cấu hình để hết hạn sau một khoảng thời gian nhất định mà bạn quy định. Sticky Sessions có thể được sử dụng để đảm bảo rằng khách hàng không bị mất dữ liệu phiên (session data) khi truy cập vào các EC2 instance khác nhau qua các phiên truy cập khác nhau.
Tuy nhiên, việc bật tính năng Sticky Sessions cũng có thể gây ra sự mất cân bằng về tải trên các EC2 instance vì nó sẽ làm giảm khả năng phân phối tải đều đến các EC2 instance. Tính năng Sticky Sessions hiệu quả với Classic Load Balancers và Application Load Balancers của AWS.
4. Các loại Cookie trong Sticky Sessions.
Sticky Sessions Cookie Names trong AWS được sử dụng để định cấu hình các loại cookie được sử dụng để bảo đảm tính nhất quán cho phiên truy cập của khách hàng. Các cookie này có thể được phân loại thành 3 loại: Application-based Cookies, Custom cookie và Duration-based Cookies.
- Application-based Cookies: đây là các cookie được tạo bởi ứng dụng của bạn, nó có thể chứa bất kỳ thuộc tính tùy chỉnh nào được yêu cầu bởi ứng dụng của bạn. Cookie này được tạo ra bởi các target và tên cookie phải được xác định cụ thể cho mỗi target group. Không được sử dụng các tên cookie được đặt tên sẵn AWSALB, AWSALBAPP hoặc AWSALBTG (được dành riêng cho ELB).
- Custom cookie là loại cookie được tạo ra bởi target và được sử dụng để hỗ trợ tính năng Sticky Sessions (Session Affinity) trong AWS. Cookie này có thể chứa bất kỳ thuộc tính tùy chỉnh nào được yêu cầu bởi ứng dụng của bạn. Tên cookie phải được xác định cụ thể cho mỗi target group. Tuy nhiên, không nên sử dụng các tên cookie đã được đặt tên sẵn như AWSALB, AWSALBAPP hoặc AWSALBTG, vì chúng được dành riêng cho Elastic Load Balancer (ELB). Việc sử dụng Custom cookie giúp đảm bảo tính nhất quán cho phiên truy cập của khách hàng và tránh tình trạng mất dữ liệu phiên.
- Application cookie là loại cookie được tạo ra bởi load balancer để hỗ trợ tính năng Sticky Sessions (Session Affinity) cho Application Load Balancer trong AWS. Cookie này có tên là AWSALBAPP. Khi Sticky Sessions được kích hoạt, load balancer sẽ ghi lại thông tin phiên của khách hàng và sau đó sử dụng cookie này để chỉ định phiên cho khách hàng trong các lần truy cập tiếp theo. Việc sử dụng Application cookie giúp đảm bảo tính nhất quán cho phiên truy cập của khách hàng và tránh tình trạng mất dữ liệu phiên.
- Duration-based Cookies là một loại cookie được tạo ra bởi load balancer trong AWS và được sử dụng để hỗ trợ tính năng Sticky Sessions (Session Affinity). Với loại cookie này, load balancer sẽ chỉ định một EC2 instance cụ thể cho khách hàng trong một khoảng thời gian nhất định (thường là vài phút), thay vì cho toàn bộ phiên làm việc của khách hàng.
- Các cookie này được đặt tên riêng cho từng loại load balancer:
- AWSALB: được sử dụng cho Application Load Balancer (ALB).
- AWSELB: được sử dụng cho Classic Load Balancer (CLB).
- Việc sử dụng Duration-based Cookies giúp đảm bảo tính nhất quán cho phiên truy cập của khách hàng trong một khoảng thời gian nhất định và tránh tình trạng mất dữ liệu phiên.
Việc định cấu hình các Sticky Sessions Cookie Names rất quan trọng để đảm bảo hiệu suất và tính sẵn sàng của ứng dụng của bạn, đặc biệt là khi nó liên quan đến quản lý phiên và phân phối tải.
Hãy quay lại bài Lab ở phần trước để chúng ta cùng review xíu nhé (Application Load Balancer và Network Load Balancers)
Kéo xuống dưới tại phần Stickiness, ở tuỳ chọn Stickiness Type chúng ta thấy có 2 loại cookie đó là Load balancer generated cookie (loại cookie do Load balancer tự tạo) và Application-based cookie (loại cookie dựa trên ứng dụng). Phần Stickiness duration là thời gian lưu giữ cookie mình để 7 ngày. Bấm Save changes để lưu lại thay đổi.
Khi bạn tải lại trang và bấm trình gỡ lỗi của trình duyệt, vào phần cookie bạn sẽ thấy thời gian hết hạn của bạn là 1 ngày. Vậy trong suốt thời gian 1 ngày khi chưa hết hạn, sẽ có 1 máy chủ cookie (có thể là 1 Instance nào đó) xử lý sessions cho bạn.
Được rồi, bây giờ mình sẽ trả lại trạng thái như cũ cho Sticky Sessions nhé.