Hỏi đáp công nghệ

Microservice là gì? Lợi ích tuyệt vời của nó trong phát triển phần mềm

Share on facebook
Facebook
Share on twitter
Twitter
Share on linkedin
LinkedIn

Table of Contents

Microservice là gì?

Kiến trúc microservice, hay gọi đơn giản là microservices, tiếng Việt tạm dịch là Vi dịch vụ, là một phương pháp đặc biệt để phát triển hệ thống phần mềm mà cố gắng tập trung vào việc xây dựng các mô-đun đơn chức năng với các giao diện và sự vận hành được xác định rõ ràng. Xu hướng này đã trở nên phổ biến trong những năm gần đây khi các doanh nghiệp mong muốn áp dụng nhiều hơn mô hình Agile và hướng tới DevOps và kiểm thử liên tục.

Microservices có nhiều lợi ích cho các nhóm Agile và DevOps – như Martin Fowler đã nêu rõ, Netflix, Twitter, eBay, Amazon, PayPal và các ông lớn công nghệ khác đều đã phát triển từ kiến ​​trúc nguyên khối (monolithic) sang microservices.

Không giống như microservices, một ứng dụng nguyên khối được xây dựng giống như một đơn vị tự trị, duy nhất. Điều này làm cho những thay đổi đối với ứng dụng bị chậm lại vì nó ảnh hưởng đến toàn bộ hệ thống. Một sửa đổi được thực hiện đối với một phần nhỏ trong code có thể cần phải xây dựng và triển khai một phiên bản phần mềm hoàn toàn mới. Mở rộng các chức năng cụ thể của một ứng dụng lúc này cũng đồng nghĩa là bạn phải mở rộng quy mô toàn bộ ứng dụng.

Microservice là gì?
Microservice là gì?

Microservices giải quyết tất cả thách thức này của các hệ thống nguyên khối bằng cách mô-đun hóa càng nhiều càng tốt. Ở dạng đơn giản nhất, chúng giúp xây dựng một ứng dụng dưới dạng một bộ các dịch vụ nhỏ, mỗi dịch vụ chạy trong một quy trình riêng và có thể triển khai một cách độc lập.

Các dịch vụ này có thể được viết bằng nhiều ngôn ngữ lập trình khác nhau và có thể sử dụng các kỹ thuật lưu trữ dữ liệu khác nhau. Microservices thường được kết nối thông qua API và có thể tận dụng nhiều công cụ và giải pháp tương tự đã phát triển trong hệ sinh thái dịch vụ web và RESTful. Kiểm thử các API này có thể giúp xác thực các luồng dữ liệu và thông tin trong suốt quá trình triển khai microservice của bạn.

Lợi ích của Microservices

Nhanh nhẹn

Microservices thúc đẩy một tập hợp các nhóm nhỏ, độc lập nắm quyền sở hữu các dịch vụ của chúng. Các nhóm hành động trong một bối cảnh nhỏ và rõ ràng, đồng thời được trao quyền để làm việc một cách độc lập và nhanh chóng hơn. Điều này rút ngắn thời gian của chu kỳ phát triển. Bạn được hưởng lợi đáng kể từ thông lượng tổng hợp của tập hợp này.

Mở rộng quy mô linh hoạt

Microservices cho phép từng dịch vụ nhỏ được mở rộng quy mô độc lập để đáp ứng những nhu cầu về tính năng ứng dụng mà nó hỗ trợ. Điều này cho phép các nhóm đáp ứng được nhu cầu cơ sở hạ tầng ở quy mô thích hợp, đo lường chính xác chi phí của một tính năng cụ thể và duy trì tính khả dụng nếu nhu cầu cho một dịch vụ tăng đột biến.

Triển khai dễ dàng

Microservice cho phép tích hợp và phân phối liên tục, giúp bạn dễ dàng test các ý tưởng mới và roll back bất cứ lúc nào nếu có gì trục trặc. Chi phí thất bại thấp cho phép thử nghiệm nhiều hơn, giúp cập nhật code dễ dàng và tăng tốc thời gian tiếp thị cho các tính năng mới.

Tự do công nghệ

