Microservices Architecture

Kiến trúc microservice, hay đơn giản là microservice, là một phương pháp đặc biệt để triển khai hệ thống phần mềm, đã nổi lên mạnh mẽ trong những năm gần đây. Nhờ khả năng mở rộng của nó mà kiến trúc này được xem là lý tưởng khi bạn phải hỗ trợ một loạt các nền tảng và thiết bị trải rộng trên web, di động, Internet of Things, các thiết bị đeo tay hay đơn giản là khi bạn chưa chắc chắn về thiết bị mà bạn sẽ cần hỗ trợ trong tương lai. Rất nhiều những ông lớn đã từ chuyển dịch từ Monolithic sang kiến trúc mới này.

Thực ra thì ... nó cũng không mới lắm. Nhiều tài liệu cho rằng nó manh nha hình thành từ những năm đầu thế kỷ 21, nhưng đến tháng 5 năm 2011 , thuật ngữ "microservices" mới được sử dụng ở hội thảo của các kiến trúc sư phần mềm tại Venice. Vậy cụ thể Microservices là gì? Không có khái niệm chính xác nào để định nghĩa microservices nhưng theo Martin Fowler thì nó là thế này

 

The microservice architectural style is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API.                       

 -- Martin Fowler

Khó hiểu quá, nôm na thì Microsevices chia nhỏ ứng dụng lớn thành các ứng dụng nhỏ kết nối với nhau. Mỗi dịch vụ đảm nhiệm một chức năng riêng biệt và các dịch vụ ấy được kết nối với nhau tạo nên một tổng thể hài hòa. Ví dụ nha, mỗi dịch vụ như một quầy hàng chuyên biệt trong siêu thị, mỗi quầy bán một mặt hàng riêng, được liên kết với nhau thông qua mã số quầy hàng.

Quay trở lại Monolithic, vậy nó "bán" cái gì trong siêu thị? ... Monolithic là một tổng đại lý, gộp chung các mặt hàng vào một cửa hàng lớn _ all in one.,

 

Monolithic có cấu trúc module khá hợp lý, đóng gói thành một khối tổng thế, các khối "đóng cửa bảo nhau" bên trong, dễ viết, dễ triển khai, liên kết với nhau chặt chẽ. Nhưng cũng chính vì thế, chặt chẽ quá khó "cởi". Khi muốn deployment phải khởi chạy toàn bộ các khối, nếu khối nào "dẹo" thì nguy cơ "dẹo" cả hệ thống khá cao. Chưa kể khi hệ thống phình to, sự ràng buộc làm việc upgrade trở nên khó khăn, nhiều khi phải đập đi xây lại. Bảo trì cũng vô cùng tốn kém mà mất thời gian. Thử tưởng tượng hệ thống có 3 triệu dòng code mà mang ra chỉnh sửa, nghĩ thôi đã thấy áp lực rồi!

Microservices xuất hiện như để xóa đi những rắc rối đó.

  • Dễ nâng cấp và scale, việc nâng cấp các service tách biệt khiến nó trở nên dễ dàng hơn.

  • Cũng vì tách biệt nên khi một sevice có yểu mệnh mà "dẹo" thì cũng không quá ảnh hưởng đến hệ thống, có thể phục hồi nhanh chóng.

  • Các service có thể dùng các ngôn ngữ / framework khác nhau. Không còn hiện tượng "không cùng ngôn ngữ không nói chuyện".

  • Dễ dàng kiểm thử, thay thế, bảo trì các service.

Nhưng tất nhiên, nó cũng có những nhược điểm

  • Hệ thống được chia thành các service nhỏ, cũng vì nhỏ mà nhiều khi quá nhỏ, trở nên khó kiểm soát.
  • Các service phải giao tiếp bên ngoài với nhau nên nhiều khi tốc độ không cao. Mà nhiều khi chúng nó còn chả nói chuyện được với nhau ấy chứ.
  • Mỗi service sẽ có database riêng, cách thức hoạt động riêng nên tính đồng nhất không được đảm bảo, phức tạp.
  • Nếu các service sử dụng các chức năng của service khác một cách xếp chồng như bậc thang, thì một service "dẹo" vẫn ảnh hưởng to lớn đến hệ thống.
  • Các nhược điểm trên cũng đưa ra nhược điểm là triển khai Microservices khó hơn rất nhiều, đòi hỏi bạn phải có kiến thức để vận hành hệ thống trơn tru, mà có lẽ kiến thức chưa đủ, kinh nghiệm nữa!

Nôm na là vậy! Microservice vẫn là lý tưởng hướng đến cho những hệ thống trong tương lai!