Microservices là gì? Những Ưu và Nhược điểm của nó – chia sẻ kĩ năng

Ở trong bài viết này mình sẽ giới thiệu đến các bạn về Microservices là gì? và những đặc điểm, những điểm đáng chú ý của nó. Hãy cũng mình tìm hiểu qua bài viết này để rõ hơn nhé.

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

Mình sẽ giới thiệu tới các bạn kiến trúc monolithic trước để bạn có thể hiểu rõ về microservice cũng như có cái để so sánh với microservice. Monolithic là một kiến trúc phần mềm dạng nguyên khối, nghĩa là mọi tính năng sẽ nằm trong một project.

Microservices là gì ?

Còn microservice là kiến trúc có triết lý phong cách thiết kế ngược lại trọn vẹn so với kiến trúc monolithic được nêu ở trên .

Các module trong phần mềm được chia thành các service rất nhỏ (microservice). Mỗi service sẽ được đặt trên một server riêng. Vì thế nó dễ dàng để nâng cấp và scale ứng dụng.

Microservices va monolithic

Kiến trúc của microservices là gì ?

Khác biệt với kiến trúc của Monolith, thay vì phải gom tổng thể module thành một khối ( monolith ). Ở Microservices ta tách những module thành những service siêu nhỏ. Mỗi service sẽ được đặt trên một server riêng và triển khai tiếp xúc với nhau trải qua mạng .

Kiến trúc

Ở Microservices thì những services sẽ sống sót độc lập nhau về giải quyết và xử lý, tàng trữ và request. Như hình bên dưới :
kiến trúc của microservices

Ví dụ: Nếu như bạn cần xây dựng một ứng dụng để bán hàng dựa trên Microservices thì giả sử đơn hàng sẽ cần tối thiểu 4 service với database độc lập như sau:

  • Employee service (sử dụng table tc-employee)
  • Store service (sử dụng table tc-store)
  • Inventory service (sử dụng table tc-warehouse)
  • Order service (sử dụng table tc-order)

Và trong số đó, thì Store service – table tc-order sẽ chỉ chứa khóa ngoại chính là ID của nhân viên cấp dưới tại shop và ID của kho theo đúng với phong cách thiết kế chuẩn hóa database .

Tính chất khối Monolithic ảnh hưởng đến cấu trúc Microservices như thế nào:

  • Monolithic được thiết kế, phát triển và triển khai dựa theo một khối duy nhất.
  • Những ứng dụng thiết kế theo monolithic rất phức tạp và nó sẽ gây ra nhiều khó khăn cho quá trình nâng cấp, bảo trì hay là thêm các tính năng mới.
  • Thường rất khó để có thể áp dụng triển khai dựa theo kiểu agile.
  • Cần phải triển khai lại toàn bộ một hệ thống mặc dù chỉ phải cập nhật hay nâng cấp một phần duy nhất.
  • Khi mở rộng được các khối ứng dụng nếu như gặp khó khăn thì sẽ có các yêu cầu về những tài nguyên khác nhau.
  • Với một service thường không có tính độ ổn định nên có thể làm sập cả hệ thống.
  • Khó trong việc đổi mới: Bởi vì ứng dụng monolithic cần phải sử dụng chung một công nghệ vì vậy nó rất khó có thể thay đổi hay áp dụng thêm các công nghệ mới.

Những đặc thù số lượng giới hạn nên trên của kiến trúc Monolithic dẫn đến sự tăng trưởng của kiến trúc mới đó là Microservices .

Những quyền lợi của Microservices

Những quyền lợi mà quy mô microservices đem lại :

  • Source code tinh gọn: Do hệ thống cấu thành từ những dự án nhỏ, mỗi dự án sẽ đơn giản hơn và tập trung vào 1 hoặc 1 vài nghiệp vụ chính nên source code gọn nhẹ hơn. Giúp mang lại tính gọn nhẹ, dễ bảo trì và mở rộng.
  • Bảo mật source code: Vì dev nào làm việc ở dự án nào thì chỉ truy cập được source code trong dự án đó.
  • Tồn tại độc lập: Vì các dự án khác nhau và có thể có cách deploy riêng, và một service nào đó chết thì service khác vẫn hoạt động bình thường.
  • Scale độc lập: Theo những nhu cầu sử dụng của hệ thống mà có thể scale riêng service đó.

Những ưu điểm yếu kém của Microservices

1. Ưu điểm của microservices

  1. Microservices giúp dễ dàng continuous delivery và deployment các ứng dựng lớn, phức tạp:
  • Cải thiện về khả năng bảo trì – mỗi service tương đối nhỏ vì vậy dễ hiểu và thay đổi hơn.
  • Khả năng testing dễ dàng hơn – vì những services nhỏ hơn và nhanh hơn để test.
  • Khả năng triển khai tốt hơn – các services có thể được triển khai độc lập.
  • Mỗi services có thể được phát triển bởi những team khác nhau. Mỗi team có thể phát triển, thử nghiệm, triển khai và mở rộng quy mô dịch vụ của mình một cách độc lập.
  1. Giảm thiểu được rủi ro: Ví dụ như có lỗi trong một service thì chỉ có service đó bị ảnh hưởng. Các services khác sẽ vẫn tiếp tục xử lý các yêu cầu.
  2. Dễ dàng thay đổi để sử dụng các công nghệ mới: Khi thực hiện triển khai các services bạn có thể lựa chọn nhiều công nghệ mới phù hợp.
  3. Agility – microservice hỗ trợ phát triển theo mô hình Agile.

