Microservices và Serverless: Những “Em bé” trong thế giới phần mềm
1. Giới thiệu: Chuyện “Chia để trị” thời công nghệ 4.0
Nếu ứng dụng Monolithic truyền thống là một chú voi to đùng khó di chuyển, thì Microservices giống như một đàn kiến – nhỏ bé nhưng làm việc cực kỳ hiệu quả. Còn Serverless? Tưởng tượng bạn có một đội quân “Ninja” sẵn sàng xuất hiện khi cần và… biến mất khi xong việc! 🥷
Tại sao chúng lại hot như vậy?
- Vì ai cũng thích “nhỏ mà có võ”.
- Tiết kiệm chi phí (Ai cũng thích điều này!).
- Dễ “nâng cấp” như việc bỏ đồ cũ đi và thêm vào đồ mới trong tủ quần áo.
2. Microservices: Khi phần mềm biết “chia tách”
Định nghĩa:
Microservices là một kiểu kiến trúc phần mềm trong đó ứng dụng được chia thành các service độc lập, nhỏ gọn (Microservice), mỗi service:
- Thực hiện một chức năng riêng biệt.
- Có giao diện và cách thức hoạt động được xác định rõ ràng.
- Được triển khai trên server riêng, giúp dễ dàng nâng cấp và mở rộng quy mô.
Ví dụ: Microservices giống như một nhà hàng buffet – mỗi món ăn được nấu ở một quầy riêng, có đầu bếp riêng, nhưng tất cả đều phục vụ cho một bữa ăn ngon!
So sánh với Monolithic:
Monolithic = Giỏ trứng (rớt một phát là vỡ hết).
Microservices = Tủ lạnh, vỉ trứng, giỏ trứng (rớt một quả vẫn còn quả ở chỗ khác).
Ưu điểm:
- Tính độc lập cao: Các dịch vụ hoạt động độc lập, dễ triển khai và cập nhật mà không ảnh hưởng đến toàn bộ hệ thống.
- Khả năng mở rộng (scaling): Chỉ cần scale dịch vụ nào cần nhiều tài nguyên, tiết kiệm chi phí hơn so với Monolithic.
- Độ tin cậy: Lỗi ở một dịch vụ không làm gián đoạn toàn bộ hệ thống, tăng tính ổn định.
- Team làm việc độc lập: Nhiều nhóm có thể phát triển đồng thời các dịch vụ khác nhau, tăng tốc độ phát triển.
Nhược điểm:
- Phức tạp trong quản lý: Cần quản lý nhiều service, bao gồm triển khai, theo dõi và xử lý lỗi.
- Khó khăn trong giao tiếp: Các service giao tiếp qua API hoặc messaging dễ phát sinh lỗi nếu không đồng bộ.
- Chi phí cao: Yêu cầu tài nguyên nhiều hơn, cả về kỹ thuật (hạ tầng, công cụ) lẫn nhân sự (kiến thức về phát triển và vận hành).
- Thách thức khi debug: Xác định nguyên nhân lỗi trong một hệ thống phân tán đòi hỏi nhiều công cụ và kỹ năng hơn.
Hình mô tả lộ trình Microservices cho nhà phát triển.
3. Serverless: Câu chuyện “Không nhà không cửa” nhưng vẫn sống tốt!
Định nghĩa:
Serverless là môi trường, nền tảng thực thi ứng dụng và dịch vụ mà không phải quan tâm đến máy chủ. Ứng dụng serverless không cần phải quan tâm việc phân bổ, quản lý tài nguyên của hệ điều hành, và không quan tâm các vấn đề về nâng cấp và bảo mật. Chỉ tập trung phát triển sản phẩm, việc còn lại về vận hành sẽ để nền tảng này đảm nhiệm.
Serverless giống như ở nhà thuê cao cấp – bạn chỉ cần ở và trả tiền, mọi thứ khác đã có người lo!
Các dịch vụ phổ biến:
- AWS Lambda.
- Google Cloud Functions.
- Azure Functions.
4. Kết hợp Microservices và Serverless: Như cặp đôi hoàn hảo!
Giống như cà phê và sữa đặc, Microservices và Serverless là cặp đôi sinh ra để dành cho nhau. Khi kết hợp, chúng mang lại 3 lợi ích tuyệt vời:
- Tối ưu chi phí vận hành: Chỉ trả tiền cho những gì thực sự sử dụng, không còn lãng phí tài nguyên. Điều này khiến ban lãnh đạo luôn nở nụ cười mãn nguyện.
- Khả năng mở rộng linh hoạt: Hệ thống dễ dàng đáp ứng mọi nhu cầu tăng trưởng của doanh nghiệp. Khách hàng hài lòng vì dịch vụ luôn mượt mà, ổn định.
- Vận hành đơn giản: Không còn những đêm trắng lo lắng về server. Đội ngũ phát triển có thể tập trung vào việc tạo ra các tính năng giá trị thay vì đau đầu với hạ tầng.
5. Microservices trong ứng dụng E-commerce
Để hiểu và xây dựng 1 hệ thống E-commerce đơn giản thì mỗi service là một project độc lập, có database riêng và có thể deploy riêng biệt.
Hình hệ thống thương mại điện tử áp dụng Microservices.
Hệ thống thương mại điện tử của chúng tôi được xây dựng với 5 dịch vụ chủ chốt:
- Dịch vụ “Quản lý sản phẩm” (Service Product): đảm nhiệm việc lưu trữ thông tin và hình ảnh sản phẩm trong cơ sở dữ liệu. Dịch vụ này xử lý mọi yêu cầu xem và duyệt sản phẩm từ người dùng.
- Dịch vụ “Giỏ hàng” (Service Cart): giúp khách thêm bớt sản phẩm vào giỏ. Khi có thay đổi, thông tin sẽ được cập nhật vào cơ sở dữ liệu và thông báo cho các dịch vụ khác qua Message Broker.
- Dịch vụ “Đơn hàng” (Service Order): xử lý toàn bộ quy trình từ lúc tạo đơn đến giao hàng. Dịch vụ này quản lý trạng thái đơn hàng và thông tin thanh toán trong cơ sở dữ liệu riêng.
- Dịch vụ “Tài khoản” (Service Account): xử lý đăng nhập, đăng ký và bảo mật thông tin khách hàng. Dữ liệu người dùng được lưu trữ an toàn và chia sẻ khi cần với các dịch vụ khác.
- Dịch vụ “Tìm kiếm” (Service Search): giúp người dùng tìm sản phẩm nhanh chóng. Hệ thống tối ưu tốc độ tìm kiếm bằng cách lập chỉ mục và lưu trữ tạm thời.
Tất cả được kết nối qua:
- Gateway: Điểm tiếp nhận và phân phối yêu cầu từ người dùng đến đúng dịch vụ
- Message Broker: Đảm bảo trao đổi thông tin giữa các dịch vụ luôn nhất quán
Mỗi dịch vụ có cơ sở dữ liệu riêng và hoạt động độc lập, tạo nên một hệ thống linh hoạt và dễ mở rộng.
6. Serverless với AWS Lambda
Dịch vụ Serverless: Xử lý hình ảnh tự động cho sàn thương mại điện tử
Hình mô tả Serverless xử lý hình ảnh cho website bán hàng.
Bước 1: Người dùng tải ảnh lên S3 (service lưu trữ của Amazon): Người dùng hoặc hệ thống khác tải hình ảnh lên một S3 bucket.
Bước 2: S3 gửi thông báo sự kiện: Sau khi ảnh được tải lên, S3 kích hoạt SNS để gửi thông báo đến các dịch vụ khác.
Bước 3: Lambda được kích hoạt:
- SNS kích hoạt Lambda function.
- Lambda xử lý hình ảnh, ví dụ: thay đổi kích thước, nén, hoặc chuyển đổi định dạng.
Bước 4: Lưu hình ảnh đã xử lý vào S3: Hình ảnh sau xử lý được lưu vào một S3 bucket khác.
Bước 5: Theo dõi logs trong CloudWatch: Quá trình xử lý và lỗi (nếu có) được ghi lại trong CloudWatch Logs để giám sát.
7. Microservices và Serverless: Giải pháp cho doanh nghiệp Việt Nam.
Trong bối cảnh chuyển đổi số tại Việt Nam, nhiều doanh nghiệp đang đối mặt với thách thức trong việc mở rộng quy mô hệ thống để đáp ứng nhu cầu cao điểm. Điển hình như các sàn thương mại điện tử trong các dịp sale lớn (ví dụ ngày 12/12 sắp tới), các ứng dụng giao hàng vào giờ cao điểm, hay các ứng dụng ngân hàng số vào cuối tháng. Để giải quyết các vấn đề này, nhiều doanh nghiệp lớn đã áp dụng kiến trúc Microservices và công nghệ Serverless để tăng tính linh hoạt, khả năng mở rộng và tối ưu hóa hiệu năng.
7.1. VNG Cloud
VNG Cloud với kinh nghiệm trong lĩnh vực công nghệ đã áp dụng:
- Kubernetes để quản lý và điều phối các container, giúp tối ưu tài nguyên hệ thống và đảm bảo tính ổn định cho các ứng dụng.
- Microservices để triển khai các dịch vụ nhỏ và độc lập trên nền tảng game của họ, tăng khả năng mở rộng và cải thiện thời gian triển khai tính năng mới.
- Serverless cho việc xử lý các tác vụ như gửi thông báo, cho phép hệ thống tự động mở rộng theo nhu cầu và giảm chi phí vận hành.
7.2. MoMo
Ví điện tử MoMo là một ví dụ tiêu biểu về cách ứng dụng Microservices trong lĩnh vực tài chính. Hệ thống của họ bao gồm các dịch vụ như:
- Payment Service (Dịch vụ thanh toán): Xử lý giao dịch, đảm bảo tài khoản người dùng đủ số dư trước khi thanh toán và ghi nhận thông tin giao dịch.
- User Authentication Service (Dịch vụ xác thực người dùng): Đảm bảo thông tin đăng nhập và bảo mật.
- Transaction Processing Service (Dịch vụ xử lý giao dịch): Quản lý quy trình xử lý giao dịch một cách trơn tru, đảm bảo tính chính xác và an toàn.
- Promotion Service (Dịch vụ khuyến mãi): Cung cấp các chương trình ưu đãi tùy chỉnh theo nhu cầu người dùng.
Hệ thống Microservices của MoMo giúp các dịch vụ hoạt động độc lập nhưng vẫn liên kết hiệu quả với nhau. Điều này không chỉ cải thiện hiệu năng mà còn cho phép dễ dàng bảo trì và nâng cấp từng phần của hệ thống.
8. Kết luận
Microservices và Serverless giống như “câu chuyện cổ tích hiện đại” trong ngành phần mềm và đang trở thành lựa chọn phổ biến cho các doanh nghiệp muốn trong xu hướng chuyển đổi số tại Việt Nam:
- Giải quyết được nhiều vấn đề của Monolithic.
- Tiết kiệm chi phí, tăng hiệu suất.
- Xu hướng tương lai (hiện tại đang cực thịnh hành 😉).
- Scale hệ thống một cách linh hoạt.
- Tối ưu chi phí vận hành.
- Tăng tốc độ phát triển sản phẩm.
Lời khuyên cho doanh nghiệp Việt:
- Bắt đầu với các service độc lập nhỏ.
- Sử dụng các managed services để giảm chi phí vận hành.
- Đầu tư vào CI/CD và monitoring từ đầu.
- Cân nhắc chi phí và lợi ích trước khi áp dụng.
Nguồn: GitHub – miztiik/serverless-image-processor: Process images uploaded to S3 using lambda services 🎓
Hồ Nguyễn Văn Nhật Developer |