Microservices là gì?

Microservices là gì?

Microservices là một mẫu 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. Đây là một phương pháp kỹ thuật phần mềm tập trung vào việc phân tách ứ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õ. 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" dùng để chỉ kích thước của một microservice phải được quản lý bởi một nhóm phát triển (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.

Kiến trúc nguyên khối là gì?

Nói một cách đơn giản thì kiến ​​trúc nguyên khối (Monolithic Architecture) giống như một thùng chứa lớn, trong đó tất cả các thành phần của một ứng dụng được ghép thành một gói duy nhất.

Chúng ta hãy thảo luận về một ví dụ về một website thương mại điện tử trong bối cảnh kiến ​​trúc nguyên khối.

Kiến trúc nguyên khối của một website thương mại điện tử

Trong bất kỳ website thương mại điện tử nào, có một số tính năng tiêu chuẩn như Search, Rating & Review và Payment. Những tính năng này có thể được khác hàng truy cập bằng trình duyệt của họ.

Khi nhà phát triển website thương mại điện tử triển khai ứng dụng, nó là một khối duy nhất. Mã cho các tính năng khác nhau như Search, Rating & Review và Payment nằm trong một gói duy nhất và trên cùng một máy chủ.

Để mở rộng ứng dụng, bạn cần phải chạy ứng dụng này trên nhiều máy chủ.

Kiến trúc microservice là gì?

Kiến trúc microservice là một phương pháp phát triển kiến ​​trúc cho phép xây dựng một ứng dụng từ một tập hợp các dịch vụ nhỏ và độc lập được phát triển cho từng nghiệp vụ.

Hãy lấy ví dụ về ứng dụng thương mại điện tử ở trên được phát triển với kiến ​​trúc microservice. Trong trường hợp này, hệ thống được tạo từ các microservices, mỗi microservice tập trung vào một nghiệp vụ duy nhất.

Các tính năng Search, Rating & Review và Payment bây giờ là những microservices độc lập và có thể liên lạc với nhau.

Kiến trúc microservice cho web thương mại điện tử

Trong kiến trúc nguyên khối, tất cả các thành phần hợp lại thành một mô-đun duy nhất. Nhưng trong kiến trúc microservice, chúng được chia nhỏ thành các mô-đun riêng lẻ (microservice) giao tiếp với nhau.

Giao tiếp giữa các dịch vụ là một giao tiếp phi 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 kiến trúc microservice, mỗi microservice có cơ sở dữ liệu riêng biệt.

Kiến trúc microservice với kiến ​​trúc nguyên khối

Kiến trúc Microservice Kiến trúc Monolithic
Tách các tính năng của ứng dụng vào các dịch vụ nhỏ, độc lập và có thể giao tiếp với nhau. Một duy nhất chứa tất cả các tính năng của ứng dụng
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ô lập lỗi thì dễ dàng. Ngay cả khi một dịch vụ ngừng hoạt động, dịch vụ khác có thể tiếp tục hoạt động. Để xử lý vấn đề này, chỉ cần sửa lỗi, kiểm thử và xuất bản dịch vụ gặp lỗi. Cô lập lỗi thì khó khăn. Nếu bất kỳ tính năng nào đó không hoạt động, cả hệ thống có thể ngừng hoạt động. Để xử lý vấn đề này cần phải xác định nơi xảy ra lỗi, sửa lỗi, kiểm thử và xuất bản lại toàn bộ ứng dụng.
Tất cả các microservice được liên kết lỏng lẻo nên những thay đổi trên một microservice không ảnh hưởng đến những microservice khác. Kiến trúc nguyên khối được liên kết chặt chẽ. Thay đổi trong một mô-đun mã ảnh hưởng đến mô-đun khác
Các doanh nghiệp có thể phân bổ tài nguyên tùy theo nhu cầu của từng microservice. Vì tất cả các tính năng của ứng dụng đều nằm trong một mô-đun nên không thể phân bổ tài nguyên theo từng tính năng.
Phân bổ nhiều tài nguyên phần cứng 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 sản phẩm và tìm kiếm nhiều hơn so với thanh toán. Vì vậy, nhiều tài nguyên có thể được phân bổ cho microservice tìm kiếm và liệt kê sản phẩm. Mở rộng quy mô ứng dụng là thách thức cũng như lãng phí trong kiến trúc nguyên khối.
Microservice luôn luôn nhất quán và khả năng sẵn sàng cao. Các công cụ phát triển bị quá tải vì quá 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 mỗi microservice sử 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.
Nhiều nhóm nhỏ tập trung phát triển song song các tính năng. Đội ngũ lớn và cần nhiều nỗ lực để quản lý nhóm.
Thay đổi trong mô hình dữ liệu của một microservice không ảnh hưởng đến các microservice khác. Thay đổi trong 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 interface được chỉ định Không áp dụng
Microservice hoạt động theo nguyên tắc tập trung vào sản phẩm, không phải dự án Đặt trọng tâm vào toàn bộ dự án
Có thể sử dụng các công nghệ khác nhau cho các microservice khác nhau. Toàn bộ hệ thống sử dụng chung một stack công nghệ.

