Skip to main content

Bài 10: Microservices và Containerization trên AWS

1. Giới thiệu về Microservices và Containerization

1.1 Microservices

  • Kiến trúc phần mềm chia nhỏ ứng dụng thành các dịch vụ độc lập, có thể triển khai riêng biệt.
  • Mỗi microservice tập trung vào một chức năng cụ thể của business domain.

1.2 Containerization

  • Đóng gói ứng dụng và dependencies vào một container.
  • Đảm bảo ứng dụng chạy nhất quán trong các môi trường khác nhau.

1.3 Benefits

  • Tăng tính linh hoạt và khả năng mở rộng
  • Cải thiện tốc độ phát triển và triển khai
  • Tăng cường khả năng chịu lỗi của hệ thống

2. AWS Services for Microservices và Containerization

2.1 Amazon Elastic Container Service (ECS)

  • Fully managed container orchestration service
  • Supports Docker containers
  • Integrates với nhiều AWS services

2.2 Amazon Elastic Kubernetes Service (EKS)

  • Managed Kubernetes service
  • Allows running Kubernetes on AWS without needing to install và operate Kubernetes clusters

2.3 AWS Fargate

  • Serverless compute engine cho containers
  • Works với both ECS và EKS
  • Eliminates need to manage underlying infrastructure

2.4 Amazon Elastic Container Registry (ECR)

  • Fully managed Docker container registry
  • Secure, scalable, và reliable

2.5 AWS App Mesh

  • Service mesh that provides application-level networking
  • Enables easy monitoring và control of microservices

2.6 AWS Lambda

  • Serverless compute service
  • Can be used to implement microservices without managing servers

3. Designing Microservices Architecture on AWS

3.1 Service Discovery

  • Use AWS Cloud Map for service discovery
  • Integrate với ECS và EKS for automatic registration

3.2 API Management

  • Use Amazon API Gateway to create, publish, và manage APIs
  • Implement API versioning và throttling

3.3 Data Management

  • Use purpose-specific databases for each microservice (e.g., DynamoDB, RDS)
  • Implement eventual consistency where appropriate

3.4 Inter-Service Communication

  • Use Amazon SQS for asynchronous communication
  • Implement synchronous communication via RESTful APIs hoặc gRPC

3.5 Monitoring và Logging

  • Use Amazon CloudWatch for centralized monitoring
  • Implement distributed tracing với AWS X-Ray

4. Container Orchestration với Amazon ECS

4.1 Task Definitions

  • Define Docker containers và their configurations
  • Specify resource requirements, port mappings, và environment variables

4.2 ECS Clusters

  • Logical grouping of EC2 instances hoặc Fargate resources
  • Can span multiple Availability Zones for high availability

4.3 ECS Services

  • Maintain specified number of instances of a task definition
  • Integrate với Elastic Load Balancing for distribution of traffic

4.4 ECS Deployment Strategies

  • Rolling update
  • Blue/Green deployment via AWS CodeDeploy

5. Kubernetes on AWS với Amazon EKS

5.1 EKS Clusters

  • Managed Kubernetes control plane
  • Automatically scales và updates the Kubernetes infrastructure

5.2 Worker Nodes

  • Can use EC2 instances hoặc Fargate for worker nodes
  • Implement auto-scaling với Kubernetes Cluster Autoscaler

5.3 Kubernetes Objects

  • Deploy applications using Kubernetes Deployments, Services, và Ingress resources
  • Use ConfigMaps và Secrets for configuration management

5.4 EKS Add-ons

  • Leverage EKS add-ons for additional functionality (e.g., CoreDNS, kube-proxy)

6. Serverless Containers với AWS Fargate

6.1 Fargate Task Definitions

  • Define containers, CPU, và memory requirements
  • Specify networking và storage configurations

6.2 Fargate Pricing Model

  • Pay only for the vCPU và memory resources used by containers
  • No need to pay for underlying EC2 instances

6.3 Fargate Spot

  • Use Fargate Spot for fault-tolerant workloads to save costs

7. CI/CD for Microservices và Containers

7.1 AWS CodePipeline

  • Create continuous delivery pipelines for microservices
  • Automate build, test, và deployment processes

7.2 AWS CodeBuild

  • Compile source code, run tests, và produce deployment artifacts
  • Use for building Docker images

7.3 AWS CodeDeploy

  • Automate deployments to ECS và EKS
  • Implement Blue/Green deployments

8. Security Considerations

8.1 Container Security

  • Use AWS ECR image scanning to detect vulnerabilities
  • Implement least privilege access với IAM roles for tasks/pods

8.2 Network Security

  • Use security groups và NACLs to control traffic
  • Implement VPC endpoints for private communication với AWS services

8.3 Secrets Management

  • Use AWS Secrets Manager hoặc Parameter Store for managing secrets
  • Rotate secrets regularly

9. Monitoring và Observability

9.1 Container Insights

  • Use CloudWatch Container Insights for monitoring ECS và EKS clusters
  • Collect, aggregate, và summarize metrics và logs

9.2 Distributed Tracing

  • Implement AWS X-Ray for tracing requests across microservices
  • Use X-Ray SDK in your applications for custom tracing

9.3 Log Management

  • Centralize logs using CloudWatch Logs
  • Use Log Insights for analyzing log data

10. Best Practices

  1. Design for Failure: Assume any service can fail và design accordingly.

  2. Implement Circuit Breakers: Prevent cascading failures across microservices.

  3. Use Containers for Consistency: Ensure consistency across development, testing, và production environments.

  4. Implement Proper Service Discovery: Use AWS Cloud Map hoặc Kubernetes Service Discovery.

  5. Leverage Managed Services: Use AWS managed services to reduce operational overhead.

  6. Implement Proper Monitoring và Logging: Ensure visibility across all microservices và containers.

  7. Automate Everything: From build và test to deployment và scaling.

  8. Implement Security at Every Layer: Secure containers, networks, và data.

  9. Optimize for Cost: Use appropriate instance types và leverage spot instances where possible.

  10. Plan for Scalability: Design services to scale independently based on their specific requirements.

11. Advanced Topics

11.1 Service Mesh

  • Implement AWS App Mesh for advanced traffic management và observability

11.2 Serverless Microservices

  • Use AWS Lambda và API Gateway for serverless microservices architecture

11.3 Multi-Region Deployments

  • Implement global applications using Route 53 và CloudFront

11.4 GitOps for EKS

  • Use tools like Flux hoặc ArgoCD for GitOps workflows với EKS

Microservices và containerization là các công nghệ quan trọng trong việc xây dựng ứng dụng hiện đại, có khả năng mở rộng trên AWS. Hiểu và áp dụng đúng các nguyên tắc này sẽ giúp bạn thiết kế và triển khai các ứng dụng linh hoạt, có khả năng chịu lỗi cao trên cloud. Những kiến thức này không chỉ quan trọng cho kỳ thi SAA-C03 mà còn rất hữu ích trong việc phát triển và vận hành các ứng dụng thực tế trên AWS.