Bạn biết gì về Microservices?
Bạn đã biết về kiến trúc microservices chưa? Làm cách nào để biết được rằng liệu dự án mà bạn đang làm có thể áp dụng microservices được hay không? Nếu bạn đang tò mò về microservices thì hãy đọc ngay bài viết dưới đây nhé!
Microservices là gì?
Microservices là một kỹ thuật phát triển phần mềm với cách tiếp cận chia nhỏ ứng dụng thành nhiều thành phần có mục đích sử dụng riêng và có thể kết nối được với nhau để tạo thành một hệ thống. Sở dĩ, kiến trúc này được gọi là microservices vì các thành phần trong ứng dụng được chia nhỏ hơn so với các dịch vụ Service-Oriented Architecture (SOA) truyền thống đã phổ biến hơn một thập kỷ. Đặc điểm của Microservices:
Triển khai một tác vụ duy nhất trong 1 ngữ cảnh giới hạn miền (domain bounded context). Đây là đặc điểm cơ bản của một microservice, thúc đẩy mức chi tiết và sự tách biệt để duy trì khả năng triển khai độc lập.
Các microservices được kết hợp lỏng lẻo với nhau, nó sử dụng ít hoặc có thể không sử dụng các khái niệm liên quan đến các microservices khác - thực thi tách biệt.
Tự chủ, có thể được phát triển và sửa đổi mà không cần quá nhiều sự phối hợp giữa các nhóm developer thuộc nhiều lĩnh vực khác nhau - thúc đẩy các hoạt động phát triển nhanh.
Kiểm tra, triển khai và khôi phục riêng lẻ, độc lập - không gây ảnh hưởng đến các microservices khác - cho phép việc triển khai tự động dựa trên nền tảng cloud, mở rộng quy mô, độ tin cậy và chuyển đổi dự phòng.
Nếu một thành phần trong ứng dụng không đáp ứng được bốn mục tiêu cơ bản trên, nó sẽ không được gọi là một microservice. Cũng chính vì thế, nó không thể đem lại những lợi ích mà phong cách kiến trúc microservice có được.
Thế Monoliths là gì?
Vì dễ hiểu và dễ sử dụng nên kiến trúc phân lớp rất phổ biến. Kiến trúc này hướng đến việc phân tách các thành phần ứng dụng thành các lớp, mỗi lớp có một phạm vi trách nhiệm riêng. Tách User Presentation Layer ra khỏi các phần còn lại của ứng dụng giúp tạo điều kiện thuận lợi cho việc triển khai GUI. Nếu Persistence Layer được thiết kế tốt, độ độc lập của DBMS sẽ được duy trì ở mức độ cao.
Các framework SOA phổ biến nhất hiện nay gồm Spring Boot và Jakarta RESTful Web Services (JAX-RS) là các kiến trúc phân lớp có thể hoạt động rất tốt - triển khai mạnh mẽ, đáng tin cậy và có thể quản lý được SOA pattern. Trước khi điện toán đám mây ra đời, có thể dễ dàng để thấy được rằng SOA là kiến trúc tốt nhất cho một loạt các ứng dụng và dịch vụ kinh doanh. Tuy nhiên, khi điện toán đám mây ra đời, kiến trức này xuất hiện một số nhược điểm:
Ở mức tối thiểu, Business Layer và Persistence Layer phải được triển khai cùng nhau như một khối duy nhất, có thể thực thi được - trong khi đó User Presentation Layer và Database Layer được kết nối bằng mạng với phần còn lại của khối nguyên khối.
Phần lớn framework hỗ trợ lớn luồn cần phải được triển khai cùng với ứng dụng sử dụng kiến trúc này.
Luồng điều khiển ứng dụng cần phải đi qua từng lớp từ trên xuống dưới (User Presentation-> Business-> Persistence-> Database) và sau đó đi ngược lại qua các lớp tương tự.
Khớp nối chặt chẽ giữa các thành phần có tác động tiêu cực đến tốc độ phát triển và cả tốc độ phản hồi.
Microservices có thể khắc phục được những hạn chế nào?
Kiến trúc microservice tồn tại để giúp giải quyết một số vấn đề về phát triển, triển khai và runtime bằng cách:
Rút ngắn chu kỳ phát triển phần mềm, tối ưu hóa các hoạt động phát triển và linh hoạt trong bảo trì phần mềm.
Thúc đẩy việc lặp lại các tính năng diễn ra nhanh chóng hơn, đơn giản hóa việc kiểm thử phần mềm, tích hợp liên tục và phân phối liên tục.
Khai thác khả năng triển khai tự động, mở rộng quy mô, độ tin cậy và khả năng xử lý sự cố có sẵn với cloud container với điều phối container.
Bằng cách tăng cường sự cô lập giữa các thành phần của một phần mềm, microservices có thể phân phối các phần nhỏ rời rạc của hệ thống một cách nhanh chóng và độc lập. Và, bằng cách sử dụng các container, điều phối container có thể mang lại khả năng mở rộng theo chiều ngang và khả năng chịu lỗi cao trên các cụm đám mây.
Ưu nhược điểm của Microservices
Đâu có gì là tuyệt đối hoàn hảo! Điều đó đặc biệt đúng khi nói đến thiết kế phần mềm - nơi hầu hết mọi lựa chọn đều được cân nhắc giữa chi phí và lợi ích.
Được thực hiện theo hướng đúng đắn, kiến trúc microservice thực sự có thể mang lại những lợi ích mà nó hứa hẹn:
Cho phép phát triển phần mềm nhanh hơn, linh hoạt hơn.
Giúp việc lặp lại chức năng ứng dụng nhanh hơn và ít phiền phức hơn.
Mở ra sức mạnh đến từ cloud cho ứng dụng và người dùng.
Nhưng, tất cả điều đó đi kèm với một cái giá phải trả. Sử dụng kiến trúc microservices đòi hỏi tính nghiêm ngặt và kỷ luật nhiều hơn - tư duy nhiều hơn để mã hóa ít hơn.
Một trong những điểm đánh đổi của kiến trúc microservice là nó có xu hướng tạo ra nhiều thành phần hơn nhưng nhỏ hơn SOA. Điều đó có thể làm tăng độ phức tạp, tăng theo cấp số nhân với số lượng các thành phần. Công thức để định ra độ phức tạp là c = n (n-1) / 2, trong đó n là số thành phần, có nghĩa là các cơ chế phân cấp, cấu hình và điều khiển truyền thống không hoạt động tốt khi dùng microservices. Việc triển khai một microservices lớn yêu cầu các kỹ thuật kiểm soát, cấu hình linh động (dynamic) và tự chủ (self-organizing), những điều này giúp hỗ trợ khả năng mở rộng theo chiều ngang và khả năng chuyển đổi dự phòng trên nền tảng cloud.
Microservices và điện toán đám mây sẽ là những thứ mới đối với hầu hết các tổ chức. Việc nhảy thẳng vào thực hiện là rất mạo hiểm, tốt hơn hết là nên bắt đầu từ đầu và thực hiện từng bước một bằng các dự án nhỏ. Các công ty như Amazon và Netflix đã rất thành công khi sử dụng phương pháp tiếp cận microservices, tất nhiên họ không hoàn thành tất cả trong một sớm một chiều.