Những thách thức của microservice

  • 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ụ hơn để giám sát được phát triển bằng các ngôn ngữ lập trình khác nhau.
  • Vì nó là một hệ thống phân tán, nó là một mô hình phức tạp vốn có.
  • Các dịch vụ khác nhau sẽ có cơ chế riêng biệt, dẫn đến một lượng lớn bộ nhớ cho dữ liệu phi cấu trúc.
  • Quản lý và làm việc nhóm hiệu quả rất cần thiết để ngăn chặn các vấn đề xếp tầng.
  • Tái tạo một vấn đề sẽ là một nhiệm vụ khó khăn khi nó đã có một phiên bản và trở lại trong 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 microservice mang lại nhiều hoạt động trên cao.
  • Thật khó để quản lý ứng dụng khi các dịch vụ mới được thêm vào hệ thống
  • Một loạt các chuyên gia lành nghề là cần thiết để hỗ trợ các dịch vụ siêu nhỏ 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 với microservice

Các dịch vụ SOA được duy trì trong tổ chức bởi một sổ đă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 nơi mỗi nghệ sĩ đang biểu diễn với nhạc cụ của mình trong khi giám đốc âm nhạc đưa ra hướng dẫn cho tất cả mọi người.

Mặt khác, microservice là một dạng phong cách 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 khác nhau thay vì một phần mềm hoặc ứng dụng.

Microservice giống như một đoàn kịch nơi mỗi vũ công độ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 làm thế nào để quay lại đúng trình tự.

Dưới đây là so sánh chi tiết giữa SOA và microservice

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 Đơ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 microservice
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 Nguyên khối trong tự nhiên Đầ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. Triển khai đơn giản và ít tốn thời gian.
Hiệu quả chi phí Tiết kiệm chi phí hiệu quả. Ít chi phí hiệu quả.
Khả năng mở rộng Ít hơn 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 miền dịch vụ đơn
API giao thức dây đơn giản (HTTP với XML JSON) được điều khiển bằng SDK / Khách hàng
Logic nghiệp vụ có thể sống trên các miền doanh nghiệp Service Bus giống như các lớp giữa các dịch vụ Middleware

Công cụ microservice

1) Wiremock: Kiểm tra microservice

WireMock là một thư viện linh hoạt để khai thác và chế nhạo các dịch vụ web. Nó có thể định cấu hình phản hồi được trả về bởi API HTTP khi nhận được yêu cầu cụ thể. Nó cũng được sử dụng để kiểm tra microservice.

Liên kết tải xuống: http://wiremock.org/

2) Docker

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 thùng chứa này, các nhà phát triển có thể chạy một ứ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ụ thuộc khác trong một gói.

Liên kết tải xuống: https://www.docker.com/

3) Hystrix

Hystrix là một thư viện java 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 và thư viện của bên thứ 3 trong một môi trường phân tán như microservice. Nó cải thiện hệ thống tổng thể bằng cách cách ly các dịch vụ thất bại và ngăn chặn hiệu ứng xếp tầng của các lỗi.

Liên kết tải xuống: https://github.com/Netflix/Hystrix

Thực tiễn tốt nhất về kiến ​​trúc microservice

  • Lưu trữ dữ liệu riêng biệt cho mỗi microservice
  • Giữ mã của một mức độ trưởng thành tương tự.
  • Xây dựng riêng cho từng dịch vụ Micro
  • Luôn luôn coi như không quốc tịch.

Tóm lược

  • Microservice là một mẫu 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.
  • Microservice Architecture là một phong cách phát triển kiến ​​trúc cho phép xây dựng một ứng dụng như một tập hợp các dịch vụ tự trị nhỏ được phát triển cho một lĩnh vực kinh doanh.
  • Kiến trúc nguyê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 ứng dụng được ghép 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à nó có thể cung cấp một mục tiêu kinh doanh cụ thể
  • Trong kiến ​​trúc nguyên khối, cơ sở mã lớn có thể làm chậm toàn bộ quá trình phát triển. Bản phát hành mới có thể mất vài tháng. Bảo trì mã là khó khăn
  • Hai loại Dịch vụ vi mô là 1) Không quốc tịch 2) Có trạng thái
  • Các dịch vụ vi mô 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 biết đến một cách ngắn gọn là SOA là một 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 trả lờ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ụ dịch vụ phổ biến


Bài viết liên quan:

Tìm hiểu kiến trúc microservice là gì? Ưu điểm và nhược điểm của microservice. Microservice + Docker.