© 2026 Laravel

AWS, DevOps & Cloud Computing: Từ Code đến Hạ tầng

14 phút đọc

📌 Chủ đề: AWS, DevOps & Cloud Computing

Hành trình của một đoạn code không dừng lại ở việc “chạy tốt trên máy tôi”. Hiểu về hạ tầng và tự động hóa là yếu tố then chốt của kỹ sư Backend hiện đại.

#🟢 Cấp độ: Người mới bắt đầu (Beginner)

Q1: Cloud Computing (Điện toán đám mây) là gì?

Trả lời: Là việc cung cấp các tài nguyên IT (server, storage, DB) qua Internet với mô hình trả tiền theo mức sử dụng (pay-as-you-go). Thay vì mua server vật lý, bạn thuê từ các nhà cung cấp như AWS, Azure, Google Cloud.

Q2: DevOps là gì?

Trả lời: Là sự kết hợp giữa Development (Phát triển) và Operations (Vận hành). Nó là một văn hóa và tập hợp các phương pháp giúp rút ngắn chu kỳ phát triển phần mềm và đảm bảo chất lượng cao.

Q3: Docker là gì? Tại sao nó giải quyết được vấn đề "chạy trên máy tôi"?

Trả lời: Docker đóng gói ứng dụng và tất cả các phụ thuộc (thư viện, OS config) vào một Container. Container này sẽ chạy giống hệt nhau trên bất kỳ máy nào có cài Docker.

Q4: AWS EC2 là gì?

Trả lời: Elastic Compute Cloud. Là dịch vụ cung cấp các máy chủ ảo (Virtual Servers) trên đám mây của Amazon.

Q5: AWS S3 dùng để làm gì?

Trả lời: Simple Storage Service. Là dịch vụ lưu trữ đối tượng (Object Storage) dùng để lưu ảnh, video, file backup với độ bền và quy mô cực lớn.

Q6: CI/CD viết tắt của từ gì?

Trả lời: Continuous Integration (Tích hợp liên tục) và Continuous Deployment/Delivery (Triển khai/Chuyển giao liên tục).

Q7: Nginx là gì?

Trả lời: Là một Web Server hiệu năng cao, đồng thời là Reverse Proxy, Load Balancer và HTTP Cache.

Q8: Biến môi trường (.env) quan trọng như thế nào trong DevOps?

Trả lời: Giúp tách biệt cấu hình (DB password, API keys) khỏi mã nguồn, cho phép ứng dụng chạy trên nhiều môi trường (Dev, Staging, Prod) mà không cần đổi code.

Q9: IP tĩnh (Static IP) và IP động (Dynamic IP) khác nhau thế nào?

Trả lời: Tĩnh: Không đổi (dùng cho server). Động: Thay đổi mỗi khi khởi động lại (dùng cho máy cá nhân). Trong AWS, IP tĩnh gọi là Elastic IP.

Q10: SSH dùng để làm gì?

Trả lời: Secure Shell. Là giao thức dùng để truy cập và điều khiển máy chủ từ xa một cách an toàn qua dòng lệnh.


#🟡 Cấp độ: Trung cấp (Intermediate)

Q1: Sự khác biệt giữa Docker Image và Docker Container.

Trả lời: Image là “bản vẽ” (blueprint) chứa code và môi trường (chỉ đọc). Container là một “thực thể” đang chạy được khởi tạo từ Image (có thể ghi).

Q2: Phân biệt IaaS, PaaS và SaaS.

Trả lời:

  • IaaS (Infrastructure): Thuê hạ tầng thô (AWS EC2).
  • PaaS (Platform): Thuê nền tảng để chạy app (Heroku, AWS Elastic Beanstalk).
  • SaaS (Software): Thuê phần mềm hoàn chỉnh (Gmail, Slack).
Q3: Giải thích về Docker Compose.

Trả lời: Công cụ dùng để định nghĩa và chạy các ứng dụng Docker đa container (Multi-container). Ví dụ: 1 file docker-compose.yml để chạy cả App, DB và Redis cùng lúc.

Q4: AWS RDS là gì? Tại sao dùng nó tốt hơn tự cài MySQL lên EC2?

Trả lời: Relational Database Service. AWS tự động hóa việc: backup, vá lỗi bảo mật, scale dung lượng, và hỗ trợ High Availability (Multi-AZ) chỉ bằng vài cú click.

Q5: Load Balancer (Cân bằng tải) hoạt động như thế nào?

Trả lời: Đứng trước các server, nhận request từ người dùng và phân phối tới các server đang rảnh phía sau để tránh quá tải cho 1 máy duy nhất.

Q6: Giải thích quy trình CI/CD cơ bản.

Trả lời: Code Push -> Trigger Jenkins/Github Actions -> Chạy Unit Test -> Build Docker Image -> Push to Registry -> Deploy to Server.

