0

[AWS Series - Bài 2] IaaS vs PaaS vs SaaS - Đâu là bến đỗ "chân ái" cho dân Backend?

Chào anh em, ở bài trước chúng ta đã thông não với nhau rằng "Lên mây" bản chất là đi thuê hạ tầng của AWS. Nhưng cái "siêu thị" AWS này lại có cách bán hàng rất dị. Bạn có thể thuê nguyên một mảnh đất trống về tự xây nhà, hoặc thuê một căn hộ full nội thất chỉ việc xách vali vào ở.

Trong thế giới Cloud, mức độ "tự lo" của bạn được chia thành 3 mô hình chính: IaaS, PaaSSaaS. Là một Backend Engineer, nếu chọn sai mô hình, nhẹ thì anh em sẽ gánh một đống technical debt (nợ kỹ thuật) và maintain hộc máu; nặng thì công ty "đốt" tiền server vỡ nợ. Hôm nay, chúng ta sẽ mổ xẻ "hạng nặng" 3 khái niệm này để xem đâu mới là chân ái cho các hệ thống từ Monolith đến Microservices.

1. IaaS (Infrastructure as a Service) - Quyền lực tối thượng, trách nhiệm nặng nề

Bản chất: AWS cho bạn thuê hạ tầng "cứng" ảo hóa (Server, Network, Storage). Từ hệ điều hành (OS) trở lên là việc của bạn.

Đại diện trên AWS: EC2 (Máy chủ ảo), VPC (Mạng ảo), EBS (Ổ cứng ảo).

Góc nhìn Backend chuyên sâu:

IaaS là nơi bạn có toàn quyền kiểm soát (Full Control). Giả sử bạn đang viết một service bằng Golang xử lý hàng triệu connection WebSocket đồng thời. Bạn cần chọc sâu vào OS, tinh chỉnh lại các tham số kernel (như sysctl, tcp_tw_reuse, file descriptors) để tối ưu hiệu năng mạng. IaaS (EC2) cho phép bạn làm điều đó.

Hoặc team bạn đang muốn tự build một cụm Apache Kafka hoặc Elasticsearch custom thay vì dùng dịch vụ managed đắt đỏ của AWS. Bạn sẽ cần EC2 để tự cấu hình cluster, tự lo chuyện chia shard, replica.

Nỗi đau (Trade-off): Quyền lực đi kèm trách nhiệm. Bạn phải tự lo OS patch, security update, cấu hình firewall (iptables), tự setup load balancer ở tầng server và đêm mất ngủ nếu ổ cứng bị full (disk space alert).

Code Demo: Tự động hóa việc tạo EC2 cài sẵn Docker bằng User-Data script.

aws ec2 run-instances \
    --image-id ami-0abcdef1234567890 \
    --instance-type c5.large \
    --key-name ProductionKey \
    --security-group-ids sg-backend-tier \
    --user-data \
'#!/bin/bash
apt-get update -y
apt-get install -y docker.io
systemctl start docker
systemctl enable docker
docker run -d -p 6379:6379 --name cache-layer redis:alpine'

Chỉ với 1 command, bạn có ngay một con server c5.large (chuyên xử lý compute) chạy sẵn một node Redis.

2. PaaS (Platform as a Service) - "Code là chân lý, hạ tầng để AWS lo"

Bản chất: AWS cung cấp sẵn môi trường chạy (Runtime), hệ điều hành và tự động scale. Bạn chỉ việc ném source code hoặc Docker image lên. Đại diện trên AWS: AWS Elastic Beanstalk, Amazon ECS (Fargate), Amazon RDS (Database).

Góc nhìn Backend chuyên sâu: Đây là mô hình được dân dev yêu thích nhất hiện nay. Giả sử bạn có một cục Laravel API hoặc một mớ Node.js Microservices. Bạn không muốn tốn cả ngày cấu hình Nginx, PHP-FPM hay PM2. Bạn chỉ cần đóng gói code vào Docker Container và đẩy lên ECS Fargate. AWS sẽ tự tìm máy chủ rảnh rỗi để nhét container của bạn vào chạy, tự động scale out (tạo thêm container) khi CPU > 70%, và scale in khi traffic giảm.

Một ví dụ kinh điển khác của PaaS là Amazon RDS. Thay vì thuê EC2 rồi hì hục cài PostgreSQL, cấu hình Master-Slave replication, setup cronjob backup (IaaS); bạn dùng RDS. AWS cấp cho bạn một endpoint DB, tự động backup hàng ngày, hỏng Master tự động switch sang Standby trong vài giây.

