Facebook PixelCloud-Native là gì? So sánh Kiến trúc Truyền thống và Cloud-Native | 200Lab Blog

Cloud-Native là gì? So sánh Kiến trúc Truyền thống và Cloud-Native

18 Mar, 2025

Cloud-native là phương pháp xây dựng, vận hành các ứng dụng tối ưu cho môi trường cloud ngay từ ban đầu, tận dụng tối đa các lợi ích từ cloud

Cloud-Native là gì? So sánh Kiến trúc Truyền thống và Cloud-Native

Mục Lục

1. Cloud-Native là gì?

Cloud-Native không chỉ đơn giản là việc di chuyển ứng dụng từ máy chủ vật lý lên cloud. Đây là phương pháp xây dựng và vận hành các ứng dụng tối ưu cho môi trường cloud ngay từ ban đầu, tận dụng tối đa các lợi ích mà cloud mang lại:

  • Tốc độ: Đẩy nhanh quy trình phát triển và triển khai với các công cụ tự động hóa.
  • Khả năng mở rộng: Dễ dàng scale ứng dụng theo nhu cầu người dùng bằng cách thêm hoặc giảm instance.
  • Khả năng phục hồi: Ứng dụng tự động xử lý và phục hồi sau sự cố mà không làm gián đoạn toàn hệ thống.
  • Hiệu quả chi phí: Sử dụng tài nguyên một cách tối ưu, chỉ trả cho những gì bạn đang dùng.
  • Tính linh hoạt: Ứng dụng dễ dàng thay đổi, mở rộng hoặc triển khai các tính năng mới mà không ảnh hưởng đến toàn bộ hệ thống.

Để đạt được những điều này, Cloud-Native dựa trên một số nguyên tắc và công nghệ cốt lõi mà chúng ta sẽ cùng tìm hiểu trong phần tiếp theo bên dưới.

2. Các nguyên tắc cốt lõi trong kiến trúc Cloud-Native

2.1. Microservices Architecture

Microservices là nền tảng của cloud-native, ứng dụng được chia nhỏ thành các dịch vụ độc lập, chuyên biệt, mỗi dịch vụ đảm nhận một chức năng cụ thể.

Các nguyên tắc thiết kế microservices:

  • Single Responsibility: Mỗi service phải đảm nhận duy nhất một trách nhiệm chính, tránh ôm đồm nhiều nhiệm vụ.
  • Domain-Driven Design: Việc phân chia các dịch vụ dựa trên từng business domain cụ thể trong hệ thống.
  • Decentralized Data Management: Mỗi dịch vụ tự quản lý cơ sở dữ liệu của mình, không dùng chung với các dịch vụ khác.
  • Independent Deployability: Các dịch vụ có thể được triển khai độc lập, đảm bảo không làm gián đoạn hoặc ảnh hưởng đến các dịch vụ còn lại.

Thay vì xây dựng một ứng dụng thương mại điện tử monolith, bạn có thể tách thành các microservices riêng biệt, như:

Txt
e-commerce-system/  
├── product-service/        # Quản lý catalog sản phẩm  
├── inventory-service/      # Quản lý tồn kho  
├── order-service/          # Xử lý đơn hàng  
├── payment-service/        # Xử lý thanh toán  
├── notification-service/   # Gửi thông báo  
├── user-service/           # Quản lý người dùng  
└── api-gateway/             

2.2. Containers và Container Orchestration

Containers đảm bảo ứng dụng có thể chạy nhất quán trên mọi môi trường, từ máy tính cá nhân đến production.

Kiến thức cơ bản về Containers:

  • Container không phải là lightweigh VM : Container là cách cô lập process trên cùng một kernel, không giống việc mô phỏng toàn bộ hệ điều hành như VM (Virtual Machine).
  • Container image: Bao gồm mã nguồn ứng dụng, runtime, thư viện và các dependencies cần thiết để chạy ứng dụng.
  • Immutable Infrastructure: Container được thiết kế mang tính bất biến, giúp loại bỏ vấn đề "chạy được trên máy tôi nhưng không chạy trên môi trường khác".
Bash
# Multi-stage build để giảm kích thước image  
FROM node:16-alpine AS builder  
WORKDIR /app  
COPY package*.json ./  
RUN npm ci  
COPY . .  
RUN npm run build  

FROM node:16-alpine  
WORKDIR /app  
COPY --from=builder /app/dist ./dist  
COPY --from=builder /app/package*.json ./  
RUN npm ci --only=production  
USER node  
EXPOSE 3000  
CMD ["node", "dist/main.js"]  

2.3. DevOps và CI/CD Pipelines

CI/CD là xương sống khi phát triển cloud-native, giúp tự động hóa quy trình phát triển, kiểm thử và triển khai.

Các khái niệm chính trong CI/CD:

  • Continuous Integration (CI): Tự động build và kiểm thử mã nguồn ngay khi có thay đổi (commit/push) vào repository.
  • Continuous Delivery (CD): Tự động triển khai ứng dụng vào các môi trường staging hoặc testing sau khi CI hoàn tất thành công.
  • Continuous Deployment: Mở rộng từ Continuous Delivery với việc tự động release ứng dụng trực tiếp lên production mà không cần can thiệp thủ công.

GitOps Workflow:

  • Git repository là "single source of truth": Toàn bộ source code, cấu hình hạ tầng và trạng thái hệ thống đều được quản lý tập trung trong Git repository.
  • Pull-based deployments: Deployment thông qua các operators dựa trên mô hình pull, đảm bảo cluster đồng bộ với trạng thái được định nghĩa trong repository.
  • Infrastructure as Code (IaC): Toàn bộ infrastructure được định nghĩa dưới dạng mã nguồn, giúp tái sử dụng và quản lý dễ dàng.

CI/CD Pipeline với GitHub Actions:

Bash
name: CI/CD Pipeline  

on:  
  push:  
    branches: [ main ]  
  pull_request:  
    branches: [ main ]  

jobs:  
  build-and-test:  
    runs-on: ubuntu-latest  
    steps:  
      - uses: actions/checkout@v2  
      - name: Set up JDK 17  
        uses: actions/setup-java@v2  
        with:  
          java-version: '17'  
          distribution: 'adopt'  
      - name: Unit Tests  
        run: ./mvnw test  
      - name: Integration Tests  
        run: ./mvnw verify -DskipUnitTests  
      - name: Build & Push Docker Image  
        uses: docker/build-push-action@v2  
        with:  
          context: .  
          push: true  
          tags: ${{ secrets.DOCKER_REGISTRY }}/microservice:${{ github.sha }}  
          
  security-scan:  
    needs: build-and-test  
    runs-on: ubuntu-latest  
    steps:  
      - name: Scan Docker image  
        uses: aquasecurity/trivy-action@master  
        with:  
          image-ref: ${{ secrets.DOCKER_REGISTRY }}/microservice:${{ github.sha }}  
          format: 'table'  
          exit-code: '1'  
          ignore-unfixed: true  
          severity: 'CRITICAL,HIGH'  
          
  deploy:  
    needs: [build-and-test, security-scan]  
    if: github.ref == 'refs/heads/main' && github.event_name == 'push'  
    runs-on: ubuntu-latest  
    steps:  
      - name: Configure Kubernetes  
        uses: azure/k8s-set-context@v1  
        with:  
          kubeconfig: ${{ secrets.KUBE_CONFIG }}  
      - name: Deploy to Kubernetes  
        uses: azure/k8s-deploy@v1  
        with:  
          manifests: |  
            k8s/deployment.yaml  
            k8s/service.yaml  
          images: |  
            ${{ secrets.DOCKER_REGISTRY }}/microservice:${{ github.sha }}  

3. So sánh Cloud-Native và Phương pháp tiếp cận truyền thống

Yếu tố Kiến trúc Truyền thống Kiến trúc Cloud-Native
Cập nhật ứng dụng Dừng toàn bộ hệ thống → Cập nhật → Khởi động lại Cập nhật từng service độc lập, không downtime
Xử lý lỗi Nếu có lỗi → Toàn bộ hệ thống có thể bị ảnh hưởng Lỗi được cô lập trong một service, không ảnh hưởng services khác
Mở rộng quy mô Vertical scaling (nâng cấp máy chủ) Horizontal scaling (thêm nhiều instances)
Triển khai mới Thường mất nhiều giờ hoặc ngày Tự động hóa, mất vài phút
Phát triển Một codebase lớn, khó quản lý Codebase nhỏ, dễ quản lý

4. Kết luận

Cloud-native không chỉ là một công nghệ cụ thể, mà là một tập hợp các nguyên tắc, patterns và practices giúp tận dụng triệt để lợi ích của nền tảng đám mây.

Bài viết liên quan

Đăng ký nhận thông báo

Đừng bỏ lỡ những bài viết thú vị từ 200Lab