Q7: AWS IAM dùng để làm gì?

Trả lời: Identity and Access Management. Quản lý người dùng và quyền hạn truy cập vào các tài nguyên AWS theo nguyên tắc “Quyền hạn tối thiểu”.

Q8: "Infrastructure as Code" (IaC) là gì?

Trả lời: Quản lý hạ tầng (server, network) bằng code (như Terraform, CloudFormation). Giúp việc tạo hạ tầng có thể lặp lại, kiểm soát phiên bản và tự động hóa hoàn toàn.

Q9: Phân biệt Vertical Scaling và Horizontal Scaling.

Trả lời: Vertical: Tăng sức mạnh 1 máy (Thêm RAM/CPU). Horizontal: Thêm nhiều máy chạy song song. Đám mây ưu tiên Horizontal vì khả năng mở rộng vô hạn.

Q10: Container Registry là gì? (Ví dụ: Docker Hub, AWS ECR).

Trả lời: Nơi lưu trữ và quản lý các Docker Image sau khi được build, để các server deploy có thể tải về.


#🔴 Cấp độ: Nâng cao (Advanced)

Q1: Kubernetes (K8s) giải quyết vấn đề gì mà Docker không làm được?

Trả lời: Docker quản lý container lẻ. K8s điều phối (Orchestration) hàng nghìn container: tự động hồi phục khi lỗi (Self-healing), tự động scale, quản lý service discovery và cân bằng tải nội bộ.

Q2: Giải thích cơ chế "Blue-Green Deployment" và "Canary Deployment".

Trả lời:

  • Blue-Green: Chạy 2 bản cũ (Blue) và mới (Green) song song. Switch router sang Green 100%. Lỗi thì switch back cực nhanh.
  • Canary: Đưa bản mới cho 5% user dùng thử. Nếu ổn thì tăng dần lên 100%.
Q3: AWS Lambda và kiến trúc Serverless hoạt động như thế nào?

Trả lời: Bạn chỉ viết code (Function). AWS tự lo việc chạy code đó khi có event (request HTTP, file upload). Bạn không quản lý server và chỉ trả tiền cho thời gian thực thi (tính bằng mili giây).

Q4: Docker Networking: Phân biệt Bridge, Host và Overlay network.

Trả lời:

  • Bridge: Network mặc định cho container trên 1 host.
  • Host: Dùng trực tiếp network của máy host.
  • Overlay: Kết nối các container trên nhiều host khác nhau (dùng cho Docker Swarm hoặc K8s).
Q5: Giải thích khái niệm "Twelve-Factor App".

Trả lời: Bộ 12 quy tắc để xây dựng ứng dụng SaaS hiện đại, tối ưu cho môi trường Cloud và Deployment tự động (ví dụ: Stateless, Config in environment, logs as event streams…).

Q6: AWS VPC (Virtual Private Cloud) là gì? Giải thích Public Subnet và Private Subnet.

Trả lời: Mạng ảo riêng trên AWS. Public Subnet: Có thể truy cập từ Internet (Web server). Private Subnet: Không thể truy cập từ ngoài (Database), bảo mật tối đa.

Q7: GitOps là gì?

Trả lời: Dùng Git làm “Single Source of Truth” cho toàn bộ hạ tầng và ứng dụng. Mọi thay đổi ở Git sẽ được tự động đồng bộ xuống hệ thống thực tế (thường dùng ArgoCD trong K8s).

Q8: Phân tích cơ chế Multi-stage Build trong Docker.

Trả lời: Dùng nhiều câu lệnh FROM trong 1 Dockerfile. Stage 1: Build/Compile code (tốn nhiều thư viện nặng). Stage 2: Chỉ lấy file thực thi copy sang môi trường chạy siêu nhẹ. Giúp Image cuối cùng nhỏ gọn và an toàn hơn.

Q9: AWS Auto Scaling hoạt động dựa trên những chỉ số nào?

Trả lời: CPU Utilization, RAM usage, số lượng Request, hoặc lịch trình thời gian cụ thể. Nó tự động thêm/bớt server EC2 dựa trên tải thực tế.

Q10: Giải thích về "Zero Downtime Database Migration".

Trả lời: Kỹ thuật thay đổi cấu trúc DB mà không làm gián đoạn ứng dụng. Thường dùng chiến lược: 1. Thêm cột mới. 2. Code hỗ trợ cả 2 cột. 3. Copy data cũ sang mới. 4. Xóa cột cũ.


#🧠 Cấp độ: Kiến trúc sư (Architect)

Q1: Thiết kế hạ tầng Cloud cho ứng dụng Global có 50 triệu người dùng, đảm bảo High Availability.

Trả lời: Dùng kiến trúc Multi-Region. DNS Route 53 (Latency routing). CloudFront CDN. AWS EKS (Kubernetes) trên nhiều Availability Zones. Aurora Global Database. S3 replication.