Các kiến ​​trúc microservice không tuân theo kiểu tiếp cận “một kích thước phù hợp với tất cả”. Các nhóm có quyền tự do lựa chọn những công cụ tốt nhất nhất để giải quyết các vấn đề cụ thể của họ. Do đó, các nhóm xây dựng microservices có thể chọn công cụ phù hợp nhất cho từng công việc.

Tái sử dụng code

Việc phân chia phần mềm thành các mô-đun nhỏ và được xác định rõ ràng cho phép các nhóm sử dụng các chức năng cho nhiều mục đích khác nhau. Một dịch vụ được viết cho một chức năng cụ thể có thể được sử dụng như một khối xây dựng cho một tính năng khác. Điều này cho phép ứng dụng tự bootstrap, vì các developer có thể tạo ra các tính năng mới mà không cần viết code từ đầu.

Khả năng phục hồi

Tính độc lập của các dịch vụ làm tăng khả năng chống lại lỗi của ứng dụng. Trong một kiến ​​trúc nguyên khối, chỉ cần một thành phần duy nhất bị lỗi, nó có thể khiến toàn bộ ứng dụng bị lỗi theo. Nhưng với microservices, các ứng dụng xử lý toàn bộ lỗi dịch vụ bằng cách làm suy giảm chức năng mà không làm toàn bộ ứng dụng bị treo.

Hiểu rõ về kiến ​​trúc Microservice

Giống như không có bất kì định nghĩa chính thức nào về thuật ngữ microservices, cũng không có mô hình tiêu chuẩn nào mà bạn sẽ thấy được trong mọi hệ thống dựa trên kiểu kiến ​​trúc này. Nhưng bạn hầu hết các hệ thống microservice đều có chung một vài đặc điểm đáng chú ý. Dưới đây là 6 đặc điểm của Microservice mà Hỏi đáp Công nghệ tổng hợp được:

Đa thành phần

Theo định nghĩa, phần mềm được xây dựng dưới dạng microservice có thể được chia thành nhiều dịch vụ thành phần nhỏ. Tại sao phải làm vậy? Để mỗi dịch vụ này có thể được triển khai, tinh chỉnh và sau đó lại triển khai lại một cách độc lập mà không làm ảnh hưởng đến tính toàn vẹn của ứng dụng.

Do đó, bạn có thể chỉ cần thay đổi một hoặc một vài dịch vụ riêng biệt thay vì phải triển khai lại toàn bộ ứng dụng. Nhưng cách tiếp cận này cũng có những mặt trái của nó, bao gồm gọi API từ xa khá tốn kém (thay vì in-process call), các API từ xa thô hơn và tăng độ phức tạp khi phân phối lại trách nhiệm giữa các thành phần.

Được xây dựng cho doanh nghiệp

Phong cách microservices thường được xây dựng xung quanh các khả năng và ưu tiên của doanh nghiệp. Không giống như kiến trúc phát triển nguyên khối truyền thống, trong đó mỗi nhóm tập trung vào một trọng tâm cụ thể, chẳng hạn như giao diện người dùng, cơ sở dữ liệu hoặc logic phía máy chủ, thì kiến ​​trúc microservice sử dụng các nhóm chức năng chéo.

Trách nhiệm của mỗi nhóm là tạo ra các sản phẩm cụ thể dựa trên một hoặc nhiều dịch vụ riêng lẻ giao tiếp qua message bus. Trong microservices, một nhóm sở hữu sản phẩm vòng suốt đời của nó, như trong câu châm ngôn được trích dẫn của Amazon “ Bạn xây dựng nó, bạn chạy nó”, nguyên văn là “You build it, you run it.

Định tuyến đơn giản

Microservices hoạt động giống như hệ thống UNIX cổ điển: chúng nhận những yêu cầu, xử lý các yêu cầu đó và đưa ra một phản hồi tương ứng. Cơ chế này trái ngược với cách nhiều sản phẩm khác như ESB (Enterprise Service Buses) hoạt động, nơi các hệ thống công nghệ cao cho định tuyến tin nhắn, choreography và các quy tắc kinh doanh được sử dụng. Có thể nói rằng microservices có các thiết bị endpoint thông minh giúp xử lý thông tin và áp dụng logic cũng như các dumb pipe truyền thông tin qua đó.

Phi tập trung

