Microservice là một kỹ thuật phát triển phần mềm, một biến thể của kiến trúc hướng dịch vụ (SOA) cấu trúc một ứng dụng như một tập hợp các dịch vụ được ghép lỏng lẻo. Trong kiến trúc microservice, các dịch vụ được xử lý tốt và các giao thức rất nhẹ. Lợi ích của việc phân tách một ứng dụng thành các dịch vụ nhỏ hơn là nó cải thiện tính mô đun. Điều này làm cho ứng dụng dễ hiểu hơn, phát triển, thử nghiệm và trở nên linh hoạt hơn đối với xói mòn kiến trúc.[1] Nó song song phát triển bằng cách cho phép các nhóm tự trị nhỏ phát triển, triển khai và mở rộng quy mô dịch vụ tương ứng của họ một cách độc lập.[2] Nó cũng cho phép kiến trúc của một dịch vụ riêng lẻ xuất hiện thông qua tái cấu trúc liên tục.[1] Kiến trúc dựa trên microservice cho phép phân phối và triển khai liên tục.[3]
Mặc dù không có định nghĩa chính thức về microservice là gì, một quan điểm đồng thuận đã phát triển theo thời gian, trong ngành. Một số đặc điểm xác định thường được trích dẫn bao gồm:
Theo Martin Fowler và các chuyên gia khác, các dịch vụ trong kiến trúc microservice (MSA) thường là các quá trình giao tiếp qua mạng để thực hiện mục tiêu sử dụng các giao thức không tin tưởng về công nghệ như HTTP.[4][5][6]
Các dịch vụ trong kiến trúc microservice có thể triển khai độc lập.[1][7]
Dịch vụ được tổ chức xung quanh khả năng kinh doanh hạt mịn. Mức độ chi tiết của microservice rất quan trọng - bởi vì đây là chìa khóa cho cách tiếp cận này khác với SOA.
Các dịch vụ có thể được thực hiện bằng các ngôn ngữ lập trình, cơ sở dữ liệu, môi trường phần cứng và phần mềm khác nhau, tùy thuộc vào những gì phù hợp nhất.[1] Điều này không có nghĩa là một microservice duy nhất được viết bằng một bản vá các ngôn ngữ lập trình. Mặc dù gần như chắc chắn là các thành phần khác nhau mà dịch vụ được tạo thành, sẽ yêu cầu các ngôn ngữ hoặc API khác nhau (ví dụ: lớp máy chủ web có thể bằng Java hoặc Javascript, nhưng cơ sở dữ liệu có thể sử dụng SQL để giao tiếp với RDBMS), điều này thực sự phản ánh so sánh với phong cách kiến trúc nguyên khối. Nếu một ứng dụng nguyên khối được triển khai lại dưới dạng một tập hợp các dịch vụ siêu nhỏ, thì các dịch vụ riêng lẻ có thể chọn ngôn ngữ triển khai của riêng chúng. Vì vậy, một microservice có thể chọn Java cho lớp web và một microservice khác có thể chọn triển khai dựa trên Node.js, nhưng trong mỗi thành phần microservice, ngôn ngữ triển khai sẽ thống nhất.
Các dịch vụ có kích thước nhỏ, kích hoạt nhắn tin, giới hạn bởi các bối cảnh, được phát triển tự động, có thể triển khai độc lập, phi tập trung và được xây dựng và phát hành với các quy trình tự động.[7]
Một microservice không phải là một lớp trong một ứng dụng nguyên khối (ví dụ: bộ điều khiển web hoặc phần phụ trợ cho giao diện[8]). Thay vào đó, nó là một phần chức năng kinh doanh khép kín với các giao diện rõ ràng và có thể, thông qua các thành phần bên trong của chính nó, thực hiện một kiến trúc phân lớp. Từ góc độ chiến lược, kiến trúc microservice về cơ bản tuân theo triết lý Unix "Làm một việc và làm tốt".[9]Martin Fowler mô tả kiến trúc dựa trên microservice có các thuộc tính sau:[4]
Đưa chính nó vào một quá trình phát triển phần mềm phân phối liên tục. Việc thay đổi một phần nhỏ của ứng dụng chỉ yêu cầu xây dựng lại và triển khai lại chỉ một hoặc một số ít dịch vụ.[11]
Tuân thủ các nguyên tắc như giao diện hạt mịn (để độc lập dịch vụ triển khai), phát triển kinh doanh theo định hướng (ví dụ như thiết kế miền-driven).[12]