- Published on
Thiết kế Kiến trúc Ứng dụng Microservices Serverless với Knative, KEDA và Dapr
- Authors
- Name
- Bạch Đăng Tuấn
- Occupation
- Kỹ sư công nghệ thông tin
- Zalo: 0934.01.07.04
Mục Lục
- Giới thiệu
- Tổng quan về các công nghệ
- Lý do kết hợp Knative, KEDA và Dapr
- Kiến trúc tổng thể hệ thống
- Thiết kế thành phần
- Luồng dữ liệu và scaling
- CI/CD và monitoring
- Kết luận
Giới thiệu
Serverless không chỉ là việc chạy code không cần quản lý server, mà còn là một triết lý thiết kế ứng dụng tối ưu tài nguyên, phản ứng theo sự kiện và tự động scale. Trong môi trường Kubernetes, ba công cụ nổi bật để hiện thực hóa điều này là Knative, KEDA và Dapr.
Tổng quan về các công nghệ
Knative
- Cung cấp khả năng autoscale HTTP service, routing thông minh theo revision.
- Gồm 2 thành phần chính: Serving (scale HTTP app) và Eventing (xử lý sự kiện CloudEvents).
KEDA
- Một scaler nhẹ cho Kubernetes, cho phép scale từ 0 theo các event source như Kafka, RabbitMQ, Prometheus, v.v.
- Tích hợp với HPA và không thay đổi cách viết code hiện có.
Dapr
- API sidecar cho microservices: Pub/Sub, State Store, Binding, Secret, v.v.
- Hỗ trợ bất kỳ ngôn ngữ nào, giảm khối lượng tích hợp cross-cutting.
Vì sao kết hợp Knative + KEDA + Dapr?
Công cụ | Chức năng | Điểm mạnh |
---|---|---|
Knative | HTTP routing, autoscale | Tối ưu frontend/API, hỗ trợ scale-to-zero |
KEDA | Scale background task | Tốt cho queue, cron, job |
Dapr | Kết nối service, pub/sub, state | Giảm boilerplate, chuẩn hóa interop |
Sự kết hợp này tạo nên một nền tảng:
- Scale ứng dụng theo lưu lượng và theo sự kiện.
- Quản lý dịch vụ, event và state hiệu quả.
- Hạn chế viết logic phức tạp, tập trung vào business logic.
Kiến trúc tổng thể hệ thống
+------------------+
| Người dùng |
+--------+---------+
|
v
+---------------------+ +-----------------------+
| Knative Gateway | -----> | Knative Service |
| (Istio/Kourier) | | (Frontend API) |
+---------------------+ +-----------------------+
|
v
+---------------+
| Dapr Pub/Sub |
+---------------+
|
+-------------+-------------+
| |
+---------------+ +--------------------+
| BackgroundSvc | <-------- | Queue (e.g. Kafka) |
| (via KEDA) | +--------------------+
+---------------+
Thiết kế thành phần
1. Frontend API
- Triển khai bằng Knative Serving.
- Nhận request HTTP từ client (browser, mobile).
- Gửi message vào Pub/Sub qua Dapr Binding hoặc HTTP → Topic.
2. Pub/Sub Messaging
- Dapr Pub/Sub dùng Redis, Kafka, NATS...
- Định tuyến message đến các service background.
3. Background Worker
- Là deployment hoặc job có
ScaledObject
do KEDA quản lý. - Scale theo queue length (Kafka lag, Redis key, Prometheus metric).
4. State Store
- Dapr hỗ trợ stateful operations (set/get) với Redis, CosmosDB...
- Giúp microservice lưu trạng thái tạm không cần database phức tạp.
Luồng dữ liệu và scaling
- User gọi API → Knative Service bật pod (nếu đang sleep).
- API gửi message (CloudEvent hoặc raw JSON) đến Dapr Pub/Sub.
- Message vào queue Kafka/Redis.
- KEDA nhận biết queue đang có dữ liệu → Scale Background Worker.
- Worker xử lý message, có thể lưu state hoặc gửi tiếp sự kiện.
CI/CD và Monitoring
CI/CD
- Dùng ArgoCD hoặc Tekton:
- Knative Services apply YAML theo revision.
- KEDA ScaledObject tự động hóa cấu hình scale.
- Dapr component qua Helm chart hoặc Kustomize.
Monitoring
Prometheus thu thập:
- HTTP traffic (Knative).
- Scaling metrics (KEDA).
- Message count, error từ Dapr bindings.
Grafana: vẽ dashboard.
Alertmanager: cảnh báo khi worker overload hoặc pod không lên.
Kết luận
Bằng cách phối hợp Knative, KEDA và Dapr, bạn xây dựng được một kiến trúc serverless microservices hiện đại, có thể:
- Tự động scale theo nhu cầu.
- Hỗ trợ HTTP + background task.
- Kết nối service nhanh chóng, tiêu chuẩn.
- Giảm chi phí, tăng tốc phát triển.
Đây là nền tảng phù hợp cho doanh nghiệp triển khai hệ thống cloud-native có khả năng phát triển lâu dài.