Hướng dẫn về microservices: Là gì, Archikiến trúc và ví dụ

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ữ “vi mô” đề cập đến quy mô của một dịch vụ vi mô phải được quản lý bởi một nhóm phát triển duy nhất (5 đến 10 nhà phát triể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 dễ hiểu, bạn có thể nói rằng 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 gói duy nhất.

Chúng ta hãy thảo luận về 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
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, Review & Xếp hạng và Thanh toán. Khách hàng có thể truy cập những tính năng này bằng trình duyệt hoặc ứng dụng của họ. Khi nhà phát triển trang web Thương mại điện tử triển khai ứng dụng, nó là một đơn vị Nguyên khối duy nhất. Mã cho các tính năng khác nhau như Tìm kiếm, Review & Xếp hạng và Thanh toán trên cùng một máy chủ. Để mở rộng ứ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 lấy một ví dụ về ứng dụng thương mại điện tử được phát triển với kiến ​​trúc microservice. Trong ví dụ về kiến ​​trúc microservice này, mỗi microservice tập trung vào một khả năng kinh doanh duy nhất. Tìm kiếm, Xếp hạng & Review và Payment đều có phiên bản (máy chủ) của chúng và liên lạc với nhau.

Microservices Archikiến trúc
Microservices Archikiến trúc

Trong nguyên khối Archikiến trúc, tất cả các thành phần hợp nhất thành một mô-đun duy nhất. Tuy nhiên, trong Microservices Archikiến trúc chúng được trải thành các mô-đun riêng lẻ (microservice) giao tiếp với nhau như trong ví dụ về Microservice ở 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ụ Archikiến trúc, Dữ liệu được liên kết. Mỗi microservice có kho dữ liệu riêng. Tiếp theo trong này Java Hướng dẫn về Microservices, chúng ta sẽ tìm hiểu về sự khác biệt giữa Microservices và kiến ​​trúc Monolithic.

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 cơ sở mã duy nhất cho tất cả các mục tiêu kinh doanh
Khởi động dịch vụ tương đối nhanh Khởi động dịch vụ mất nhiều thời gian hơn
Cách ly lỗi rất dễ dàng. Ngay cả khi một dịch vụ ngừng hoạt động, dịch vụ khác vẫn có thể tiếp tục hoạt động. Cách ly lỗi là 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, thử nghiệm lại và triển khai lại.
Tất cả các vi dịch vụ phải được kết nối lỏng lẻo để những thay đổi được thực hiện ở một dịch vụ này không ảnh hưởng đến dịch vụ kia. Kiến trúc đơn khối được kết hợp chặt chẽ. Những thay đổi trong một mô-đun mã ảnh hưởng đến mô-đun khác
Doanh nghiệp có thể triển khai nhiều tài nguyên hơn cho các dịch vụ đang tạo ROI cao hơn Vì các dịch vụ không bị cô lập nên không thể phân bổ nguồn lực riêng lẻ
Nhiều tài nguyên phần cứng hơn có thể được phân bổ cho dịch vụ được sử dụng thường xuyên. Trong ví dụ về thương mại điện tử ở trên, số lượng người dùng kiểm tra danh sách và tìm kiếm sản phẩm nhiều hơn so với thanh toán. Vì vậy, nhiều tài nguyên hơn có thể được phân bổ cho microservice tìm kiếm và liệt kê 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í.
Microservices luôn nhất quán và liên tục có sẵn. Các công cụ phát triển trở nên quá tải vì quy trình cần phải bắt đầu lại từ đầu.
Dữ liệu được liên kết. Điều này cho phép từng Microservice áp dụng mô hình dữ liệu phù hợp nhất với nhu cầu của mình. Dữ liệu được tập trung.
Các nhóm tập trung nhỏ. Phát triển song song và nhanh hơn Cần có đội ngũ lớn và nỗ lực quản lý nhóm đá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. 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 xác định rõ ràng Không áp dụng
Microservice hoạt động theo nguyên tắc tập trung vào sản phẩm chứ không phải dự án Nhấn mạnh vào 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 dựa vào nhau và chúng sẽ phải liên lạc 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, dẫn đến dung lượng bộ nhớ lớn cho dữ liệu phi cấu trúc.
  • Cần có sự quản lý hiệu quả và làm việc nhóm để ngăn ngừa các vấn đề lan rộng
  • Tái tạo một vấn đề sẽ là một nhiệm vụ khó khăn khi nó đã xuất hiện trong một phiên bản và xuất hiện trở lại ở phiên bản mới nhất.
  • Triển khai độc lập rất phức tạp với microservice.
  • Kiến trúc vi dịch vụ gây ra nhiều chi phí vận hành.
  • Khó quản lý ứng dụng khi thêm dịch vụ mới vào hệ thống
  • Cần có nhiều chuyên gia lành nghề để hỗ trợ các dịch vụ vi mô phân tán không đồng nhất
  • 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 cơ quan đăng ký hoạt động như một danh sách thư mục. Các ứng dụng cần tra cứu các dịch vụ trong sổ đăng ký và gọi dịch vụ đó.

Ở một thế giới 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ỏ hơn thay vì một phần mềm hoặc ứng dụng.

Microservices giống như một đoàn kịch mà mỗi vũ công đều độc lập và biết họ cần phải làm gì. Vì vậy, nếu họ bỏ lỡ một số bước, họ biết cách quay lại đúng trình tự. Bây giờ trong hướng dẫn về kiến ​​trúc Microservices này, chúng ta hãy tìm hiểu về sự khác biệt giữa SOA và Microservices.

Dưới đây là 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 lớn hơn bất kỳ phần mềm thông thường nào Kích thước của Phần mềm luôn nhỏ trong 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ó tính chất nguyên khối Ngăn xếp đầy đủ trong tự nhiê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ữ bên trong một miền dịch vụ Giao thức dây đơn giản (HTTP với XML JSON) API được điều khiển bằng SDK/Khách hàng Logic nghiệp vụ có thể tồn tại trên các miền Bus dịch vụ doanh nghiệp giống như các lớp giữa các dịch vụ Middleware

Công cụ vi dịch vụ

1) Wiremock: Kiểm tra vi dịch vụ

