Thursday, November 21, 2024

[AWS] Application Load Balancer (ALB)

-

Application Load Balancer (ALB) là một dịch vụ cân bằng tải của Amazon Web Services (AWS) được sử dụng để phân phối lưu lượng truy cập đến các ứng dụng và microservices chạy trên AWS. ALB hỗ trợ nhiều loại giao thức và cung cấp tính năng phân phối tải dựa trên nội dung và định tuyến dựa trên bộ định tuyến của ứng dụng. Nó còn cung cấp các tính năng bảo mật như xác thực và giám sát. ALB là phiên bản thứ hai của dịch vụ cân bằng tải của AWS, được thiết kế để cung cấp tính năng mạnh mẽ hơn so với phiên bản đầu tiên (Classic Load Balancer).

– HTTP Based Traffic.

Đây là một loại dịch vụ cân bằng tải (load balancer) ở tầng 7 của mô hình OSI (tầng HTTP), được sử dụng để phân phối lưu lượng truy cập đến nhiều ứng dụng HTTP khác nhau chạy trên nhiều máy chủ khác nhau (target groups). Nó cũng có khả năng cân bằng tải cho nhiều ứng dụng chạy trên cùng một máy chủ, chẳng hạn như các ứng dụng đó chạy trong các container khác nhau. ALB hỗ trợ các giao thức HTTP/2 và WebSocket, cũng như các tính năng redirect (chuyển hướng) từ HTTP sang HTTPS.

Application Load Balancer có thể định tuyến (routing) lưu lượng truy cập đến các nhóm đích khác nhau, bao gồm định tuyến dựa trên đường dẫn (path) trong URL (ví dụ: example.com/users & example.com/posts), định tuyến dựa trên tên miền (hostname) trong URL (ví dụ: one.example.com & other.example.com), định tuyến dựa trên các tham số truy vấn (query string) và tiêu đề (header) của HTTP request (ví dụ: example.com/users?id=123&order=false).

ALB là sự lựa chọn tốt cho các ứng dụng dựa trên microservices và container (như Docker và Amazon ECS). Nó còn có tính năng ánh xạ cổng (port mapping) để chuyển hướng lưu lượng truy cập đến các cổng động trong Amazon ECS.

So với Classic Load Balancer, ALB cung cấp nhiều tính năng hơn và giúp giảm độ phức tạp của cấu hình, vì chỉ cần sử dụng một ALB cho mỗi ứng dụng thay vì phải sử dụng nhiều Classic Load Balancer.

– Target group.

Các target group (tập hợp các máy chủ ứng dụng) được ALB hỗ trợ bao gồm:

  • EC2 instances: Các máy chủ ứng dụng chạy trên các máy ảo EC2 instances, có thể được quản lý bằng một Auto Scaling Group, và chạy trên giao thức HTTP.
  • ECS tasks: Các nhiệm vụ ứng dụng chạy trên dịch vụ quản lý container của AWS là ECS, và được quản lý bởi chính ECS. Đây cũng là các máy chủ ứng dụng chạy trên giao thức HTTP.
  • Lambda functions: Các hàm được triển khai bằng dịch vụ Lambda của AWS có thể được gọi thông qua HTTP request, được chuyển đổi thành một sự kiện JSON.

Trong ALB, các địa chỉ IP của các máy chủ ứng dụng phải là các địa chỉ IP riêng tư.

ALB cung cấp tính năng định tuyến (routing) đến nhiều target group, bao gồm cả target group chứa các máy chủ ứng dụng khác nhau. Việc định tuyến có thể được cấu hình dựa trên các tiêu chí khác nhau, ví dụ như đường dẫn, tiêu đề, tên miền, tham số truy vấn của HTTP request.

Các bộ kiểm tra sức khỏe (health checks) được thực hiện trên mỗi target group, giúp đảm bảo rằng các máy chủ ứng dụng trong target group đang hoạt động đúng cách.

– Query Strings/Parameters Routing.

Query String/Parameters Routing là một tính năng của Application Load Balancer (ALB) của AWS, cho phép định tuyến các yêu cầu HTTP dựa trên các tham số truy vấn của URL (query string).