Q2: Làm thế nào để xử lý việc "Stateful" trong môi trường Container (K8s)?

Trả lời: Dùng StatefulSet thay vì Deployment. Kết hợp với Persistent Volumes (EBS, EFS) để dữ liệu không bị mất khi Pod bị xóa và được mount lại đúng vào Pod mới.

Q3: Thiết kế quy trình Disaster Recovery (DR) cho hệ thống tài chính.

Trả lời: Chiến lược Pilot Light hoặc Warm Standby. Database liên tục replication sang Region khác. Backup định kỳ lên S3 Glacier. Có kịch bản tự động chuyển đổi DNS và hạ tầng khi Region chính sập.

Q4: Phân tích chi phí (FinOps) khi sử dụng On-demand vs Reserved vs Spot Instances trên AWS.

Trả lời: On-demand: Đắt nhất, linh hoạt. Reserved: Rẻ hơn 40-60%, cam kết dùng 1-3 năm. Spot: Rẻ nhất (giảm 90%), nhưng có thể bị AWS thu hồi bất cứ lúc nào (phù hợp cho worker xử lý job không gấp).

Q5: Thiết kế kiến trúc Microservices giao tiếp qua Service Mesh (Istio).

Trả lời: Dùng Sidecar pattern. Istio quản lý: Traffic shifting, bảo mật mTLS giữa các service, observability (tracing/metrics) mà không cần sửa code ứng dụng.

Q6: Làm thế nào để bảo mật hoàn toàn một hệ thống Container?

Trả lời: Quét lỗ hổng Image (Trivy), không chạy container bằng user root, dùng Network Policies để chặn traffic thừa, mã hóa secret (Vault/KMS), giám sát runtime (Falco).

Q7: Phân tích sự khác biệt giữa Monolith Deployment và Microservices Deployment.

Trả lời: Monolith: 1 pipeline, dễ quản lý nhưng chậm chạp. Microservices: Hàng trăm pipeline độc lập, đòi hỏi tự động hóa cực cao, quản lý phiên bản và khả năng tương thích ngược giữa các service.

Q8: Thiết kế hệ thống Centralized Logging cho môi trường phân tán.

Trả lời: Dùng bộ ELK Stack (Elasticsearch, Logstash, Kibana) hoặc EFK (Fluentd). Các container đẩy log ra stdout, một agent (Fluentbit) thu thập và gửi về cluster tập trung để phân tích.

Q9: Khi nào bạn sẽ dùng "Serverless" và khi nào dùng "Kubernetes"?

Trả lời: Serverless: Task ngắn hạn, tải không đều, muốn dev nhanh, không muốn quản lý hạ tầng. Kubernetes: App chạy lâu dài, cần kiểm soát sâu hệ thống, tải lớn và ổn định (tiết kiệm hơn serverless ở quy mô lớn).

Q10: Chiến lược tối ưu hóa CI/CD Pipeline cho hàng trăm developer.

Trả lời: Parallel testing, Build caching, dùng Self-hosted runner để tăng tốc I/O, chỉ build các module có thay đổi (Incremental builds), sử dụng Docker layer caching hiệu quả.


#💻 Practical Scenarios (Thực chiến)

S1: Docker container khởi động lỗi "Exec format error". Nguyên nhân?

Xử lý: Do sai kiến trúc CPU (ví dụ: build image trên máy Mac M1 (ARM) nhưng chạy trên server Intel (x86)). Cần dùng Docker Buildx để build cho đúng target architecture.

S2: Server AWS EC2 bị CPU 100% liên tục. Bạn xử lý thế nào?

Xử lý: 1. Dùng top/htop xem process nào chiếm. 2. Kiểm tra log web server xem có bị DDOS không. 3. Nếu do tải thực tế, nâng cấp instance (Vertical) hoặc thêm máy vào Auto Scaling group (Horizontal).


#🚨 MUST-KNOW

  • Cách Dockerizing một ứng dụng Laravel/Node.js.
  • Hiểu về Security Groups trong AWS (Firewall).
  • Biết cách đọc và hiểu cấu hình Nginx.

#⚠️ Pitfalls

  • Lưu dữ liệu vào trong Container mà không dùng Volume (mất sạch khi container restart).
  • Để lộ AWS Access Key trong mã nguồn đẩy lên Github.
  • Không giới hạn Resource (CPU/RAM) cho Container dẫn đến 1 container làm sập cả máy host.

#🧩 Tips & Tricks

  • Luôn sử dụng .dockerignore để tránh copy node_modules hoặc .git vào image, giúp giảm size image đáng kể.
  • Sử dụng Healthcheck trong Docker để Load Balancer tự động loại bỏ các container đang bị treo.

Biên soạn bởi Senior DevOps Architect & Cloud Specialist.

Bài viết liên quan