Thứ Ba, 7 tháng 11, 2023

Những lợi ích của microservices

 Mở đầu

    Microservice đã nhanh chóng trở thành kiến trúc phổ biến cho những công ty, tổ chức tân tiến,  Nó là một kiến trúc xây dựng hệ thống phân tán cho phép nhà phát triển xây dựng, triển khai và co giãn các dịch vụ riêng lẻ một cách độc lập. Điều này cho phép dễ dàng quản lý một ứng dụng lớn và thay đổi business nhanh chóng theo các yêu cầu .
 Ở bài viết trước tôi đã nhắc đến những khó khăn và thách thức khi làm việc với microserivce, nhưng như vậy là không công bằng nếu ko nhìn về mặt lợi ích mà microservice mang lại. Bài viết này sẽ là câu trả lời tiếp theo cho câu hỏi Microservice có phải là miền đất hứa? (Link đến bài Microservice có phải là miền đất hứa)






Những lợi ích của microservices

Easy to develop and maintain

Microservice tương đối nhỏ và đơn giản hơn ứng dụng monolithich nên dễ dàng hơn trong việc phát triển và bảo trì. Các dịch vụ được isolate về business và data nên hoạt động và performance của dịch vụ này sẽ ít hoặc không ảnh hưởng đến toàn hệ thống. Với một trường hợp khi một tính năng cao tải, với hệ thống monolithic thì toàn bộ tài nguyên available của hệ thống sẽ bị sử dụng hết, toàn bộ hệ thống có thể downtime, thậm chí phải cần đến reset toàn bộ, trong khi với microservice, issue không ảnh hưởng tới toàn hệ thống và có thể được giải quyết bằng các giải pháp cục bộ.

Highly available

    Tính sẵn sàng cao nói đến việc service của bạn luôn sẵn sàng trong nhiều điều kiện khác nhau(một instance bị crash, cao tải, không phản hồi...). Theo mô hình tiêu chuẩn, một hệ thống microservice thường được triển khai trên các nền tảng ảo hóa, một service được chạy song song trên nhiều runtime instance(Replica), hệ thống Container Orchestration sẽ kiểm tra tính sẵn sàng và điều  phối request đến các instance đang available, và ngăn các request đến các instance có vấn đề cho đến khi chúng phục hồi.

Scalable

    Khả năng có giãn của service mang lại hiệu quả cả về kinh tế và performance cho cả hệ thống. Tưởng tượng khi hệ thống thấp tải hoặc các service không yêu cầu quá nhiều tài nguyên, có thể giảm cấu hình của từng instance hoặc giảm cả về số lượng instance để tối ưu chi phí. Khi hệ thống yêu cầu tài nguyên lớn để xử lý trong các trường hợp đặc biệt, hệ thống lại sẵn sàng tăng cấu hình từng instance hoặc tăng số lượng lớn các instance để đáp ứng tải. 

Resilient

    Khả năng phục hồi: Các nền tảng ảo hóa thường có cơ chế để kiểm tra sức khỏe từng phần hoặc cả hệ thống từ đó đảm bảo tự động khôi phục hoạt động của ứng dụng và hệ thống khi có vấn đề xảy ra, các vấn đề có thể đến từ nội hàm của dịch vụ  như cao tải, crash ứng dụng, do người dùng delete các instance hoặc các vấn đề lớn hơn như máy chủ vật lý gặp lỗi, cần chuyển sang node khác để hoạt động.

Fault-tolerant

    Khả năng chịu lỗi: Khả năng này khá trừu tượng cho những người mới tiếp cận với microservice. Khả năng chịu  có vẻ tương đồng với khả năng phục hồi, nhưng scope của những tính năng này không giống nhau. Khi các instance gặp lỗi, hệ thống cũng cần có khả năng handle được lỗi này. Nhưng không chỉ có vậy, nếu nhìn một cách tổng quát hơn, bất kì vấn đề nào của hệ thống microservice đều có thể dẫn đến khả năng ảnh hưởng đến business và dữ liệu. Mục đích cuối cùng của khả năng chịu lỗi là đảm bảo business ít hoặc không bị ảnh hưởng bởi các lỗi của hệ thống, bảo gồm các lỗi do logic và các lỗi do hạ tầng, kết nối. Các lỗi của hệ thống có thể kể đến như Slow Network, Service downtime, Connection timeout, Cross service transaction...