Vì microservices có liên quan đến rất nhiều công nghệ và nền tảng khác nhau nên các phương pháp quản trị tập trung kiểu cũ không phải là tối ưu cho nó. Quản trị phi tập trung được cộng đồng microservices ưa chuộng vì các nhà phát triển của nó sẽ tạo ra các công cụ hữu ích mà những người khác có thể sử dụng để giải quyết các vấn đề tương tự.

Giống như quản trị phi tập trung, kiến ​​trúc microservice cũng hỗ trợ quản lý dữ liệu phi tập trung. Trong các hệ thống nguyên khối thường sử dụng một cơ sở dữ liệu logic duy nhất trên các ứng dụng khác nhau, nhưng trong một ứng dụng microservice, mỗi dịch vụ thường quản lý cơ sở dữ liệu duy nhất của nó.

Hạn chế thất bại

Giống như một công cụ toàn diện, microservices được thiết kế để hạn chế thất bại. Vì rất nhiều dịch vụ đa dạng và độc đáo đang giao tiếp với nhau, nên rất có thể một trong số đó bị lỗi vì lý do này hay lý do khác (ví dụ: khi không có nhà cung cấp). Nếu có một module hay một dịch vụ nhỏ bị sập bất ngờ, bạn có thể dễ dàng hơn để tìm được ra lỗi ở đâu vì mỗi module/dịch vụ chỉ có một chức năng nhất định. Cùng với đó, bạn có thể fix bug nhanh hơn trong khi không làm ảnh hưởng đến những module khác.

Tiến hóa

Kiến trúc Microservices là một thiết kế tiến hóa và hướng về tương lai, rất lý tưởng cho các hệ thống mà bạn không thể lường trước được tất cả các loại thiết bị sẽ truy cập vào ứng dụng của bạn sau này. Nhiều ứng dụng bắt đầu dựa trên kiến ​​trúc nguyên khối, nhưng xuất hiện một số yêu cầu không lường trước được, có thể được sửa đổi từ từ thành Microservices tương tác trên một kiến ​​trúc nguyên khối cũ hơn thông qua các API.

Xem thêm >> Scrum là gì? Tại sao bạn chắc chắn phải thử mô hình Scrum trong phát triển phần mềm?

Ví dụ về Microservices

Netflix sở hữu một kiến ​​trúc phổ biến đã phát triển từ nguyên khối sang SOA. Nó nhận được hơn một tỷ lệnh gọi hàng ngày, từ hơn 800 loại thiết bị khác nhau đến API phát video trực tuyến của nó. Sau đó, mỗi lệnh gọi API sẽ prompt khoảng năm lệnh gọi bổ sung tới dịch vụ backend.

Amazon cũng đã chuyển sang microservices. Họ nhận được vô số lệnh gọi từ nhiều ứng dụng khác nhau — bao gồm các ứng dụng quản lý API dịch vụ web cũng như chính trang web — mà kiến ​​trúc hai tầng cũ của họ đơn giản là không thể nào xử lý được.

Trang web đấu giá eBay cũng là một ví dụ đã trải qua một quá trình chuyển đổi tương tự. Ứng dụng cốt lõi của chúng bao gồm một số ứng dụng tự trị, với mỗi ứng dụng thực thi những logic nghiệp vụ cho các lĩnh vực chức năng khác nhau.

Ưu và nhược điểm của Microservice

Microservice là gì?
Microservice là gì? Ưu và nhược điểm của Microservice

Microservices không phải là một viên đạn bạc. Bằng cách triển khai chúng, bạn sẽ phơi bày được các vấn đề giao tiếp, làm việc nhóm và các vấn đề khác đã ngầm hiểu trước đây nhưng hiện tại đã bị buộc phải công khai. Nhưng Cổng API trong Microservices giúp giảm đáng kể thời gian và nỗ lực cho việc xây dựng và QA.

Như với mọi thứ trên đời, kiến ​​trúc microservice có thích hợp với bạn hay không tùy thuộc vào nhu cầu của bạn, vì chúng đều sẽ có ưu và nhược điểm. Dưới đây là những tóm tắt nhanh của Hỏi đáp Công nghệ về một số điều tốt và xấu của Microservices:

