Quay lại

Tự Động Mở Rộng Quy Mô Ứng Dụng với Azure Autoscale và VMSS Chuyên mục Devops    2025-07-06    0 Lượt xem    0 Lượt thích    comment-3 Created with Sketch Beta. 0 Bình luận

Chào các bạn,

Trong hành trình xây dựng ứng dụng trên đám mây, chúng ta đã cùng nhau khám phá sức mạnh của Azure Virtual Network và cách Application Gateway định tuyến lưu lượng vào các máy chủ private một cách an toàn. Nhưng một ứng dụng thực sự mạnh mẽ không chỉ cần bảo mật mà còn phải linh hoạt, luôn sẵn sàng và tối ưu chi phí. Đó chính là lúc chúng ta cần đến Azure Autoscale – một tính năng then chốt giúp ứng dụng của bạn tự động thích nghi với mọi biến động về tải trọng.

Bài viết này sẽ đi sâu vào Azure AutoscaleVirtual Machine Scale Sets (VMSS) – bộ đôi hoàn hảo để xây dựng các ứng dụng có khả năng mở rộng (scalable) và chịu lỗi (resilient) trên Azure. Chúng ta sẽ không chỉ hiểu về khái niệm mà còn thực hành chi tiết từng bước để bạn có thể tự tay triển khai giải pháp này.

 

I. Khái Niệm và Tầm Quan Trọng của Azure Autoscale

 

Trong thế giới kỹ thuật số đầy biến động, lưu lượng truy cập vào ứng dụng có thể tăng vọt vào những giờ cao điểm, sự kiện đặc biệt, hoặc giảm mạnh vào ban đêm. Nếu bạn phải điều chỉnh số lượng máy chủ bằng tay, đó sẽ là một cơn ác mộng tốn thời gian và dễ mắc lỗi. Azure Autoscale sinh ra để giải quyết vấn đề đó.

Azure Autoscale là một tính năng của Azure Monitor, cho phép bạn tự động điều chỉnh số lượng instance (ví dụ: máy ảo) của tài nguyên để đáp ứng nhu cầu tải trọng. Nó tự động tăng quy mô (scale out) bằng cách thêm instance khi tải tăng, và giảm quy mô (scale in) bằng cách loại bỏ instance khi tải giảm.

Tại sao Autoscale lại là một tính năng không thể thiếu?

  • Đảm bảo hiệu suất ổn định: Ứng dụng của bạn luôn có đủ tài nguyên để xử lý các yêu cầu, ngay cả khi có lưu lượng truy cập tăng đột biến, giúp tránh tình trạng quá tải và làm chậm dịch vụ.

  • Tối ưu chi phí: Bạn chỉ trả tiền cho lượng tài nguyên thực sự sử dụng. Khi nhu cầu giảm, Autoscale sẽ tự động giảm số lượng instance, giúp tiết kiệm chi phí mà không cần giám sát thủ công 24/7.

  • Độ sẵn sàng cao: Bằng cách duy trì một nhóm các tài nguyên có khả năng tự động điều chỉnh, Autoscale góp phần đáng kể vào độ sẵn sàng của ứng dụng.

  • Tự động hóa hoàn toàn: Loại bỏ gánh nặng quản lý thủ công tài nguyên, cho phép đội ngũ của bạn tập trung vào phát triển và cải thiện ứng dụng.

 

II. Virtual Machine Scale Sets (VMSS) – Nền tảng của Autoscale

 

Trong Azure, để triển khai Autoscale cho máy ảo, chúng ta thường sử dụng Virtual Machine Scale Sets (VMSS). VMSS cho phép bạn triển khai và quản lý một nhóm các máy ảo giống hệt nhau như một đơn vị duy nhất. Đây là nền tảng lý tưởng cho các ứng dụng web không trạng thái (stateless web applications) hoặc các tác vụ xử lý song song.