Nỗi đau (Trade-off): Bạn mất đi một phần quyền kiểm soát. Nếu môi trường chạy (runtime) của PaaS không support phiên bản thư viện C++ cũ kỹ mà app bạn đang dùng, bạn sẽ gặp rắc rối. Chi phí của PaaS cũng sẽ nhỉnh hơn IaaS một chút (phí dịch vụ quản lý).

Code Demo: Cấu hình một file docker-compose.yml định nghĩa kiến trúc để đẩy lên ECS bằng tool ecs-cli.

version: '3'
services:
  payment-service:
    image: my-repo/golang-payment:v1.2
    ports:
      - "8080:8080"
    environment:
      - DB_HOST=production-db.rds.amazonaws.com
    logging:
      driver: awslogs
      options: 
        awslogs-group: /ecs/payment-service
        awslogs-region: ap-southeast-1

3. SaaS (Software as a Service) - Đứng trên vai người khổng lồ

Bản chất: Sử dụng luôn phần mềm/dịch vụ đã hoàn thiện của AWS. Không quản lý code, không quản lý server, chỉ gọi API và xài. Đại diện trên AWS: Amazon Cognito (Quản lý User), Amazon SQS (Message Queue), Amazon SES (Gửi Email).

Góc nhìn Backend chuyên sâu: Tại sao phải phát minh lại cái bánh xe? Khi hệ thống cần tính năng đăng nhập SSO, Quên mật khẩu, Xác thực 2 bước (MFA), thay vì tự code bảng users rồi loay hoay băm mật khẩu, mã hóa token, bạn tích hợp thẳng Amazon Cognito.

Khi thiết kế hệ thống Microservices cần giao tiếp bất đồng bộ, thay vì tự dựng RabbitMQ server (IaaS/PaaS) và lo chuyện message bị mất khi server chết, bạn gọi API đẩy message thẳng vào Amazon SQS (SaaS). SQS đảm bảo message của bạn được lưu trữ an toàn (durability) trên nhiều Availability Zone.

Code Demo: Bắn một message (event) vào SQS queue bằng Node.js SDK (SaaS usage).

const { SQSClient, SendMessageCommand } = require("@aws-sdk/client-sqs");

const sqsClient = new SQSClient({ region: "ap-southeast-1" });

async function publishOrderEvent(orderData) {
  const command = new SendMessageCommand({
    QueueUrl: "https://sqs.ap-southeast-1.amazonaws.com/123456789012/OrderEventsQueue",
    MessageBody: JSON.stringify(orderData),
    MessageGroupId: "PaymentGroup", // Đảm bảo tính tuần tự (FIFO)
    MessageDeduplicationId: orderData.transaction_id // Xử lý Idempotency, tránh lặp message
  });

  try {
    const response = await sqsClient.send(command);
    console.log("Đã đẩy event thành công, MessageId:", response.MessageId);
  } catch (err) {
    console.error("Lỗi khi gọi SaaS SQS:", err);
  }
}

Tổng kết: Đâu là bến đỗ chân ái?

Sự thật là: Không có chân ái duy nhất. Một hệ thống Backend hiện đại (đặc biệt là Microservices) là sự kết hợp của cả ba:

  1. IaaS: Dùng cho các core system cần tối ưu cực độ ở tầng OS, hoặc phần mềm legacy chưa thể container hóa.
  2. PaaS: Dành cho 90% các business services hiện nay. Cứ đóng gói vào Docker rồi ném lên ECS/EKS hoặc dùng RDS cho Database. Focus vào logic nghiệp vụ.
  3. SaaS: Dùng cho các bài toán tiện ích xung quanh (Gửi mail SES, Auth Cognito, Queue SQS) để giảm tải công sức vận hành.

Tóm lại, triết lý của dân Backend hiện đại là: Cái gì AWS làm tốt hơn và rẻ hơn công sức mình tự build/maintain, hãy dùng dịch vụ managed (PaaS/SaaS). Hãy tiết kiệm não để xử lý business logic!

Hé lộ bài tiếp theo...

Bây giờ bạn đã biết chọn mua loại "căn hộ" nào trên AWS rồi. Nhưng khoan đã, bạn muốn xây nhà trên mảnh đất công cộng ai cũng vào được (dễ bị dòm ngó nhưng rẻ), hay mua đứt một hòn đảo riêng tư khép kín (bảo mật tuyệt đối nhưng đắt lòi mắt)?

Hẹn anh em ở bài học tiếp theo, chúng ta sẽ mổ xẻ kiến trúc mạng cơ bản nhất: [AWS Series - Bài 3] Public vs Private vs Hybrid Cloud - Giấu kín hệ thống của bạn trước giông bão Internet.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí