Hướng dẫn về microservices: Là gì, Archikiến trúc và ví dụ
⚡ Tóm tắt thông minh
Microservices là một mô hình kiến trúc hướng dịch vụ, trong đó ứng dụng được xây dựng như một tập hợp các đơn vị dịch vụ nhỏ, độc lập. Tài liệu này giải thích sự khác biệt giữa kiến trúc nguyên khối và kiến trúc microservices, những điểm khác biệt, thách thức, so sánh với SOA, các công cụ phổ biến và các thực tiễn tốt nhất.
Microservices là gì?
Microservices là một mô hình kiến trúc hướng dịch vụ trong đó các ứng dụng được xây dựng như một tập hợp các đơn vị dịch vụ độc lập nhỏ nhất khác nhau. Đó là một kỹ thuật phần mềm phương pháp tập trung vào việc phân tách một ứng dụng thành các mô-đun chức năng đơn với các giao diện được xác định rõ ràng. Các mô-đun này có thể được triển khai và vận hành độc lập bởi các nhóm nhỏ sở hữu toàn bộ vòng đời của dịch vụ.
Thuật ngữ “micro” đề cập đến kích thước của một microservice, sao cho nó có thể được quản lý bởi một nhóm phát triển duy nhất (5 đến 10 lập trình viên). Trong phương pháp này, các ứng dụng lớn được chia thành các đơn vị độc lập nhỏ nhất.
Đá nguyên khối là gì Archikiến trúc?
Nói một cách đơn giản, kiến trúc Monolithic giống như một thùng chứa lớn, trong đó tất cả các thành phần phần mềm của một ứng dụng được đóng gói thành một khối duy nhất. Chúng ta hãy cùng thảo luận một ví dụ về cửa hàng thương mại điện tử trong bối cảnh kiến trúc Monolithic.
Monolithic Archikiến trúc ứng dụng thương mại điện tử
Trong bất kỳ ứng dụng thương mại điện tử nào cũng có một số tính năng tiêu chuẩn như Tìm kiếm, RevXem & Đánh giá, và Thanh toán. Khách hàng có thể truy cập các tính năng này thông qua trình duyệt hoặc ứng dụng của họ. Khi nhà phát triển trang thương mại điện tử triển khai ứng dụng, nó là một khối thống nhất duy nhất. Mã cho các tính năng khác nhau như Tìm kiếm, RevChức năng xem & xếp hạng và thanh toán đều nằm trên cùng một máy chủ. Để mở rộng quy mô ứng dụng, bạn cần chạy nhiều phiên bản (máy chủ) của các ứng dụng này.
Microservice là gì Archikiến trúc?
dịch vụ vi mô Archikiến trúc là một phong cách phát triển kiến trúc cho phép xây dựng các ứng dụng như một tập hợp các dịch vụ tự chủ nhỏ được phát triển cho một miền kinh doanh. Đây là một biến thể của kiến trúc theo phong cách cấu trúc giúp sắp xếp các ứng dụng như một tập hợp dịch vụ được ghép nối lỏng lẻo. Microservice Archikiến trúc chứa các dịch vụ chi tiết và các giao thức nhẹ.
Hãy xem ví dụ về một ứng dụng thương mại điện tử được phát triển bằng kiến trúc microservice. Trong ví dụ kiến trúc Microservice này, mỗi microservice tập trung vào một chức năng kinh doanh duy nhất. Tìm kiếm, Xếp hạng & Review và Payment mỗi cái đều có máy chủ riêng và giao tiếp với nhau.
Microservices Archikiến trúc
Trong nguyên khối ArchiTrong kiến trúc thông thường, tất cả các thành phần hợp nhất thành một mô-đun duy nhất. Nhưng trong kiến trúc Microservices thì khác. ArchiVề mặt kiến trúc, chúng được phân chia thành các mô-đun riêng lẻ (microservices) và giao tiếp với nhau, như được minh họa trong ví dụ về Microservices ở trên.
Giao tiếp giữa các vi dịch vụ là giao tiếp không trạng thái trong đó mỗi cặp yêu cầu và phản hồi là độc lập. Do đó, microservice có thể giao tiếp dễ dàng. Trong vi dịch vụ ArchiVề mặt kiến trúc, dữ liệu được liên kết với nhau. Mỗi Microservice có kho dữ liệu riêng biệt.
Dịch vụ vi mô so với nguyên khối Archikiến trúc
| Microservices | Monolithic Archikiến trúc |
|---|---|
| Mỗi đơn vị của toàn bộ ứng dụng phải nhỏ nhất và có thể đáp ứng một mục tiêu kinh doanh cụ thể. | Một nền tảng mã nguồn duy nhất cho tất cả các mục tiêu kinh doanh. |
| Thời gian khởi động dịch vụ tương đối nhanh. | Việc khởi động dịch vụ mất nhiều thời gian hơn. |
| Việc khoanh vùng lỗi rất dễ dàng. Ngay cả khi một dịch vụ gặp sự cố, các dịch vụ khác vẫn có thể tiếp tục hoạt động. | Việc khoanh vùng lỗi rất khó khăn. Nếu bất kỳ tính năng cụ thể nào không hoạt động, toàn bộ hệ thống sẽ ngừng hoạt động. Để xử lý vấn đề này, ứng dụng cần được xây dựng lại, kiểm tra lại và triển khai lại. |
| Tất cả các microservice nên được liên kết lỏng lẻo để những thay đổi được thực hiện ở một microservice không ảnh hưởng đến các microservice khác. | Kiến trúc nguyên khối có tính liên kết chặt chẽ. Thay đổi trong một mô-đun mã sẽ ảnh hưởng đến các mô-đun khác. |
| Các doanh nghiệp có thể phân bổ nhiều nguồn lực hơn cho các dịch vụ mang lại lợi nhuận đầu tư cao hơn. | Vì các dịch vụ không hoạt động riêng lẻ, nên việc phân bổ nguồn lực riêng biệt là không thể. |
| Có thể phân bổ thêm tài nguyên phần cứng cho dịch vụ được sử dụng thường xuyên. Trong ví dụ thương mại điện tử ở trên, số người dùng kiểm tra danh sách sản phẩm và tìm kiếm nhiều hơn so với số người dùng kiểm tra thanh toán, vì vậy có thể phân bổ nhiều tài nguyên hơn cho dịch vụ nhỏ xử lý tìm kiếm và danh sách sản phẩm. | Việc mở rộng quy mô ứng dụng là một thách thức cũng như lãng phí. |
| Kiến trúc microservices luôn duy trì tính nhất quán và khả năng hoạt động liên tục. | Các công cụ phát triển bị quá tải khi quy trình cần phải bắt đầu lại từ đầu. |
| Dữ liệu được liên kết với nhau. Điều này cho phép các Microservice riêng lẻ áp dụng mô hình dữ liệu phù hợp nhất với nhu cầu của chúng. | Dữ liệu được tập trung. |
| Các nhóm nhỏ, tập trung cao độ. Phát triển song song và nhanh hơn. | Cần có một đội ngũ lớn và nỗ lực quản lý đội ngũ đáng kể. |
| Việc thay đổi mô hình dữ liệu của một Microservice không ảnh hưởng đến các Microservice khác. | Việc thay đổi mô hình dữ liệu ảnh hưởng đến toàn bộ cơ sở dữ liệu. |
| Tương tác với các microservice khác bằng cách sử dụng các giao diện được định nghĩa rõ ràng. | Không áp dụng. |
| Kiến trúc microservices hoạt động dựa trên nguyên tắc tập trung vào sản phẩm, chứ không phải dự án. | Nhấn mạnh tầm quan trọng của toàn bộ dự án. |
| Không có sự phụ thuộc chéo giữa các cơ sở mã. Bạn có thể sử dụng các công nghệ khác nhau cho các Microservice khác nhau. | Một chức năng hoặc chương trình phụ thuộc vào những chức năng hoặc chương trình khác. |
Những thách thức về dịch vụ vi mô
- Các microservice phụ thuộc lẫn nhau và chúng cần phải giao tiếp với nhau.
- So với các hệ thống nguyên khối, có nhiều dịch vụ cần giám sát hơn được phát triển bằng cách sử dụng các hệ thống khác nhau. ngôn ngữ lập trình.
- Vì đây là một hệ thống phân tán nên mô hình này có bản chất phức tạp.
- Các dịch vụ khác nhau sẽ có cơ chế riêng biệt, dẫn đến việc sử dụng một lượng lớn bộ nhớ cho dữ liệu phi cấu trúc.
- Quản lý hiệu quả và tinh thần làm việc nhóm là điều cần thiết để ngăn chặn các vấn đề lan rộng.
- Việc tái hiện lỗi sẽ rất khó khăn khi lỗi đó biến mất ở phiên bản trước và lại xuất hiện ở phiên bản mới nhất.
- Việc triển khai độc lập trở nên phức tạp hơn với kiến trúc Microservices.
- Kiến trúc vi dịch vụ gây ra nhiều chi phí vận hành.
- Việc quản lý ứng dụng trở nên khó khăn hơn khi các dịch vụ mới được thêm vào hệ thống.
- Để hỗ trợ các dịch vụ vi mô phân tán không đồng nhất, cần có một đội ngũ chuyên gia lành nghề với trình độ cao.
- Microservice rất tốn kém vì bạn cần duy trì không gian máy chủ khác nhau cho các nhiệm vụ kinh doanh khác nhau.
SOA so với microservice
Các dịch vụ SOA được duy trì trong tổ chức bởi một hệ thống đăng ký hoạt động như một danh mục liệt kê. Các ứng dụng cần tra cứu các dịch vụ trong hệ thống đăng ký và gọi dịch vụ đó. Nói cách khác, SOA giống như một dàn nhạc trong đó mỗi nghệ sĩ biểu diễn với nhạc cụ của mình trong khi giám đốc âm nhạc hướng dẫn tất cả mọi người.
Mặt khác, Microservices là một dạng kiến trúc hướng dịch vụ, trong đó các ứng dụng được xây dựng như một tập hợp các dịch vụ nhỏ khác nhau thay vì một phần mềm hoặc ứng dụng duy nhất. Microservices giống như một đoàn nghệ thuật, mỗi vũ công đều độc lập và biết mình cần làm gì. Vì vậy, nếu họ bỏ sót một vài bước, họ biết cách quay lại đúng trình tự. Dưới đây là bảng so sánh chi tiết giữa SOA và Microservices.
| Tham số | SOA | Microservices |
|---|---|---|
| Kiểu thiết kế | Trong SOA, các thành phần phần mềm được đưa ra thế giới bên ngoài để sử dụng dưới dạng dịch vụ. | Dịch vụ vi mô là một phần của SOA. Đây là một triển khai của SOA. |
| Phụ thuộc | Các đơn vị kinh doanh phụ thuộc. | Họ độc lập với nhau. |
| Kích thước của phần mềm | Kích thước phần mềm này lớn hơn bất kỳ phần mềm thông thường nào. | Kích thước phần mềm luôn nhỏ trong kiến trúc Microservices. |
| Ngăn xếp công nghệ | Ngăn xếp công nghệ thấp hơn so với Microservice. | Ngăn xếp công nghệ microservice có thể rất lớn. |
| Bản chất của ứng dụng | Có bản chất nguyên khối. | Có tính chất toàn diện. |
| Độc lập và tập trung | Các ứng dụng SOA được xây dựng để thực hiện nhiều nhiệm vụ kinh doanh. | Chúng được xây dựng để thực hiện một nhiệm vụ kinh doanh duy nhất. |
| Triển khai | Quá trình triển khai tốn nhiều thời gian. | Việc triển khai rất đơn giản và ít tốn thời gian hơn. |
| Hiệu quả chi phí | Tiết kiệm chi phí hiệu quả. | Less tiết kiệm chi phí. |
| khả năng mở rộng | Less so với microservice. | Khả năng mở rộng cao. |
| Logic kinh doanh | Các thành phần logic nghiệp vụ được lưu trữ trong một miền dịch vụ duy nhất, sử dụng các giao thức truyền tải đơn giản (HTTP với XML hoặc JSON) và API được điều khiển bằng SDK/Client. | Logic nghiệp vụ có thể tồn tại trên nhiều miền khác nhau, với các lớp trung gian (Middleware) giống như Service Bus cấp doanh nghiệp. |
Công cụ vi dịch vụ
1) Wiremock: Kiểm tra vi dịch vụ
WireMock Đây là một thư viện linh hoạt dùng để tạo các dịch vụ web giả lập và mô phỏng. Nó có thể cấu hình phản hồi được trả về bởi API HTTP khi nhận được một yêu cầu cụ thể. Nó cũng được sử dụng để kiểm thử Microservices.
Tải về liên kết: http://wiremock.org/
2) Người đưa tin
Docker là một dự án mã nguồn mở cho phép chúng ta tạo, triển khai và chạy các ứng dụng bằng cách sử dụng container. Bằng cách sử dụng các container này, các nhà phát triển có thể chạy một ứng dụng như một gói duy nhất. Nó cho phép bạn đóng gói các thư viện và các thành phần phụ thuộc khác trong một gói duy nhất.
Tải về liên kết: https://www.docker.com/
3) Hystrix
Hystrix là một hệ thống chịu lỗi. Java Công cụ này được thiết kế để phân tách các điểm truy cập đến các dịch vụ, hệ thống và thư viện bên thứ ba từ xa trong môi trường phân tán như kiến trúc Microservices. Nó cải thiện hệ thống tổng thể bằng cách cô lập các dịch vụ bị lỗi và ngăn chặn hiệu ứng dây chuyền của các lỗi.
Tải về Link: https://github.com/Netflix/Hystrix
Thực tiễn tốt nhất về microservice Archikiến trúc
- Mỗi Microservice có kho dữ liệu riêng biệt.
- Hãy duy trì mức độ hoàn thiện của mã nguồn ở mức tương đương nhau.
- Xây dựng riêng biệt cho từng Microservice.
- Luôn coi mỗi máy chủ là không có trạng thái.