Các tính năng nổi bật của VMSS:

  • Quản lý thống nhất: Thay vì quản lý từng VM riêng lẻ, bạn quản lý toàn bộ Scale Set. Khi bạn cần cập nhật hệ điều hành hoặc cài đặt phần mềm, bạn áp dụng thay đổi cho VMSS và nó sẽ tự động triển khai cho tất cả các instance.

  • Tích hợp Autoscale: VMSS được thiết kế để hoạt động liền mạch với Azure Autoscale, cho phép bạn định nghĩa các quy tắc để tự động thêm hoặc loại bỏ VM dựa trên các chỉ số hiệu suất.

  • Triển khai nhanh chóng: Khi cần scale out, VMSS có thể nhanh chóng tạo ra các instance mới dựa trên cùng một cấu hình hoặc custom image.

  • Load Balancing tích hợp: Dễ dàng tích hợp với Azure Load Balancer (Layer 4) hoặc Azure Application Gateway (Layer 7) để phân phối lưu lượng truy cập đến các instance trong Scale Set.

  • Nâng cấp tự động và Rollback: Hỗ trợ các chiến lược nâng cấp (ví dụ: rolling upgrades) và khả năng rollback nếu có vấn đề.

 

III. Các Thành Phần Chính của Quy Tắc Autoscale

 

Để cấu hình Autoscale, bạn cần hiểu các khái niệm sau:

  • Metric (Chỉ số): Các giá trị có thể đo lường được từ tài nguyên của bạn, dùng làm "điều kiện" để kích hoạt hành động scale. Ví dụ phổ biến là CPU Utilization (%), Network In/Out, Disk IOPS, hoặc các chỉ số tùy chỉnh từ ứng dụng của bạn.

  • Rules (Quy tắc): Định nghĩa mối quan hệ giữa Metric và hành động scale. Một quy tắc bao gồm:

    • Metric: Chỉ số nào được theo dõi.

    • Threshold (Ngưỡng): Giá trị mà Metric phải đạt được (ví dụ: CPU > 70%).

    • Operator: So sánh (>, <, >=, <=).

    • Duration (Thời gian): Khoảng thời gian mà Metric phải duy trì ở ngưỡng đó trước khi hành động được kích hoạt (ví dụ: 5 phút liên tục). Điều này giúp tránh việc scale out/in không cần thiết do biến động tải nhỏ, ngắn hạn.

    • Action (Hành động): Số lượng instance sẽ tăng hoặc giảm.

    • Cool down (Khoảng thời gian chờ): Thời gian chờ sau khi một hành động scale được thực hiện trước khi hệ thống đánh giá lại các quy tắc. Điều này ngăn chặn tình trạng "flapping" (liên tục mở rộng và thu nhỏ).

  • Profiles: Một tập hợp các quy tắc có thể được áp dụng theo các khoảng thời gian nhất định (ví dụ: một Profile cho giờ làm việc, một Profile khác cho ngoài giờ).

  • Instance Count (Số lượng Instance):

    • Minimum instances: Số lượng VM tối thiểu luôn hoạt động, ngay cả khi không có tải.

    • Maximum instances: Số lượng VM tối đa mà Autoscale có thể mở rộng tới.

    • Default instances: Số lượng VM mặc định khi không có quy tắc nào được áp dụng hoặc khi khởi tạo.

 

IV. Thực Hành: Triển Khai VMSS và Cấu Hình Autoscale

 

Chúng ta sẽ xây dựng một VMSS mới trong Private Subnet của bạn, cài đặt Apache tự động, và sau đó thiết lập các quy tắc Autoscale dựa trên CPU Utilization. Application Gateway đã có của bạn sẽ định tuyến traffic đến VMSS này.

Kiến trúc mục tiêu:

Internet rightarrow Azure Application Gateway rightarrow Application Gateway Subnet rightarrow VMSS trong Private Subnet (với Autoscale) rightarrow Web Server (Apache).

Chuẩn bị trước khi thực hành:

  1. Đảm bảo bạn đã có một VNet (ví dụ: my-application-vnet) và Private Subnet (ví dụ: PrivateSubnet với dải IP 10.0.2.0/24).

  2. Bạn đã có Application Gateway đang hoạt động và định tuyến đến một Backend Pool (ví dụ: my-web-servers-pool).

  3. Quan trọng: Cập nhật Backend Pool của Application Gateway: Để Application Gateway có thể định tuyến đến VMSS mới, hãy vào Application Gateway của bạn (my-web-app-gateway), chọn Backend pools (my-web-servers-pool), và gỡ bỏ các PrivateVM cũ (nếu có) ra khỏi pool này. Nhấn Save.

 