Ưu điểm

  • Kiến trúc Microservice cho phép các nhà phát triển tự do phát triển và triển khai các dịch vụ một cách độc lập
  • Một nhóm khá nhỏ cũng có thể phát triển một microservice
  • Code cho các dịch vụ khác nhau có thể được viết bằng các ngôn ngữ khác nhau (mặc dù nhiều người không khuyến khích điều này)
  • Tích hợp dễ dàng và triển khai tự động (sử dụng các công cụ tích hợp liên tục với nguồn mở như Jenkins, Hudson, v.v.)
  • Dễ hiểu và dễ sửa đổi cho các nhà phát triển, do đó có thể giúp một thành viên mới trong nhóm thích nghi và làm việc hiệu quả một cách nhanh chóng
  • Các developer có thể tận dụng các công nghệ mới nhất
  • Code được tổ chức xung quanh các khả năng doanh nghiệp
  • Khởi động vùng chứa web nhanh hơn giúp việc triển khai cũng nhanh hơn
  • Khi cần thay đổi trong một phần nhất định của ứng dụng, chỉ cần thay đổi dịch vụ liên quan — không cần sửa đổi và triển khai lại toàn bộ ứng dụng
  • Cách ly lỗi tốt hơn: nếu một microservice bị lỗi, các dịch vụ khác vẫn sẽ tiếp tục hoạt động
  • Dễ dàng mở rộng quy mô và tích hợp với các dịch vụ của bên thứ ba
  • Không có cam kết lâu dài đối với stack công nghệ

Nhược điểm

  • Do các khối được triển khai phân tán, việc kiểm tra có thể trở nên phức tạp và nhàm chán
  • Số lượng dịch vụ ngày càng tăng có thể đưa đến các rào cản thông tin
  • Kiến trúc trở nên phức tạp hơn vì các coder phải giảm thiểu khả năng chịu lỗi, độ trễ mạng và giải quyết với nhiều định dạng thông báo cũng như cân bằng tải
  • Là một hệ thống phân tán, nếu quản lý không tốt nó có thể dẫn đến trùng lặp chức năng
  • Khi số lượng dịch vụ tăng lên, việc tích hợp và quản lý toàn bộ sản phẩm có thể trở nên phức tạp
  • Ngoài một số phức tạp của kiến ​​trúc nguyên khối, các nhà phát triển phải đối phó với sự phức tạp bổ sung của một hệ thống phân tán
  • Các nhà phát triển phải nỗ lực nhiều hơn để thực hiện cơ chế giao tiếp giữa các dịch vụ

Microservices với SOA

Microservice là gì
Microservice là gì? Microservices với SOA

Sau khi đọc những thông tin trên, một số bạn đọc có thể thắc mắc rằng “Đây không phải chỉ là một tên gọi khác của SOA sao?”

Kiến trúc hướng dịch vụ (SOA) ,được hình thành trong những năm đầu của thế kỷ 21, và kiến ​​trúc microservice (được một số người viết tắt là MSA) có một số điểm tương đồng. Tuy nhiên, SOA truyền thống là một framework rộng hơn nhiều. Một số người ủng hộ microservices từ chối hoàn toàn SOA tag, trong khi những người khác lại coi microservices đơn giản là một trạng thái SOA lý tưởng và tinh tế. Dù bạn có nằm trong nhóm nào đi chăng nữa, chúng tôi cho rằng có sự khác biệt rõ ràng giữa microservices và SOA.

Ví dụ, với một mô hình SOA điển hình thường có nhiều ESB phụ thuộc hơn, với các microservices sử dụng cơ chế nhắn tin nhanh hơn. SOA cũng tập trung chủ yếu vào lập trình mệnh lệnh (imperative programming), trong khi kiến ​​trúc microservices lại tập trung vào phong cách lập trình tác nhân đáp ứng (responsive-actor programming).

Hơn nữa, các mô hình SOA có xu hướng bao gồm các cơ sở dữ liệu quan hệ (relational database) rất lớn, trong khi các dịch vụ vi mô thường sử dụng cơ sở dữ liệu NoSQL hoặc micro-SQL (có thể được kết nối với cơ sở dữ liệu thông thường). Nhưng sự khác biệt thực sự lại liên quan đến các phương pháp kiến ​​trúc được sử dụng để tạo ra một tập hợp các dịch vụ tích hợp ngay từ đầu.