WireMock là một thư viện linh hoạt dành cho các dịch vụ web sơ khai và mô phỏng. Nó có thể định cấu hình phản hồi được API HTTP trả về khi nhận được một yêu cầu cụ thể. Nó cũng được sử dụng để thử nghiệm Microservices.

Tải về liên kết:http://wiremock.org/

2) Người đưa tin

Docker là dự án 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 các thùng chứa. Bằng cách sử dụng các vùng chứa này, nhà phát triển có thể chạy ứng dụng dưới dạng một gói duy nhất. Nó cho phép bạn gửi thư viện và các phần phụ thuộc khác trong một gói.

Tải về liên kết:https://www.docker.com/

3) Hystrix

Hystrix là một thư viện java có khả năng chịu lỗi. Công cụ này được thiết kế để phân tách các điểm truy cập vào các dịch vụ, hệ thống từ xa và thư viện của bên thứ 3 trong môi trường phân tán như 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 xếp tầng 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

  • Kho dữ liệu riêng biệt cho từng Microservice
  • Giữ mã có mức độ trưởng thành tương tự.
  • Xây dựng riêng cho từng dịch vụ Micro.
  • Luôn đối xử – nghiêm khắc như không quốc tịch.

Tổng kết

  • 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.
  • dịch vụ vi mô Architecture là một phong cách phát triển kiến ​​trúc cho phép xây dựng ứ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.
  • Kiến trúc đơn khối 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 gom lại thành một gói duy nhất
  • Trong Microservice, mọi đơn vị của toàn bộ ứng dụng phải là nhỏ nhất và có thể cung cấp một mục tiêu kinh doanh cụ thể
  • Trong kiến ​​trúc Monolithic, cơ sở mã lớn có thể làm chậm toàn bộ quá trình phát triển. Các bản phát hành mới có thể mất nhiều tháng. Việc bảo trì mã khó khăn
  • Hai loại Microservice là 1) Không trạng thái 2) Có trạng thái
  • Dịch vụ vi mô trong Java dựa vào nhau và họ sẽ phải liên lạc với nhau. Giúp bạn nhấn mạnh vào một tính năng cụ thể và nhu cầu kinh doanh
  • Kiến trúc hướng dịch vụ được gọi tắt là SOA là sự phát triển của điện toán phân tán dựa trên mô hình thiết kế yêu cầu hoặc phản hồi cho các ứng dụng đồng bộ và không đồng bộ
  • 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ụ trong khi Micro Service là một phần của SOA. Đây là một triển khai của SOA
  • Wiremock, Docker và Hystrix là một số Công cụ vi dịch vụ phổ biến