Tìm hiểu về AWS ECS. Các thành phần và kiến trúc ECS.

Amazon Elastic Container Service (Amazon ECS) là dịch vụ điều phối container hiệu suất cao do AWS cung cấp. Đây được coi là một trong những dịch vụ chính của AWS, tích hợp dễ dàng với các dịch vụ khác của Amazon như IAM, Route 53, Secret Manager, hay CloudWatch để triển khai và mở rộng các workload dạng container.

ECS cung cấp lớp xử lý và sắp xếp container xuyên suốt trên lớp xử lý compute bên dưới như EC2 hoặc Fargate (Serverless).

Kiến trúc ECS

Kiến trúc ECS sử dụng EC2 compute node

ECS có thể hiểu đơn giản là tập hợp các ECS Cluster được tạo thành từ việc nhóm các EC2 instance về mặt logic cho phép cung cấp dịch vụ container với hiệu quả sử dụng tài nguyên cpu, ram, hdd tối ưu.

ECS cũng có thể được triển khai trên AWS Fargate là các dịch vụ serverless cung cấp lớp xử lý compute cho container. Fargate cũng có khả năng tích hợp với AWS EKS và AWS ECS.

Task Definition

Khái niệm Task trong ECS tương ứng với việc sử dụng Docker Compose.

Task defination là 1 file JSON định nghĩa các task và các container. Task được hiểu là logical groupings của các container

Ví dụ như 1 “image processing task” có thể có 1 Sidekiq container, 1 web container và 1 Redis container). Các container trong 1 task phải chạy cùng nhau. Trong ví dụ về “image processing task“, việc mở rộng web container yêu cầu cả việc mở rộng Sidekiq container và Redis container.

Best practice ở đây là chúng ta chỉ nên có 1 container tương ứng với 1 task, để giúp cho việc scale từng phần của hệ thống 1 cách độc lập.

Task defination bao gồm các thông tin sau:

  • Cần bao nhiêu CPU và bộ nhớ cho 1 task?
  • Định nghĩa 1 container trong 1 task:
    • Container tiêu thụ bao nhiêu CPU và memory? Nó không được vượt quá con số được phân bổ ban đầu đối với 1 task. Nếu có nhiều hơn 1 container trong 1 task thì tổng số lượng tiêu thụ CPU và memory không được vượt quá con số phân bổ ban đầu.
    • Bạn quản lý các log ra sao?
    • Docker image nào sẽ được sử dụng?
    • Biến môi trường nào sẽ khả dụng cho container?
    • Câu lệnh nào sẽ được sử dụng để start container?

Vì cấu hình này thay đổi xuyên suốt vòng đời của 1 ứng dụng, do đó task definations có thể có nhiều phiên bản, được gọi là revision.

ECS Service

Là lớp xử lý Compute bên dưới như EC2 hoặc Fargate

ECS Cluster

Một cụm (cluster) là tổ hợp các service và task. Khi ta chạy service ECS-EC2, 1 cụm còn được hiểu là 1 nhóm các EC2 instance. Bạn có thể thiết lập số lượng và loại EC2 instance mà bạn muốn sử dụng. Tổng số đơn vị CPU và đơn vị bộ nhớ của từng instance này xác định số lượng container có thể thiết lập trong 1 cluster.

Lấy ví dụ: ta tạo ra 1 cluster cho ứng dụng Image processing. Nó có 2 service ECS-EC2:

  • 1 web service thực hiện render website
  • 1 service xử lý ảnh thực hiện việc resize.

Cụm cũng bao gồm 3 c5.large instance, mỗi cái có 1 2vCPU (2.048 đơn vị CPU) và 4 GiB bộ nhớ. Cách setup này cho chúng ta 6.144 đơn vị CPU và 12GiB bộ nhớ. Dung lượng này được chia sẻ giữa tất cả các ECS-EC2 service trong cụm.

Giả sử web service của chúng ta cần 1.024 CPU units và 2GB RAM đối với 1 task, và service xử lý ảnh cần tới 2.048 CPU units và 4GB RAM cho 1 task, thì chúng ta có thể đưa vào 2 image processing tasks và 2 web service tasks vào trong 3 c5.large instance này. Nếu chúng ta muốn đưa thềm vào 1 web service task nữa, điều này là không thể vì toàn bộ tài nguyên của 3 c5.large instance đã được phân bố đầy đủ cho 4 task trước đó.

Tham khảo

https://viblo.asia/p/deploy-du-an-ruby-on-rails-tren-amazon-ecs-part-1-y-tuong-924lJWg85PM

Leave a Reply

Your email address will not be published. Required fields are marked *