2. Nhược điểm của microservices là gì?

  1. Các nhà phát triển phần mềm phải đối mặt với sự phức tạp của việc tạo ra một hệ thống phân tán:
  • Cần phải implement việc communication giữa các inter-services.
  • Việc Handle partial failure là rất phức tạp vì một luồng xử lý cần đi qua nhiều services.
  • Việc thực hiện những requests ở nhiều services khó khăn hơn, nó cũng đòi hỏi sự phối hợp cẩn thận giữa các teams.
  • Những khó khăn trong việc đảm bảo toàn vẹn CSDL nếu triển khai theo kiến trúc cơ sở dữ liệu phân vùng.
  1. Việc triển khai và quản lý microservices nếu làm theo cách thủ công so với ứng dụng một khối phức tạp hơn nhiều.
  2. Phải xử lý sự cố khi kết nối chậm.

ưu nhược điểm của microservices

Liên lạc giữa Microservices

Mình sẽ liệt kê những loại link thường dùng của những ứng dụng microservices lúc bấy giờ .

Gửi Tin Bất Đồng Bộ – AMQP, STOMP, MQTT

Trong một số ít điều kiện kèm theo, thực trạng việc truyền tin bất đồng bộ là thiết yếu ( client không mong đợi response ngay lập tức, hoặc không cần response ). Những giao thức truyền tin bất đồng bộ như : AMQP, STOMP hay MQTT được sử dụng thoáng rộng .

Gửi Tin Đồng Bộ – REST, Thrift

Truyền tin đồng điệu ( người gửi – client sẽ đợi một khoảng chừng thời hạn để nhận tác dụng từ service ). REST là sự lựa chọn ưu tiên số 1 vì nó cung ứng mạng lưới hệ thống truyền tin đơn thuần qua giao thức HTTP dạng request – response. Vì thế, nhiều microservices sử dụng HTTP với API .

Các Kiểu Tin Nhắn – JSON, XML, Thrift, ProtoBuf, Avro

Với kiểu tin nhắn tương thích cho microservices và cũng là một yếu tố quan trọng. Với phần nhiều những ứng dụng microservices, thường sử dụng những kiểu tin nhắn dạng chữ như JSON và XML trên nền giao thức HTTP với API. Trong những trường hợp cần truyền tin dạng nhị phân, microservices hoàn toàn có thể dùng dạng Thrift, Proto hay Avro .

Service Contracts – Định Nghĩa Service Interfaces – Swagger, RAML

Khi bạn đang có một nhiệm vụ được thiết kế xây dựng như một dịch vụ thì bạn cần định nghĩa và thông tin hợp đồng dịch vụ ( service contract bộc lộ giao kèo của service ) .
Vì tất cả chúng ta thiết kế xây dựng microservices trên kiểu kiến trúc REST nên ta hoàn toàn có thể sử dụng cùng kiểu REST API để định nghĩa hợp đồng của microservices. Vì thế microservices sử dụng những ngôn từ định nghĩa REST API tiêu chuẩn như Swagger, RAML để định nghĩa cho hợp đồng dịch vụ .

Những sự độc lạ giữa API và microservice

Dưới đây là một số ít sự độc lạ chính giữa API và microservice :

  • API là một tập hợp những định nghĩa về chương trình con, các giao thức truyền thông và những công cụ để xây dựng, phát triển phần mềm. Tóm lại, nó là một tập hợp các phương thức giao tiếp được xác định rõ ràng giữa các thành phần khác nhau.
  • Microservice là một thiết kế kiến ​​trúc nó giúp tách các phần của ứng dụng chia thành các dịch vụ nhỏ, tự vận hành.

Như vậy, nghĩa là API thường là một phần của microservice, nó cho phép tương tác với chính microservice. Hay có thể nói là API đóng vai trò như là hợp đồng cho các tương tác trong microservice.

sự khác biệt giữa api và microservice
Mỗi một microservice được kiến thiết xây dựng hơi khác nhau dựa trên nhu yếu của nó ( hình trên ). Dưới đây là 1 số ít ví dụ về những tính năng khác nhau mà microservice hoàn toàn có thể có :

  • Cung cấp những hoạt động CRUD cho một loại thực thể cụ thể, ví dụ như khách hàng, sự kiện, v.v. Dịch vụ này sẽ có vai trò giữ khả năng duy trì dữ liệu trong cơ sở dữ liệu.
  • Cung cấp một phương tiện để chấp nhận các tham số và trả về kết quả dựa trên các tính toán.

Nên sử dụng kiến trúc Microservices khi nào ?

Kiến trúc Microservices khi nào chúng ta nên sử dụng nó. Khi bạn phát triển phiên bản đầu tiên của ứng dụng, bạn thường sẽ không gặp phải các vấn đề mà Microservices giải quyết được.

Ngoài ra, việc sử dụng một kiến trúc phân tán, phức tạp sẽ làm chậm quy trình tăng trưởng. Đây cũng là một yếu tố rất lớn so với những start-up vì họ cần tăng trưởng nhanh quy mô kinh doanh thương mại cùng với tăng trưởng một ứng dụng đi kèm .

Vì vậy, theo mình trừ khi bạn có một mạng lưới hệ thống quá phức tạp, lớn để quản trị bằng Monolithic Architecture, hay là bạn xác lập tương lai của ứng dụng sẽ trở nên như vậy. Thì kiến trúc Monolithic vẫn đủ tốt so với bạn .

Đây là những chia sẻ của mình về microservices là gì? Và những điều cần biết về microservices. Cảm ơn các bạn đã theo dõi bài viết của mình.

Có thể bạn quan tâm:

  1. Mô hình client-server là gì? Những ưu nhược điểm của mô hình này

5

/

5
(
1
bầu chọn
)