Bước 1: Tạo Virtual Machine Scale Set (VMSS)

 

  1. Đăng nhập vào Azure Portal.

  2. Trên thanh tìm kiếm, gõ "Virtual machine scale sets" và chọn nó.

  3. Nhấn vào nút + Create.

  4. Tab Basics (Cơ bản):

    • Subscription: Chọn gói đăng ký của bạn.

    • Resource Group: Chọn Resource Group của bạn (ví dụ: my-application-rg).

    • Virtual machine scale set name: my-web-vmss (Hãy đặt tên rõ ràng).

    • Region: Chọn cùng Region với VNet và Application Gateway của bạn (ví dụ: Japan East).

    • Availability zone: Chọn None cho mục đích thực hành đơn giản. (Trong môi trường production, bạn nên chọn các zone để tăng độ sẵn sàng).

    • Orchestration mode: Uniform (Đây là chế độ mặc định và lý tưởng cho các web server).

    • Security type: Standard.

    • Image: Chọn Ubuntu Server 20.04 LTS (hoặc phiên bản Linux/Windows Server bạn ưa thích).

    • Size: Chọn một kích thước VM phù hợp (ví dụ: Standard_B2s cho chi phí thấp hoặc Standard_D2s cho hiệu năng tốt hơn).

    • Administrator account:

      • Authentication type: SSH public key.

      • Username: azureuser (hoặc tên người dùng của bạn).

      • SSH public key source: Chọn Generate new key pair (nếu đây là lần đầu) hoặc Use existing public key. Nếu tạo mới, đặt tên Key pair.

  5. Tab Networking (Mạng):

    • Virtual network: Chọn VNet của bạn (my-application-vnet).

    • Subnet: Chọn PrivateSubnet (10.0.2.0/24) của bạn.

    • Public IP address: None (VMSS sẽ nằm trong Private Subnet, không cần Public IP).

    • Load balancing: Chọn Azure Application Gateway.

    • Select an application gateway: Chọn Application Gateway của bạn (my-web-app-gateway).

    • Select a backend pool: Chọn my-web-servers-pool (backend pool mà bạn đã tạo trong Application Gateway).

    • Network Security Group: Đảm bảo nó là NSG đang bảo vệ Private VM của bạn (ví dụ: liveapp-prod-pr-nsg). NSG này phải có quy tắc inbound cho phép traffic từ AppGateway Subnet (ví dụ: 10.0.5.0/24) đến cổng 80/443!

    • NIC with Accelerated networking: Enabled.

  6. Tab Scaling (Mở rộng quy mô):

    • Initial instance count: 2 (Khuyến nghị bắt đầu với ít nhất 2 VM để có sẵn cân bằng tải và tính sẵn sàng).

    • Scaling policy: Chọn Custom.

      • Minimum instances: 2 (Số VM tối thiểu luôn chạy, đảm bảo độ sẵn sàng cơ bản).

      • Maximum instances: 5 (Số VM tối đa mà Autoscale có thể mở rộng tới, giới hạn chi phí).

    • Các quy tắc autoscale chi tiết sẽ được cấu hình ở Bước 3.

  7. Tab Management, Health, Advanced, Tags: Để mặc định hoặc cấu hình theo nhu cầu.

    • Quan trọng về Management: Trong phần Custom data, bạn có thể dán script cài đặt Apache ngay tại đây để nó được áp dụng cho tất cả các instance ngay từ đầu.

      #!/bin/bash
      sudo apt update
      sudo apt install -y apache2 -y
      sudo systemctl enable apache2
      sudo systemctl start apache2
      echo "<h1>Hello from VMSS instance $(hostname)! Welcome to Autoscale Demo!</h1>" | sudo tee /var/www/html/index.html
  8. Review + create (Xem xét + tạo): Kiểm tra lại cấu hình và nhấn Create.

Quá trình triển khai VMSS có thể mất từ 10-20 phút vì nó tạo ra nhiều VM và cấu hình chúng.

 