Vì mọi thứ đều thay đổi cực nhanh chóng trong thế giới kỹ thuật số, nên các kỹ thuật phát triển Agile có khả năng bắt kịp với nhu cầu của sự phát triển phần mềm là vô giá. Hầu hết các phương pháp được sử dụng trong kiến ​​trúc microservices đến từ các nhà phát triển đã tạo ra các ứng dụng phần mềm cho những “ông lớn công nghệ” và những người biết rằng người dùng cuối ngày nay luôn mong đợi trải nghiệm năng động và nhất quán trên nhiều loại thiết bị.

Thị trường đang có nhu cầu cao đối với các ứng dụng dựa trên đám mây có khả năng mở rộng, thích ứng và có thể truy cập nhanh chóng. Và điều này đã khiến nhiều nhà phát triển thay đổi cách tiếp cận của họ.

Xem thêm >> PWA là gì? Tại sao nó lại cực kì quan trọng trong E-commerce

Tương lai của kiến ​​trúc Microservice

Dù mô hình kiến ​​trúc microservice có trở thành xu hướng ưa thích của các nhà phát triển trong tương lai hay không, thì hiện tại rõ ràng đây là một ý tưởng mạnh mẽ đem lại lợi ích thực sự cho việc thiết kế và triển khai các ứng dụng doanh nghiệp. Nhiều nhà phát triển và tổ chức, chưa từng sử dụng cái tên microservice hoặc thậm chí gắn mác hoạt động của họ là SOA, đã sử dụng cách tiếp cận theo hướng tận dụng các API có thể được phân loại là microservices.

Chúng tôi cũng đã quan sát thấy một số công nghệ hiện có cố gắng giải quyết các phần của vấn đề phân mảnh và giao tiếp mà các microservices đang muốn giải quyết. SOAP thực hiện tốt việc mô tả các hoạt động có sẵn trên một thiết bị endpoint nhất định và nơi có thể discovery (khám phá) nó thông qua WSDL.

Về mặt lý thuyết, UDDI là một bước tiến tốt để quảng cáo những gì một dịch vụ có thể làm và nơi nó có thể được tìm thấy. Nhưng những công nghệ này đang bị lụi tàn dần do việc triển khai tương đối phức tạp và đang không được áp dụng trong các dự án mới hơn. Các dịch vụ dựa trên RESTful phải đối mặt với các vấn đề tương tự và mặc dù bạn có thể sử dụng WSDL với REST, nhưng nó thực sự không được thực hiện rộng rãi.

Giả sử việc discovery là một vấn đề đã được giải quyết, việc chia sẻ schema và meaning trên các ứng dụng không liên quan vẫn là một đề xuất khó đối với bất kỳ mô hình nào khác ngoài microservices và các hệ thống SOA. Các công nghệ như RDFS, OWL và RIF tồn tại và đã được tiêu chuẩn hóa, nhưng vẫn không được sử dụng phổ biến. JSON-LD và Schema.org cung cấp một cái nhìn sơ lược về toàn bộ web mở chia sẻ các định nghĩa trông như thế nào, nhưng những định nghĩa này vẫn chưa được áp dụng trong các doanh nghiệp tư nhân lớn.

Mặc dù vậy, sức mạnh của các định nghĩa được chuẩn hóa và chia sẻ đang xâm nhập vào trong chính phủ. Kết quả có thể thấy được trong data.gov và data.gov.uk. Nếu một số lượng lớn các định nghĩa tiêu chuẩn có thể được thống nhất, các bước tiếp theo rất có thể hướng tới các tác nhân (agents): các chương trình nhỏ điều phối microservices từ một số lượng lớn các nhà cung cấp để đạt được các mục tiêu nhất định.

Khi bạn thêm độ phức tạp và yêu cầu giao tiếp của các ứng dụng SaaS, thiết bị đeo được và Internet of Things vào bức tranh tổng thể, rõ ràng kiến ​​trúc microservice có thể có một tương lai rất tươi sáng ở phía trước.

Vậy là Hỏi đáp Công nghệ đã đưa ra những thông tin rất chi tiết cho câu hỏi microservice là gì, những lợi ích mà nó đem ại cho phát triển phần mềm cũng như ưu nhược điểm của mô hình này. Nếu bạn thấy hài lòng với bài viết, hãy chia sẻ kiến thức thú vị này cho bạn bè nhé!

Các bài viết liên quan

Leave a Comment

Email của bạn sẽ không được hiển thị công khai.

Bài viết liên quan