Increase Release Cycle

    Do các business domain đã được chia nhỏ theo các service nên tốc độ  phát triển có thể được gia tăng bằng cách triển khai nhiều team cùng phát triển các domain của ứng dụng. Nhưng từ bài viết trước chúng ta cũng thấy được microservice khiến việc duplicate các effort lên là khá thường xuyên, nhưng khi đã có giải pháp để tối ưu thì tính linh hoạt của microservice được thể hiện rõ rệt, do các ứng dụng tương đối nhỏ, ít depend với nhau nên khả năng phát triển độc lập được gia tăng. Quá trình CI-CD được tích hợp liên tục mà không làm gián đoạn cả hệ thống trong thời gian dài

Technology combination

    Trước đây chúng ta thường thấy có những stack thường đi cùng với nhau như XAMMP, LAMP, WAMP vs MAMP trong phát triển ứng dụng web hoặc các giải pháp của .Net, C-sharp thường gắn liền với hệ sinh thái của Microsoft. Nhưng giờ đây với sự phát triển của công nghệ nói chung và microservice nói riêng, các stack tương thích với nhau dễ dàng hơn rất nhiều, nhiều chuẩn giao tiếp, protocol được phát triển và được hỗ trợ bởi nhiều ứng dụng như Rest API, gRPC, Messaging... Cả một hệ thống hoặc ứng dụng lớn có thể được triển khai đơn giản trên công nghệ container khi tất cả source code và các dependency đã được đóng gói trong một image duy nhất, rất tiện dụng. Hệ thống có thể kết hợp nhiều công nghệ, đa dạng ngôn ngữ lập trình cho các mục đích phù hợp, tối ưu hóa hệ thống.

Hardware/Resource Optimization

Nhờ công nghệ container mà chúng ta không cần phải triển khai cả một máy chủ ảo để chạy các ứng dụng theo cách truyền thống, các ứng dụng khi được viết bằng các ngôn ngữ phù hợp có thể chạy trên các cấu hình container nhỏ (0.25CPU/ 0.25 Gb RAM) hoặc thậm chí nhỏ hơn nữa, bao gồm cả các ứng dụng phía backend. Quá trình CI-CD trên các dịch vụ nhỏ cũng giúp tăng tốc và tối ưu về tốc độ phát triển. Do có thể chia nhỏ việc phát triển các dịch vụ trên các team/member nhỏ hơn nên việc phát triển cũng tối ưu về nguồn lực, mỗi team/member chịu trách nhiệm trên service của mình, giảm việc phải hiểu và debug cả project lớn và phải hiểu nhiều tech stack, language khác nhau.

Reusability

Khả năng tái sử dụng cao do các service được đóng gói cả code và dependency cùng với nhau, khi có bất cứ nhu cầu về triển khai lại các version code khác nhau, chỉ cần deploy lại image tương ứng, mà không cần build lại từ đầu. Cùng image đó có thể triển khai trên nhiều hạ tầng khác nhau, với chắc chắn cùng một phiên bản code, stable về business. Write once, run everywhere, chỉ cần máy chủ có triển khai công nghệ container thì microservice có thể triển khai trên bất kì hệ điều hành nào bao gồm cả linux và window.

Security

Các service có thể được tách biệt về code và cả data nên có thể che giấu được business phía sau. Đảm bảo bảo mật về mặt dữ liệu và business. Các dịch vụ cũng không access được đến các secret, config của dịch vụ khác, đảm bảo isolate giữa các teams/members.

Kết

Quả cả hai bài viết, chúng ta đã có cái nhìn khá toàn diện về ưu/nhược điểm của kiến trúc microservices. Điều này sẽ giúp nhà phát triển đưa ra được quyết định tốt nhất khi xây dựng kiến trúc hệ thống

Peace! 
Tác giả: Ethanol Tran

Không có nhận xét nào:

Đăng nhận xét

Hướng dẫn xây dựng API gateway bằng Nodejs

 Ở bài viết trước, chúng ta đã tìm hiểu các chức năng và tầm quan trọng của API gateway trong kiến trúc microservice. Các tiêu chí trong việ...