Bước 2: (Kiểm tra) Cài đặt Web Server trên VMSS (Nếu bỏ lỡ Custom Data ở Bước 1)

 

Nếu bạn không dán script Custom Data ở bước tạo VMSS, bạn có thể thêm nó sau. Tuy nhiên, việc này sẽ yêu cầu bạn nâng cấp các instance hiện có.

  1. Vào VMSS bạn vừa tạo: my-web-vmss.

  2. Trong menu bên trái, dưới phần Settings, chọn Custom data.

  3. Dán script sau vào ô Custom data:

    #!/bin/bash
    sudo apt update
    sudo apt install -y apache2 -y
    sudo systemctl enable apache2
    sudo systemctl start apache2
    echo "<h1>Hello from VMSS instance $(hostname)! Welcome to Autoscale Demo!</h1>" | sudo tee /var/www/html/index.html
  4. Nhấn Save.

  5. Quan trọng: Để script này chạy trên các VM hiện có và các VM mới, bạn cần nâng cấp các instance trong VMSS.

    • Trong VMSS, vào Instances.

    • Chọn tất cả các instance hiện có.

    • Nhấn vào nút Upgrade. Quá trình này sẽ khởi động lại các VM và áp dụng Custom Data.

 

Bước 3: Cấu hình Autoscale Rules Chi Tiết

 

Bây giờ chúng ta sẽ tinh chỉnh các quy tắc Autoscale để VMSS tự động điều chỉnh số lượng VM dựa trên tải CPU.

  1. Vào VMSS của bạn: my-web-vmss.

  2. Trong menu bên trái, dưới phần Settings, chọn Scaling.

  3. Đảm bảo Scale condition đang là Custom autoscale.

  4. Instance limits: Kiểm tra lại để chắc chắn Minimum instances2Maximum instances5.

  5. Scale out rule (Quy tắc mở rộng):

    • Nhấn + Add a rule.

    • Metric source: Current (hoặc chọn cụ thể nếu bạn có Application Insights).

    • Metric name: Percentage CPU (Chỉ số phổ biến nhất).

    • Time aggregation: Average.

    • Operator: Greater than (>)

    • Threshold: 70 (Nếu CPU trung bình của tất cả các instance vượt quá 70%).

    • Duration (minutes): 5 (Trong vòng 5 phút liên tục).

    • Operation: Increase count by

    • Instance count: 1 (Thêm 1 VM).

    • Cool down (minutes): 5 (Khoảng thời gian chờ sau khi scale out để hệ thống ổn định và không scale out liên tục).

    • Nhấn Add.

  6. Scale in rule (Quy tắc thu nhỏ):

    • Nhấn + Add a rule.

    • Metric source: Current.

    • Metric name: Percentage CPU.

    • Time aggregation: Average.

    • Operator: Less than (<)

    • Threshold: 30 (Nếu CPU trung bình giảm xuống dưới 30%).

    • Duration (minutes): 5.

    • Operation: Decrease count by

    • Instance count: 1 (Giảm 1 VM).

    • Cool down (minutes): 5 (Khoảng thời gian chờ sau khi scale in).

    • Nhấn Add.

  7. Nhấn Save ở đầu trang Scaling.

 

Bước 4: Kiểm Tra Hoạt Động của Autoscale

 

Để thấy Autoscale hoạt động, bạn cần tạo tải (load) trên các VM của mình.

  1. Truy cập ứng dụng: Mở trình duyệt và truy cập Public IP của Application Gateway của bạn. Bạn sẽ thấy trang web Apache từ một trong các instance của VMSS. Khi F5 liên tục, bạn có thể thấy nội dung từ các instance khác nhau (nếu bạn có nhiều hơn 1 instance và đã thay đổi nội dung index.html của mỗi cái).

  2. Tạo tải trên một Instance của VMSS:

    • Trong Azure Portal, vào VMSS của bạn (my-web-vmss).

    • Trong menu bên trái, chọn Instances.

    • Chọn một trong các instance đang chạy và ghi lại Public IP hoặc sử dụng Azure Bastion để kết nối SSH vào nó.

    • Cài đặt stress (nếu chưa có):

      sudo apt update
      sudo apt install -y stress -y
    • Chạy stress để tăng tải CPU:

      stress -c 4 -t 300s # Tăng tải trên 4 core trong 300 giây (5 phút)

      (Điều chỉnh số core -c tùy thuộc vào kích thước VM của bạn. Đảm bảo nó đẩy CPU lên trên 70% tổng thể của Scale Set).

  3. Quan sát Autoscale:

    • Trong Azure Portal, vào VMSS của bạn (my-web-vmss).

    • Trong menu bên trái, chọn Monitoring, sau đó chọn Metrics.

    • Chọn Metric namespace: Virtual Machine Scale Set.

    • Chọn Metric: Percentage CPU.

    • Quan sát biểu đồ. Khi CPU trung bình của các instance duy trì trên 70% trong 5 phút, bạn sẽ thấy số lượng instance tăng lên (ví dụ: từ 2 lên 3).

    • Để kiểm tra Scale In, hãy dừng lệnh stress (Ctrl+C). Khi CPU giảm xuống dưới 30% trong 5 phút, số lượng instance sẽ giảm dần về mức tối thiểu (2).

    • Bạn cũng có thể kiểm tra Activity log của VMSS để xem các sự kiện autoscale (Scale out hoặc Scale in).

 

V. Những Lưu Ý Quan Trọng Khi Sử Dụng Autoscale

 

  • Tính nhất quán của Image: Để đảm bảo các instance mới có cùng ứng dụng và cấu hình, hãy sử dụng Custom Data (như chúng ta đã làm) hoặc tốt hơn nữa là tạo một Custom Image từ một VM đã cài đặt đầy đủ phần mềm. Azure Image Builder là công cụ tuyệt vời để tự động hóa việc tạo Custom Image này.

  • Ứng dụng Stateless (Không trạng thái): Autoscale hoạt động hiệu quả nhất với các ứng dụng không trạng thái, nơi các yêu cầu có thể được xử lý bởi bất kỳ VM nào trong nhóm. Nếu ứng dụng có trạng thái (ví dụ: phiên người dùng được lưu trên VM cục bộ), bạn cần sử dụng các giải pháp như cơ sở dữ liệu dùng chung, Redis Cache, hoặc Azure Files để duy trì trạng thái xuyên suốt các instance.

  • Warm-up Period: Khi một VM mới được thêm vào, có thể mất một thời gian để nó khởi động, cài đặt ứng dụng (nếu dùng Custom Data) và sẵn sàng xử lý traffic. Hãy xem xét "Cool-down" period trong Autoscale rules và thời gian khởi động của VM để tránh tình trạng "flapping" hoặc gửi traffic đến VM chưa sẵn sàng.

  • Health Probes: Luôn đảm bảo Application Gateway hoặc Load Balancer có Health Probes cấu hình đúng để chỉ gửi traffic đến các VM đã khởi động và sẵn sàng hoạt động.

  • Chi phí: Autoscale giúp tối ưu chi phí nhưng hãy luôn theo dõi số lượng VM tối thiểu/tối đa và các quy tắc để tránh chi phí bất ngờ do scale out quá mức.

  • Giám sát và Cảnh báo: Thiết lập Azure Monitor và Alerts để theo dõi các chỉ số và nhận thông báo khi có sự kiện autoscale hoặc khi hiệu suất không như mong muốn.

  • Kiểm tra trong môi trường non-production: Luôn kiểm tra các quy tắc autoscale của bạn trong môi trường phát triển/thử nghiệm trước khi áp dụng vào môi trường production.


Chúc mừng bạn! Với việc triển khai Azure Autoscale và Virtual Machine Scale Sets, bạn đã có trong tay một giải pháp mạnh mẽ để đảm bảo ứng dụng web của mình luôn hoạt động ổn định, hiệu quả và tối ưu chi phí trên Azure. Đây là một bước tiến lớn trong việc xây dựng hạ tầng đám mây hiện đại.

Hãy tiếp tục khám phá và xây dựng nhé!

Bình luận (0)

Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough

Bài viết liên quan

Learning English Everyday