Giải mã "Bản đồ Microservices": Từ Request của User đến kiến trúc

1. Lớp Tiền sảnh: Đón tiếp và Điều phối (Gateway & CDN)
Request của người dùng không bao giờ bay thẳng vào server. Nó phải đi qua một "hàng rào bảo vệ" cực kỳ nghiêm ngặt:
CDN (Cloudflare): Đóng vai trò như một kho chứa hàng ở gần nhà user. Những file tĩnh như ảnh, CSS, JS sẽ được cache tại đây. User ở Sài Gòn sẽ lấy ảnh từ server Sài Gòn, không cần chạy ra tận server Mỹ.Load Balancer (Nginx): "Anh cảnh sát giao thông" điều tiết lưu lượng. Nếu bạn có 10 server backend, Nginx sẽ chia đều request để không ông nào bị "ngộp thở".API Gateway: Điểm chạm duy nhất. Nó làm nhiệm vụ xác thực (Auth), giới hạn tần suất (Rate Limiting) và gom nhóm các request trước khi đẩy vào bên trong.Service Discovery (Eureka/Zookeeper): Trong thế giới Microservices, các server mọc lên và chết đi liên tục. Eureka/Zookeeper giống như một cuốn danh bạ, giúp các service tìm thấy địa chỉ IP của nhau để nói chuyện.
2. "Cỗ máy" xử lý: Trái tim của hệ thống (Services Box)
Đây là nơi "phép thuật" xảy ra. Thay vì một khối code khổng lồ, chúng ta chia nhỏ thành các thành phần chuyên biệt:
- Message Broker (Kafka): "Bưu điện" của hệ thống. Khi Service A muốn báo cho Service B một việc gì đó nhưng không muốn đứng đợi phản hồi (Asynchronous), nó sẽ ném một message vào Kafka. Kafka cực kỳ mạnh mẽ trong việc xử lý hàng triệu message mỗi giây.
- Full-text Search (Elasticsearch): Như mình đã nói ở bài trước, nếu bạn cần tìm kiếm sản phẩm nhanh như Shopee, hãy dùng Elasticsearch thay vì
LIKE %...%trong SQL. - Cache (Redis/Memcached): "Bộ nhớ đệm" siêu tốc. Những dữ liệu ít thay đổi nhưng được đọc liên tục (như thông tin khuyến mãi, cấu hình hệ thống) sẽ được để ở đây để giảm tải cho Database.
- Internal Communication (gRPC/Thrift): Các service bên trong nói chuyện với nhau không dùng REST (JSON) chậm chạp, mà dùng các giao thức RPC (Remote Procedure Call) để đạt tốc độ tối đa.
3. Lớp Lưu trữ: "Mỗi người một vẻ" (Storage Layer)
Một hệ thống hiện đại không bao giờ dùng duy nhất một loại database. Chúng ta dùng Polyglot Persistence:
- Relational DB (MySQL/PostgreSQL): Dành cho dữ liệu cần tính nhất quán cao (ACID) như Đơn hàng, Ví tiền, User.
- Wide-column DB (Cassandra): "Quái vật" lưu trữ cho các tập dữ liệu khổng lồ và cần khả năng ghi cực nhanh (như lịch sử hành trình, log hoạt động).
- Object Store (Amazon S3): Nơi lưu trữ những thứ "nặng đô" như hình ảnh sản phẩm, video, file log nén.
4. Quản lý & Giám sát: "Tai mắt" của Developer
Hệ thống chạy mượt là một chuyện, nhưng khi nó "lăn ra ốm", bạn cần biết tại sao:
- Kubernetes (K8s): "Thuyền trưởng" điều phối các container. Nó tự động hồi sinh các service bị chết và mở rộng (Scale) hệ thống khi lượng user tăng vọt.
- Prometheus & Elastic Stack: Thu thập các chỉ số (Metrics) và Nhật ký (Logs). Nếu CPU tăng vọt hay RAM bị tràn, Prometheus sẽ hú còi báo động ngay cho bạn qua Slack.
Lời kết
Mô hình này nhìn thì phức tạp, nhưng nó giải quyết được bài toán Scalability (Khả năng mở rộng) và Fault Tolerance (Khả năng chịu lỗi). Nếu một service chết, các service khác vẫn chạy bình thường, và user có thể thậm chí không nhận ra.
Tuy nhiên, "cái giá của sự tự do" là sự phức tạp trong việc vận hành và debug. Hãy cân nhắc kỹ quy mô dự án trước khi "đổ đốn" vào toàn bộ stack này nhé!
All rights reserved