Việc deploy một ứng dụng có kiến trúc monolithic là một con đường đau khổ. Khi bạn dự định chuyển sang kiến trúc deploy microservices, sẽ cho phép bạn có những kết nối uyển chuyển giữa các services được viết bằng ngôn ngữ khác nhau và sử dụng frameworks khác nhau. Tuy nhiên nó cũng tạo nhiều thách thức trong việc deployment.
Với thời gian review dạo nhiều trúc deployment, qua bài viết hãy cùng điểm danh các ưu và nhược điểm của từng mô hình nhé.
Có bao nhiêu cách deploy microservices?
Có 2 mô hình phổ biến để deploy ứng dụng thiết kế microservices, bao gồm:
Nếu bạn có mô hình nào phổ biến khác thì comment nhé. Giờ cùng nhau mổ thịt, 2 deployment patterns này trước nhé
Deploy microservices chung host
Với kiểu deploy này, sẽ tạo 1 hoặc nhiều host (có thể là vitual host). Với mỗi host sẽ host các services khác nhau trên đó. Đối với kiểu deploy này thường có 2 dạng. Mỗi service là 1 process instance trong host này. Dạng khác nhiều service cùng chạy trên 1 process.
Lợi điểm của kiểu deploy này là tận dụng hiệu quả sử dụng resource, cũng như làm đơn giản quá trình deploy, giảm overhead và cho phép start service nhanh chóng.
Vì mỗi servivce run process riêng biệt trên instance gây khó khăn trong việc xác định và monitor mức sử dụng resource của service đã deploy và run chung process.
Deploy microservices trên host riêng
Ở kiểu deployment này mỗi microservice được thực thi trên 1 host riêng biệt. Host này c1o thể là máy ảo ( VM) hoặc là container. Có 2 hình thức deploy microservices ở kiểu này là:
- Deploy microservices trên VM
- Deploy microservices trên Container
Deploy microservices trên VM
Với cách này sẽ đóng gói microservice như là 1 VM image. Với cách này, mỗi instance của service sẽ chạy trên 1 máy ảo. Developers có thể scale bằng cách tăng số lượng instainces thông qua việc lượng máy ảo.
Deply cách này cho phép scale một cách độc lập với các service khác. Nó giúp mỗi service có resource dedicated và developer có thể scale up/down theo nhu cầu sử dụng hệ thống.
Ngoài ra, có thể deploy nhiều service trên cùng VM bằng cách expose các service trên các port khác nhau.
Chạy các service instance một cách độc lập giúp bạn tận dụng tốt các tính năng của cloud như load balancing hay autoscaling.
Khó khăn lớn nhất của kiểu deploy này là việc tiêu tốn nhiều resource và thời gian build, cũng như quản lý các VM này.
Deploy microservices trên Container
Với cách deploy Mỗi Service trên Container nhiều ưu điểm hơn Mỗi Service trên VM. Trong cách này, microservice instainces chạy trên từng containers riêng.
Cách này giúp tối ưu việc sử dụng memory & CPU. Tận dụng ưu điểm khi dùng container runtime và cho phép deploy nhiều instainces trên cùng 1 container. Đây là cách thông dụng để đơn giản hóa quá trình deploy microservices. Việc build container image cũng đơn giản và nhanh chóng.
Tuy nhiên, một vài nhược điểm cần lưu ý khi áp dụng giải pháp này:
- Developer cập nhật version cho container thủ công. Nếu bạn host nhiều instances cùng 1 container, và update đồng thời thì khả năng issue phát sinh.
- Deploy update có thể gặp rủi ro mất data khi trên môi trường live (PRD).
- Containers không giống như VM là chạy OS độc lập, nó vẫn share container engine trên 1 OS Kernel máy host container.
So sánh giữa 2 kiến trúc Monolithic vs Microservice
[table id=8 responsive=flip datatables_fixedheader=top automatic_url_conversion=true /]
Chốt hạ
Mỗi kiến trúc và mẫu deployment đều có ưu và nhược điểm. Để quyết định được theo kiến trúc hay mẫu deployment nào thì cần dưa vào ngữ cách của doanh nghiệp, tổ chức, dự án và yêu cầu của khách hàng để lựa chon mô hình phù hợp nhất cho giải pháp của bạn.
Microservices sẽ có thể phù hợp hơn nếu nhiều team cùng làm trên dự án, techstack phức tạp, không đòi hỏi nhiều về scalability. Tuy nhiên với team size nhỏ, thì monolithic architecture tỏ ra phù hợp hơn.