Khi sử dụng tính năng này, người dùng có thể định tuyến yêu cầu HTTP đến các target group khác nhau dựa trên các tham số truy vấn trong URL. Ví dụ, người dùng có thể định tuyến yêu cầu HTTP đến các máy chủ ứng dụng khác nhau dựa trên tham số truy vấn như ID của sản phẩm hoặc người dùng đang đăng nhập.

Để sử dụng tính năng này, người dùng cần cấu hình một rule trong bảng điều khiển của ALB, sử dụng các trường như “query string” hoặc “parameter” để định tuyến các yêu cầu đến target group tương ứng. Khi yêu cầu HTTP được nhận, ALB sẽ so khớp với các rule đã được cấu hình và định tuyến đến target group thích hợp dựa trên các tham số truy vấn trong URL.

– Good to Know.

Khi sử dụng Application Load Balancer (ALB) của AWS, việc định tuyến các yêu cầu HTTP đến các máy chủ ứng dụng được thực hiện thông qua một địa chỉ cố định của ALB được gọi là Fixed hostname (XXX.region.elb.amazonaws.com).

Khi một yêu cầu HTTP được gửi đến ALB, nó sẽ được định tuyến đến các máy chủ ứng dụng và được xử lý bởi chúng. Tuy nhiên, các máy chủ ứng dụng không thể thấy địa chỉ IP của khách hàng trực tiếp vì yêu cầu đã được định tuyến qua ALB.

Thay vào đó, địa chỉ IP của khách hàng được chèn vào header X-Forwarded-For trong yêu cầu HTTP bởi ALB trước khi nó được gửi đến máy chủ ứng dụng. Điều này cho phép máy chủ ứng dụng biết được địa chỉ IP của khách hàng gốc, cho phép phân tích và xử lý yêu cầu theo cách thích hợp.

Ngoài địa chỉ IP của khách hàng, ALB cũng chèn các thông tin khác vào header như port (X-Forwarded-Port) và protocol (X-Forwarded-Proto), để giúp các máy chủ ứng dụng biết thông tin về cổng và giao thức được sử dụng trong yêu cầu gốc.

– Thực hành tạo 1 Application Load Balancer (v2).

  • Sử dụng Internet-facing nếu bạn muốn Application Load Balancer (v2) kết nối với internet hoặc Internal nếu bạn muốn Application Load Balancer (v2) kết nối với local. Trường hợp này chúng ta sẽ chọn bộ Application Load Balancer (v2) kết nối trực tiếp từ internet để xử lý các yêu cầu từ internet.
  • IP address type: Để đơn giản mình sẽ chọn type là IPv4 có quyền truy cập vào Application Load Balancer (v2).

Về mặt ánh xạ mạng, chúng ta phải chỉ định 1 VPC cũng như các subnet và AZ mà chúng ta muốn nó hoạt động.

Trường hợp này mình chọn luôn cả 3 AZ đang sẵn có.

Phần Security groups chúng ta cần chỉ định 1 Security groups đến bộ Application Load Balancer (v2) của chúng ta.

Sau đó chúng ta cần chỉ định Application Load Balancer (v2) lắng nghe ở cổng nào và định tuyến tới đâu. Để thiết lập phần này chúng ta cần phải tạo target group bằng cách bấm vào Create target group

Ở đây có nhiều tuỳ chọn nhưng trong trường hợp của mình đang sử dụng Instance nên mình sẽ chọn target type là Instance.

Đặt tên cho Target group name và chọn giao thức mà Application Load Balancer (v2) sẽ xử lý các yêu cầu.

Phần Health checks protocol và Health check path bạn hãy chọn đúng đường dẫn để Application Load Balancer (v2) routing đúng path và protocol.

Tại phần cài đặt Health checks nâng cao, bạn có thể cài các tuỳ chọn nâng cao như sau:

  • Healthy threshold là một cấu hình trong các load balancer, được sử dụng để xác định số lần kiểm tra liên tiếp phải thành công trước khi tài nguyên được xem là “healthy” hoặc “đang hoạt động”.
  • Unhealthy threshold là một cấu hình trong các load balancer, được sử dụng để xác định số lần kiểm tra liên tiếp thất bại trước khi tài nguyên được xem là “unhealthy” hoặc “không hoạt động”.
  • Timeout là khoảng thời gian, tính bằng giây, trong đó nếu không nhận được phản hồi từ một tài nguyên trong quá trình kiểm tra sức khỏe thì sẽ được coi là một kiểm tra sức khỏe thất bại.
  • Interval là khoảng thời gian xấp xỉ giữa các lần kiểm tra sức khỏe của một tài nguyên đích trong load balancer, được tính bằng giây.

Mã kiểm tra lỗi thành công là 200.

Chúng ta sẽ chọn 2 instance vào target này.

Chúng ta có thể review lại các thiết lập.

Nếu không có gì thay đổi, hãy bấm Create target…

Quay lại Listeners and routing tại Default action Forward to chọn my-first-target-group vừa tạo xong.

Kéo xuống dưới bạn sẽ nhận được 1 bảng tóm tắt configurations của bạn. Nếu không có gì thay đổi hãy bấm Create load balancer để tạo Application Load Balancer.

Chúng ta có thể click vào DNS để truy cập nó.

Và đây là kết quả.

Nếu bạn tải lại trang thì mỗi lần tải lại bạn sẽ nhận được mỗi nội dung khác nhau tuỳ thuộc vào Instance nào đang trả lời yêu cầu của bạn.

Nhưng do đây là Application Load Balancer (v2) nên chúng ta sẽ có 1 số tuỳ chọn bổ sung, sau đây mình sẽ chứng minh cho bạn.

Bây giờ chúng ta hãy tạo thêm 1 target group thứ 2 với tên my-second-target-group (các thông số còn lại các bạn hãy config như target group đầu tiên).

Tới phần chọn Instance, các bạn có thể chọn 1 Instance nào đó tuỳ ý, trường hợp này mình chọn Instance còn lại (khác với 2 Instance ở target group đầu tiên đã chọn).

Nếu không có gì thay đổi hãy bấm vào Create target group để tạo target group thứ 2.

Kết quả bạn sẽ có 2 target group.

Điều thú vị là nếu ta quay lại ALB của mình chúng ta sẽ thấy có nhiều listen chuyển hướng đến nhiều nhóm đối tượng.

Chúng ta có thể tuỳ chỉnh quy tắc này bằng cách vào View/edit rules

Vào Insert Rule và setup như sau:

  • Tại IF (all match): chúng ta kiểm tra thư mục /test.
  • Tại Then Forward to… chúng ta trỏ target group về my-second-target-group vừa tạo.

Sau khi thiết lập xong hãy lưu lại.

Mặc định thì Rule được forward tới target groupmy-first-target-group chưa được định tuyến, vậy bạn hãy bấm vào Insert Rule để tạo Rule mới để định tuyến cho nó.

Nếu đường dẫn là /constant và có phản hồi về lỗi 404 hoặc 503 liên tục tuỳ ý bạn chỉnh.

Bạn có kết quả.

Vẫn là đường dẫn đó nhưng nếu chúng ta /constant, bạn sẽ nhận được thông báo lỗi giống khi bạn đã thiết lập trong khi tạo rule mới.

Hoặc khi bạn thêm /test thì bạn cũng nhận được thông báo lỗi đúng theo những gì chúng ta đã thiết lập khi tạo rule.

Để hoàn thành lab này, chúng ta hãy dọn dẹp nó 1 chút. Hãy xoá 2 rule test dưới.

Mình sẽ xoá target group thứ 2 của mình.

Và trong target group mình chỉ đăng ký thêm một target, bấm vào Include as pending below.

Không có gì thay đổi hãy bấm Register pending targets.

Bạn sẽ thấy có 1 Instance mới đã được thêm vào target group và đang ở trạng thái initial.

Cần 1 khoảng thời gian ngắn để trạng thái chuyển qua healthy.

Và đây là kết quả cuối cùng.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories