Quay lại
   

EC2 Fleet

EC2 Fleet là một dịch vụ của AWS (Amazon Web Services) cho phép bạn quản lý và triển khai tập hợp các instances trong Amazon EC2 (Elastic Compute Cloud) theo cách linh hoạt và tối ưu hóa chi phí. EC2 Fleet cung cấp một cách thuận tiện để khởi chạy và quản lý các nhóm instances với nhiều tùy chọn cấu hình khác nhau.

EC2 Fleet là gì:

  • EC2 Fleet là một cách để quản lý và khởi chạy các tập hợp instances trong Amazon EC2 theo cấu hình bạn xác định.
  • Cho phép bạn chọn và kết hợp nhiều loại instances (như On-Demand và Spot Instances) để đáp ứng nhu cầu của bạn về hiệu suất và chi phí.
  • Cung cấp các chiến lược phân phối khác nhau (ví dụ: "lowestPrice" hoặc "diversified") để tối ưu hóa lựa chọn instances dựa trên giá và hiệu suất.

EC2 Fleet dùng để làm gì:

  • Tối ưu hóa chi phí: Kết hợp Spot Instances với On-Demand Instances để giảm chi phí, tận dụng giá rẻ hơn của Spot Instances.
  • Tối ưu hóa hiệu suất: Lựa chọn các instances theo nhu cầu hiệu suất của bạn, bao gồm các loại instances khác nhau với cấu hình phần cứng và mạng khác nhau.
  • Tự động hóa quản lý: EC2 Fleet giúp tự động quản lý số lượng instances dựa trên nhu cầu của bạn và đảm bảo cung cấp tài nguyên đúng thời điểm.

EC2 Fleet được dùng khi nào:

  • Khi bạn cần triển khai và quản lý nhiều instances: EC2 Fleet rất hữu ích khi bạn muốn quản lý một tập hợp instances theo cấu hình cụ thể.
  • Khi bạn muốn tối ưu hóa chi phí và hiệu suất: Bằng cách kết hợp Spot và On-Demand Instances, bạn có thể tối ưu hóa chi phí và hiệu suất.
  • Khi bạn muốn tự động hóa việc quản lý instances: EC2 Fleet giúp bạn tự động triển khai, quản lý, và theo dõi các instances theo nhu cầu.

EC2 Fleet là một công cụ mạnh mẽ để quản lý các instances trong EC2 và giúp bạn tối ưu hóa cả về chi phí và hiệu suất cho các ứng dụng của mình.

Bối cảnh

EC2 Fleet là một công cụ hữu ích trong nhiều trường hợp thực tế, đặc biệt là khi bạn muốn tối ưu hóa chi phí và hiệu suất cho ứng dụng của mình bằng cách sử dụng cả On-Demand và Spot Instances. Dưới đây là một ví dụ thực tế về cách bạn có thể sử dụng EC2 Fleet trong một trường hợp triển khai ứng dụng web có lưu lượng truy cập không ổn định:

  • Bạn điều hành một trang web thương mại điện tử có lưu lượng truy cập tăng và giảm theo thời gian.
  • Trong giờ cao điểm, lưu lượng truy cập tăng cao, yêu cầu nhiều tài nguyên hơn để duy trì hiệu suất của ứng dụng.
  • Trong giờ thấp điểm, lưu lượng truy cập giảm và không cần nhiều tài nguyên.

Cách sử dụng EC2 Fleet:

  1. Xác định nhu cầu tài nguyên:

    • Trong giờ thấp điểm, bạn cần một số lượng nhỏ instances (ví dụ: 2 On-Demand Instances) để duy trì hoạt động của ứng dụng.
    • Trong giờ cao điểm, bạn cần thêm instances (ví dụ: 6 Spot Instances) để xử lý lưu lượng truy cập tăng đột biến.
  2. Tạo EC2 Fleet:

    • Bạn tạo một EC2 Fleet với tổng mục tiêu 8 instances: 2 On-Demand Instances và 6 Spot Instances.
    • Sử dụng launch template hoặc launch configuration để xác định loại instances, cấu hình phần cứng và phần mềm, và giá tối đa (MaxPrice) cho Spot Instances.
  3. Thiết lập chiến lược phân phối:

    • Sử dụng chiến lược "lowestPrice" để tối ưu hóa việc lựa chọn Spot Instances rẻ nhất có sẵn, và "availability-optimized" để đảm bảo lựa chọn instances từ nhiều vùng khả dụng khác nhau.
  4. Khởi chạy EC2 Fleet:

    • AWS sẽ khởi chạy 2 On-Demand Instances và cố gắng khởi chạy 6 Spot Instances với giá thấp nhất có sẵn theo cấu hình bạn đã thiết lập.
    • Nếu Spot Instances bị chấm dứt do giá vượt quá MaxPrice, EC2 Fleet sẽ cố gắng khởi chạy lại chúng.
  5. Giám sát và điều chỉnh:

    • Bạn có thể theo dõi trạng thái của EC2 Fleet trong AWS Management Console hoặc sử dụng API/CLI.
    • Nếu cần, bạn có thể điều chỉnh mục tiêu dung lượng hoặc cấu hình của EC2 Fleet để phù hợp với nhu cầu thay đổi của ứng dụng.

Lợi ích:

  • Tối ưu hóa chi phí: Sử dụng Spot Instances khi giá rẻ để giảm chi phí, và sử dụng On-Demand Instances để đảm bảo tính sẵn sàng của ứng dụng.
  • Hiệu suất: Đáp ứng nhu cầu tăng đột biến về tài nguyên trong giờ cao điểm mà không làm giảm hiệu suất của ứng dụng.
  • Linh hoạt: Dễ dàng điều chỉnh mục tiêu dung lượng và cấu hình của EC2 Fleet để đáp ứng nhu cầu thay đổi của ứng dụng.

Đây là một ví dụ thực tế về cách EC2 Fleet có thể giúp bạn tối ưu hóa chi phí và hiệu suất trong việc triển khai ứng dụng web có lưu lượng truy cập không ổn định.

  • Used to run a group of instances

  • Support instance purchasing options: On-Demand, Reserved and Spot Instance

  • Only support CLI, API

Thực hành Fleet

Để tạo một EC2 Fleet sử dụng API của AWS, bạn sẽ sử dụng API CreateFleet. API này cho phép bạn xác định cấu hình cho fleet của mình, bao gồm các loại instance, số lượng của chúng và các thiết lập khởi động khác. Dưới đây là hướng dẫn từng bước để tạo một EC2 Fleet sử dụng API:

Bước 1: Cấu hình AWS CLI hoặc SDK

  • Đảm bảo bạn đã cài đặt và cấu hình AWS CLI với thông tin xác thực của mình.
  • Nếu bạn muốn sử dụng SDK, hãy đảm bảo bạn đã thiết lập AWS SDK phù hợp cho ngôn ngữ lập trình của bạn.

Bước 2: Chuẩn bị yêu cầu API CreateFleet

  • Xác định cấu hình cho EC2 Fleet của bạn trong một tệp JSON. Tệp này sẽ bao gồm các thiết lập như các loại instance, dung lượng mong muốn, chiến lược phân bổ và các thiết lập khởi động khác.

  • Dưới đây là ví dụ về tệp JSON (create_fleet_request.json):

    {
        "LaunchTemplateConfigs": [
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateId": "lt-12345678",  // ID của launch template của bạn
                    "Version": "1"  // Phiên bản của launch template của bạn
                },
                "Overrides": [
                    {
                        "InstanceType": "m5.large",
                        "WeightedCapacity": 1,
                        "MaxPrice": "0.10"  // Giá tối đa cho Spot instances (tùy chọn)
                    },
                    {
                        "InstanceType": "c5.large",
                        "WeightedCapacity": 1,
                        "MaxPrice": "0.09"  // Giá tối đa cho Spot instances (tùy chọn)
                    }
                ]
            }
        ],
        "TargetCapacitySpecification": {
            "TotalTargetCapacity": 10,
            "OnDemandTargetCapacity": 5,
            "SpotTargetCapacity": 5,
            "DefaultTargetCapacityType": "spot"
        },
        "SpotOptions": {
            "AllocationStrategy": "lowestPrice"
        },
        "OnDemandOptions": {
            "AllocationStrategy": "lowestPrice"
        },
        "Type": "instant",
        "ReplaceUnhealthyInstances": false
    }​

    Đoạn mã JSON trên được sử dụng để cấu hình và tạo một EC2 Fleet trong AWS. EC2 Fleet là một nhóm các instance trong EC2 mà bạn có thể quản lý như một tập hợp duy nhất. Dưới đây là giải thích chi tiết về các cấu hình trong đoạn mã JSON:

    • "LaunchTemplateConfigs":

      • Là một danh sách cấu hình sử dụng Launch Template để tạo instances.
      • Mỗi cấu hình bao gồm:
        • "LaunchTemplateSpecification": Thông tin về Launch Template sử dụng để tạo instances, bao gồm LaunchTemplateId (ID của Launch Template) và Version (phiên bản của Launch Template).
        • "Overrides": Một danh sách các ghi đè cho cấu hình của Launch Template, bao gồm các trường như:
          • InstanceType (loại instance cần tạo)
          • WeightedCapacity (công suất tính toán được gán cho instance đó trong fleet)
          • MaxPrice (giá tối đa mà bạn sẵn sàng trả cho Spot Instances).
    • "TargetCapacitySpecification":

      • Xác định mục tiêu dung lượng của EC2 Fleet, bao gồm:
        • "TotalTargetCapacity": Tổng dung lượng mục tiêu (số lượng instances) của fleet.
        • "OnDemandTargetCapacity": Dung lượng mục tiêu cho On-Demand Instances.
        • "SpotTargetCapacity": Dung lượng mục tiêu cho Spot Instances.
        • "DefaultTargetCapacityType": Có 2 loại "spot" và "on-demand". Loại dung lượng mục tiêu mặc định (ở đây là "spot" tức là ưu tiên sử dụng Spot Instances) 
    • "SpotOptions" và "OnDemandOptions":

      • Xác định chiến lược phân bổ cho Spot Instances và On-Demand Instances.
      • Cả hai đều sử dụng AllocationStrategy là "lowestPrice", tức là chọn các instances có giá thấp nhất có sẵn.
    • "Type":

      • Chỉ định loại yêu cầu cho fleet (ở đây là "instant", tức là yêu cầu tức thì).
    • "ReplaceUnhealthyInstances":

      • Xác định có nên tự động thay thế các instances không khỏe mạnh trong fleet hay không. Giá trị false có nghĩa là không thay thế tự động.

Bước 3: Gọi API CreateFleet

  • Sử dụng AWS CLI hoặc SDK để gọi API CreateFleet với tệp JSON làm đầu vào.

  • Đối với AWS CLI:

    aws ec2 create-fleet --cli-input-json file://create_fleet_request.json​
  • Đối với AWS SDK, sử dụng phương thức thích hợp để gọi API CreateFleet.

Bước 4: Xử lý phản hồi API

  • Phản hồi API sẽ bao gồm thông tin về fleet đã tạo, bao gồm Fleet ID.
  • Bạn có thể sử dụng ID này để quản lý fleet (ví dụ: kiểm tra trạng thái, chấm dứt) thông qua các lệnh API khác.

Lưu ý bổ sung

  • Đảm bảo rằng người dùng hoặc vai trò IAM của bạn có các quyền cần thiết để tạo và quản lý EC2 Fleets.
  • Giám sát hiệu suất và health của fleet để tối ưu hóa chi phí và hiệu suất khi cần thiết.

Bằng cách làm theo các bước trên, bạn có thể tạo một EC2 Fleet sử dụng API của AWS. Điều chỉnh các tham số trong tệp JSON theo nhu cầu cụ thể của bạn.

- https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-instance-weighting-walkthrough.html

- https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/manage-ec2-fleet.html#EC2-fleet-states

Có thể bạn chưa biết

Các thuộc tính trong Overwites:

Dưới đây là một ví dụ về cấu hình Overrides trong EC2 Fleet được trình bày dưới dạng JSON:

"Overrides": [
    {
        "InstanceType": "t2.micro",
        "WeightedCapacity": 1,
        "AvailabilityZone": "us-east-1a",
        "SubnetId": "subnet-12345678",
        "Priority": 1,
        "Placement": {
            "GroupStrategy": "cluster",
            "Tenancy": "default"
        }
    },
    {
        "InstanceType": "c5.large",
        "WeightedCapacity": 2,
        "AvailabilityZone": "us-east-1b",
        "SubnetId": "subnet-87654321",
        "Priority": 2,
        "Placement": {
            "GroupStrategy": "spread",
            "Tenancy": "host"
        }
    }
]

Trong ví dụ này, chúng ta có hai overrides khác nhau:

  1. Override đầu tiên:
  • InstanceType được chỉ định là "t2.micro".
  • WeightedCapacity là 1, chỉ định mức độ quan trọng của instance này.
  • AvailabilityZone được chỉ định là "us-east-1a".
  • SubnetId là "subnet-12345678".
  • Priority được thiết lập là 1.
  • Placement được định rõ với GroupStrategy là "cluster" và Tenancy là "default".
  1. Override thứ hai:
  • InstanceType được chỉ định là "c5.large".
  • WeightedCapacity là 2, chỉ định mức độ quan trọng của instance này.
  • AvailabilityZone được chỉ định là "us-east-1b".
  • SubnetId là "subnet-87654321".
  • Priority được thiết lập là 2.
  • Placement được định rõ với GroupStrategy là "spread" và Tenancy là "host".

Các thuộc tính trong mỗi override có thể được điều chỉnh tùy thuộc vào nhu cầu cụ thể của bạn khi tạo EC2 Fleet.

Các thuộc tính khác:

{
    "SpotOptions": {
        "AllocationStrategy": "lowestPrice",
        "InstanceInterruptionBehavior": "terminate",
        "InstancePoolsToUseCount": 2,
        "InstanceTypes": ["c5.large", "m5.large"],
        "MaxTotalPrice": "0.5"
    },
    "OnDemandOptions": {
        "AllocationStrategy": "lowestPrice",
        "MaxTotalPrice": "1.0"
    }
}

Trong phần SpotOptions và OnDemandOptions, Allocation Strategy chỉ là một trong số các tùy chọn có thể được cấu hình. Dưới đây là một số tùy chọn phổ biến khác mà bạn có thể sử dụng trong cấu hình của mình:

  1. SpotOptions:

    • AllocationStrategy: Xác định chiến lược phân phối cho Spot Instances. Các tùy chọn bao gồm: "lowestPrice" (chọn Spot Instances với giá thấp nhất), "diversified" (chọn Spot Instances từ nhiều zones và types để giảm rủi ro), "capacityOptimized" (chọn Spot Instances với hiệu suất tối ưu).
    • InstanceInterruptionBehavior: Xác định hành vi khi Spot Instances bị gián đoạn. Các tùy chọn bao gồm: "terminate" (Spot Instances bị chấm dứt khi giá Spot vượt quá giá tham chiếu) hoặc "stop" (Spot Instances bị dừng khi giá Spot vượt quá giá tham chiếu).
    • InstancePoolsToUseCount: Xác định số lượng các nhóm instances mà Fleet sẽ sử dụng khi chọn Spot Instances.
    • InstanceTypes: Xác định các loại instance mà Fleet sẽ sử dụng cho Spot Instances.
    • MaxTotalPrice: Xác định giới hạn tối đa cho tổng chi phí của Spot Instances.
  2. OnDemandOptions:

    • AllocationStrategy: Xác định chiến lược phân phối cho On-Demand Instances. Các tùy chọn tương tự như cho SpotInstances.
    • MaxTotalPrice: Xác định giới hạn tối đa cho tổng chi phí của On-Demand Instances.

Bạn có thể cấu hình các tùy chọn này theo nhu cầu của mình để điều chỉnh cách EC2 Fleet chọn và sử dụng các instances.


Một số tuỳ chọn:

Đây là một số ví dụ về cách sử dụng các tùy chọn thêm này:

{
    "Type": "request",
    "ReplaceUnhealthyInstances": true,
    "HealthCheckType": "EC2",
    "HealthCheckGracePeriod": 300,
    "InstanceProtection": false
}​
  • "HealthCheckType": Xác định loại kiểm tra sức khỏe sử dụng để xác định tính sẵn sàng của các instances. Trong ví dụ trên, giá trị là "EC2" chỉ ra rằng EC2 Fleet sẽ sử dụng kiểm tra sức khỏe EC2 để kiểm tra tính sẵn sàng của các instances.

  • "Type":

    • Sẽ có hai trường hợp sử dụng là "request" và "instant", EC2 Fleet sẽ tự động bắt đầu tạo instances mà không cần phải chờ đợi yêu cầu cụ thể từ bạn. Sự khác biệt chính là trong trường hợp "instant", quá trình bắt đầu ngay lập tức sau khi Fleet nhận được yêu cầu tạo mới, trong khi "request" có thể cho phép một vài bước kiểm soát hoặc xác nhận trước khi bắt đầu quá trình tạo mới.
  • "ReplaceUnhealthyInstances": Xác định cách thức xử lý các instances không lành mạnh. Khi thiết lập là "false", nó chỉ ra rằng Fleet sẽ không tự động thay thế các instances không lành mạnh bằng các instances mới. Các instances không lành mạnh có thể là các instances bị lỗi phần cứng hoặc không thể truy cập được. Điều này có thể dẫn đến việc mất dữ liệu hoặc ngừng hoạt động của ứng dụng, tùy thuộc vào cách mà ứng dụng của bạn xử lý các instances không lành mạnh.

  • "HealthCheckGracePeriod": Xác định khoảng thời gian (tính bằng giây) mà EC2 Fleet sẽ đợi trước khi bắt đầu kiểm tra sức khỏe của các instances mới được khởi tạo.

  • "InstanceProtection": Xác định liệu EC2 Fleet có nên bảo vệ các instances khỏi việc bị chấm dứt hay không. Khi InstanceProtection được thiết lập là "true", các instances không thể bị chấm dứt bởi EC2 Fleet.

Một số vấn đề gặp phải:

Có một số yếu tố có thể gây ra sự chênh lệch giữa số lượng instances được yêu cầu và số lượng instances thực tế được tạo ra:

  1. Capacity Constraints: Nếu không đủ capacity khả dụng trong zone bạn chọn hoặc giữa các instance type, EC2 Fleet có thể tạo ra nhiều hơn số lượng instances được yêu cầu để đảm bảo rằng mục tiêu tổng thể của bạn được đạt được.

  2. Spot Instance Unavailability: Trong trường hợp không có Spot Instances khả dụng với giá thấp nhất (do giá Spot cao hơn giá tham chiếu của bạn), EC2 Fleet có thể không thể tạo ra Spot Instance và sẽ thay thế nó bằng các On-Demand Instance để đảm bảo rằng tổng số lượng instances yêu cầu được đáp ứng.

Do đó, trong trường hợp của bạn, có thể đã có các ràng buộc về capacity hoặc không khả dụng của Spot Instances dẫn đến việc tạo ra 3 instances thay vì 2 như bạn đã mong đợi. Để xác định chính xác lý do tại sao đã tạo ra 3 instances, bạn có thể kiểm tra các thông báo hoặc nhật ký từ hoạt động của EC2 Fleet để hiểu rõ hơn.

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