Microservice là một loại kiến trúc phần mềm hướng dịch vụ, tập trung vào việc xây dựng một loạt các thành phần tự quản lý tạo nên ứng dụng. Không giống như các ứng dụng nguyên khối được xây dựng dưới dạng một đơn vị không thể chia tách, các ứng dụng microservice bao gồm nhiều thành phần độc lập output ra các API.


Cách tiếp cận microservice tập trung chủ yếu vào các độ ưu tiên của chức năng dành cho người dùng, trong khi cách tiếp cận nguyên khối được tổ chức xung quanh các lớp công nghệ, giao diện người dùng và cơ sở dữ liệu. Cách tiếp cận microservice đã trở thành một xu hướng trong những năm gần đây khi ngày càng nhiều doanh nghiệp đang phát triển nhanh và sử dụng nhiều công nghệ DevOps.
Microservice rất quan trọng, đơn giản vì chúng đơn giản hóa sự phức tạp trong các hệ thống. Bằng cách chia hệ thống hoặc ứng dụng  thành nhiều phần nhỏ hơn, làm giảm trùng lặp, tăng sự gắn kết và dễ dàng kết nối giữa các bộ phận thông qua giao thức RESTFul API, do đó làm cho các thành phần hệ thống tổng thể dễ hiểu hơn, dễ mở rộng hơn và dễ thay đổi hơn.
Có rất nhiều ví dụ về các công ty đã phát triển từ cách tiếp cận nguyên khối lên sử dụng Microservice. Trong số nổi bật nhất là Netflix, Amazon, Twitter, eBay và PayPal. Để xác định xem microservice có phù hợp với dự án hay không, hãy xác định ưu và nhược điểm của phương pháp này.

Ưu điểm:

Dễ dàng phát triển, thử nghiệm và triển khai
Ưu điểm lớn nhất của microservice so với các kiến trúc khác là các dịch vụ nhỏ có thể được xây dựng, thử nghiệm và triển khai độc lập. Vì một đơn vị triển khai là nhỏ, nó tạo điều kiện và tăng tốc độ phát triển và phát hành cho người dùng. Ngoài ra, việc phát hành một service không bị giới hạn bởi việc phát triển một service khác chưa kết thúc. Và điểm cộng cuối cùng ở đây là rủi ro khi triển khai đã giảm khi các lập trình viên triển khai các phần của phần mềm chứ không phải toàn bộ ứng dụng.
Tăng hiệu suất
Với microservice, một số nhóm có thể làm việc trên các dịch vụ của họ một cách độc lập và nhanh chóng. Mỗi phần riêng lẻ của ứng dụng có thể được xây dựng độc lập do việc tách các thành phần microservice. Ví dụ:  có thể có một nhóm gồm 100 người làm việc trên toàn bộ ứng dụng (như theo cách tiếp cận nguyên khối) hoặc  có thể có 10 nhóm 10 người phát triển các dịch vụ khác nhau cho ứng dụng.
Hiệu suất tăng cho phép các lập trình viên cập nhật các thành phần hệ thống mà không làm giảm ứng dụng. Hơn nữa, hiệu xuất cung cấp một quy trình triển khai an toàn hơn và thời gian hoạt động được cải thiện. Các tính năng mới có thể được thêm vào khi cần mà không cần chờ toàn bộ ứng dụng khởi chạy.
Khả năng mở rộng theo chiều ngang
Chia tỷ lệ dọc (chạy cùng một phần mềm nhưng trên các máy cấu hình cao) có thể bị giới hạn bởi dung lượng của từng dịch vụ. Nhưng tỷ lệ ngang (tạo thêm dịch vụ trong cùng một nhóm) không bị giới hạn và có thể chạy linh hoạt với microservice. Hơn nữa, tỷ lệ ngang có thể hoàn toàn tự động.

Nhược điểm

Phức tạp
Nhược điểm lớn nhất của microservice nằm ở sự phức tạp. Việc chia ứng dụng thành các dịch vụ siêu nhỏ độc lập đòi hỏi phải có nhiều tạo tác hơn để quản lý. Kiểu kiến trúc này đòi hỏi lập kế hoạch cẩn thận, nỗ lực to lớn, tài nguyên nhóm và kỹ năng. Những lý do cho sự phức tạp cao là như sau:
Nhu cầu tự động hóa tăng lên, vì mọi service cần được test và giám sát
Kiểm thử tự động một dịch vụ trong kiến trúc microservices đôi khi yêu cầu phải chạy cả các dịch vụ nhỏ khác mà nó phụ thuộc. Do đó khi phân rã ứng dụng một khối thành microservices cần luôn kiểm tra mức độ ràng buộc giữa các dịch vụ mềm dẻo hơn hay cứng nhắc - lệ thuộc hơn. Nếu ràng buộc ít đi, lỏng leo hơn, bạn đi đúng hướng và ngược lại.
Tính nhất quán dữ liệu và quản lý giao dịch
Đảm bảo giao dịch phân tán (distributed transaction) cập nhật dữ liệu đúng đắn (all or none) vào nhiều dịch vụ nhỏ khác nhau khó hơn rất nhiều, đôi khi là không thể so với đảm bảo giao dịch cập nhật vào nhiều bảng trong một cơ sở dữ liệu trung tâm.
Bảo mật
Trong ứng dụng microservice, mỗi chức năng giao tiếp bên ngoài thông qua API sẽ tăng khả năng bị tấn công. Những cuộc tấn công này chỉ có thể xảy ra nếu các tính toán bảo mật thích hợp không được thực hiện khi xây dựng ứng dụng.
Ngôn ngữ lập trình khác nhau
Khả năng chọn các ngôn ngữ lập trình khác nhau là hai mặt của cùng một đồng tiền. Sử dụng các ngôn ngữ khác nhau làm cho việc triển khai khó khăn hơn. Ngoài ra, việc chuyển đổi lập trình viên giữa các giai đoạn phát triển trở nên khó khăn hơn khi mỗi dịch vụ được viết bằng một ngôn ngữ khác nhau.

Tóm lại

Microservice là tốt, nhưng không phải cho tất cả các loại ứng dụng. Mẫu này hoạt động tuyệt vời để phát triển các ứng dụng và hệ thống phức tạp. Cân nhắc chọn kiến trúc microservice khi có nhiều nhóm có kinh nghiệm và khi ứng dụng đủ phức tạp để chia nó thành các dịch vụ. Khi ứng dụng lớn và cần phải linh hoạt và có thể mở rộng, microservice có lợi.

Tổng kết series Kiến trúc bằng hình bên dưới nhé!



--
Ủng hộ mình với series Performance Testing sắp tới nhé!
http://blog.ntechdevelopers.com