Ở 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ó. Lý do gì những công ty công nghệ hàng đầu thế giới thường áp dụng mô hình này. 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ý thiết kế ngược lại hoàn toà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.
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ất cả module thành một khối (monolith). Ở Microservices ta tách các module thành những service siêu nhỏ. Mỗi service sẽ được đặt trên một server riêng và thực hiện giao tiếp với nhau thông qua mạng.
Kiến trúc
Ở Microservices thì các services sẽ tồn tại độc lập nhau về xử lý, lưu trữ và request. Như hình bên dưới:
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 tại cửa hàng và ID của kho theo đúng với 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 tính chất giới hạn nên trên của kiến trúc Monolithic dẫn đến sự phát triển của kiến trúc mới đó là Microservices.
Xem thêm: Mô hình client-server là gì?
Những lợi ích của Microservices
Những lợi ích mà mô hình 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 nhược điểm của Microservices
1. Ưu điểm của microservices
- 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.
- 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.
- 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.
- Agility – microservice hỗ trợ phát triển theo mô hình Agile.
2. Nhược điểm của microservices là gì?
- 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.
- 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.
- Phải xử lý sự cố khi kết nối chậm.
Liên lạc giữa Microservices
Mình sẽ liệt kê những loại liên kết thường dùng của các ứng dụng microservices hiện nay.
Gửi Tin Bất Đồng Bộ – AMQP, STOMP, MQTT
Trong một số điều kiện, hoàn cảnh việc truyền tin bất đồng bộ là cần thiết (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 rộng rãi.
Gửi Tin Đồng Bộ – REST, Thrift
Truyền tin đồng bộ (người gửi – client sẽ đợi một khoảng thời gian để nhận kết quả từ service). REST là sự lựa chọn ưu tiên hàng đầu vì nó cung cấp hệ thống truyền tin đơn giả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 phù hợp cho microservices và cũng là một yếu tố quan trọng. Với phần lớn các ứ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 các trường hợp cần truyền tin dạng nhị phân, microservices 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 nghiệp vụ được xây dựng như một dịch vụ thì bạn cần định nghĩa và thông báo hợp đồng dịch vụ (service contract thể hiện giao kèo của service).
Vì chúng ta xây dựng microservices trên kiểu kiến trúc REST nên ta 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 các ngôn ngữ đị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ự khác biệt giữa API và microservice
Dưới đây là một số sự khác biệt 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.
Mỗi một microservice được xây dựng hơi khác nhau dựa trên nhu cầu của nó(hình trên). Dưới đây là một số ví dụ về các chức năng khác nhau mà microservice 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 quá trình phát triển. Đây cũng là một vấn đề rất lớn đối với các start-up vì họ cần phát triển nhanh mô hình kinh doanh cùng với phát triển một ứng dụng đi kèm.
Vì vậy, theo mình trừ khi bạn có một hệ thống quá phức tạp, lớn để quản lý bằng Monolithic Architecture, hay là bạn xác định 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 đối 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:
- Mô hình client-server là gì? Những ưu nhược điểm của mô hình này