Microservice là một phương pháp xây dựng phần mềm bằng cách chia hệ thống thành các module với các chức năng riêng biệt và có thể ghép nối với nhau. Đối lập với kiến trúc microservice là kiến trúc monolithic trong đó toàn bộ các chức năng được xây dựng trong một ứng dụng lớn duy nhất.
Microservice đã trở nên phổ biến trong những năm gần đây và được sử dụng rộng rãi ở các công ty lớn như Amazon, eBay, Netflix, PayPal, Twitter, Uber, …
Kiến trúc Microservice
Trong kiến trúc monolithic, các tiến trình phụ thuộc chặt chẽ vào nhau và hoạt động dưới dạng một service duy nhất. Nếu một tiến trình nào đó cần thêm tài nguyên xử lý (RAM, CPU, Network, …) toàn bộ hệ thống sẽ cần được nâng cấp. Ngoài ra, toàn bộ mã của ứng dụng được deploy cùng nhau, do đó việc thêm/bớt các tính năng sẽ phức tạp và có nguy cơ gây ảnh hưởng đến các tính năng vốn đang hoạt động tốt.
Những vấn đề này làm giảm tính năng động, linh hoạt của hệ thống phần mềm và khiến sức cạnh tranh của các hệ thống phần mềm xây dựng trên kiến trúc monolithic không cao. Ngược lại, kiến trúc Microservice cho phép chia nhỏ một ứng dụng lớn thành các phần nhỏ và hoạt động độc lập với nhau.
Các phần trong hệ thống Microservice có thể trao đổi với nhau thông qua các API. Mỗi phần thực hiện một chức năng nghiệp vụ riêng như: chuyển tiền, tạo hóa đơn hay xử lý dữ liệu. Việc deploy, nâng cấp hay mở rộng mỗi dịch vụ được tiến hành độc lập và không gây ảnh hưởng đến sự hoạt động của các phần còn lại trong hệ thống. Nhờ đặc điểm này, các hệ thống Microservice thường có tính linh hoạt cao và dễ mở rộng.
Tuy nhiên, việc chuyển đổi từ kiến trúc Monolithic sang Microservice đòi hỏi các công ty phải nâng cấp về hạ tầng IT. Ngày nay, các nền tảng Cloud phổ biến như AWS, Azure, GCP đều có các tính năng hỗ trợ sẵn để xây dựng ứng dụng theo hướng Microservice. Do đó việc lựa chọn trên nền tảng Cloud để phát triển phần mềm hướng Microservice cũng là lựa chọn được nhiều doanh nghiệp ưa thích.
Đặc điểm của hệ thống Microservice
Chia nhỏ thành nhiều thành phần
Phần mềm xây dựng theo kiến trúc Microservice thường được chia thành nhiều dịch vụ nhỏ. Mỗi dịch vụ có thể được tạo ra, nâng cấp, deploy độc lập mà không ảnh hưởng đến hoạt động tổng thể của toàn hệ thống. Khi số lượng người dùng tăng, hệ thống có thể dễ dàng mở rộng bằng cách tăng khả năng xử lý cho một vài dịch vụ cụ thể thay vì phải nâng cấp toàn bộ hệ thống.
Bền vững và kháng lỗi tốt
Hệ thống xây dựng trên kiến trúc Microservice thường ít gặp sự cố, đặc biệt là các sự cố lớn và nghiêm trọng. Sự cố có thể xảy ra ở một vài module, tuy nhiên với các hệ thống Microservice được xây dựng theo hướng sẵn sàng cao (High Availability), các module gặp lỗi sẽ chuyển tiếp yêu cầu gọi tới chúng sang các module khác có cùng khả năng xử lý. Đồng thời, trong hệ thống còn có các dịch vụ giám sát để phát hiện các module gặp lỗi để sớm khắc phục, đưa chúng trở lại hoạt động bình thường.
Kết nối đơn giản
Các thành phần trong hệ thống Microservice có khả năng xử lý độc lập nhưng cũng có thể kết nối với nhau để trao đổi dữ liệu. Việc kết nối giữa các thành phần trong hệ thống Microservice được thiết kế theo cách đơn giản, gọn nhẹ và thường được thực hiện thông qua các Rest API.
Hoạt động phi tập trung
Trong kiến trúc Microservice, các module thường sử dụng nhiều công nghệ và nền tảng khác nhau, do đó mô hình truyền thống theo hướng tập trung hóa thường trở nên không hiệu quả. Mỗi dịch vụ trong hệ thống Microservice thường sử dụng cơ sở dữ liệu riêng và chỉ thực hiện trao đổi dữ liệu với nhau qua các API.
Một số ví dụ về Microservice
Amazon
Vào đầu những năm 2000, hệ thống bán lẻ của Amazon được xây dựng trên kiến trúc monolithic, bởi đây là kiến trúc phổ biến được ưa dùng bởi các startup công nghệ tại thời điểm đó. Trong quá trình vận hành hệ thống, Amazon ngày bổ sung thêm nhiều tính năng mới, điều này dẫn đến mã nguồn của hệ thống đã trở nên rất lớn và phức tạp, tốc độ phát triển phần mềm bị chậm lại. Trong hoàn cảnh đó, Amazon đã quyết định chia nhỏ hệ thống monolithic của mình thành từng phần nhỏ độc lập với các chức năng chuyên biệt.
Các lập trình viên thực hiện phân tích mã nguồn hiện có, tìm cách tách biệt các khối code ra khỏi nhau và gói chúng trong các Web service. Mỗi khối chức năng sau khi tách ra sẽ được phân cho từng nhóm phát triển phụ trách. Ngày nay, Amazon không chỉ phát triển mảng bán lẻ mà còn đi đầu trong mảng điện toán đám mây và là một trong những công ty đi đầu trong việc cung cấp các giải pháp về Microservice hỗ trợ các doanh nghiệp phát triển phần mềm theo hướng hiện đại.
Netflix
Netflix là nền tảng video trực tuyến hàng đầu thế giới. Netflix bắt đầu thực hiện chuyển đổi sang Microservice từ năm 2008 khi hệ thống streaming tại thời điểm đó gặp nhiều vấn đề về mở rộng và khả năng duy trì dịch vụ ổn định.
Khi cơ sở dữ liệu chính của Netflix gặp sự cố, nó thường khiến cho việc vận chuyển các đĩa DVD đến khách hàng bị chậm 3 ngày. Đó là lúc Netflix nhận ra cần phải chuyển sang Microservice. Netflix đã thay đổi cơ chế mở rộng hệ thống theo chiều dọc (vốn dựa trên cơ sở dữ liệu quan hệ truyền thống), sang cơ chế mở rộng theo chiều ngang bằng cách sử dụng các hệ thống phân tán trên nền tảng đám mây.
Năm 2009, Netflix bắt đầu chuyển đổi hệ thống monolithic sang microservice, lần lượt với từng dịch vụ một. Ban đầu, hệ thống mã hóa video được tách ra và vận hành độc lập trên AWS. Sau đó, hệ thống giao tiếp người dùng cũng được chuyển dần sang microservice, quá trình được hoàn tất vào năm 2012.
Việc chuyển đổi sang microservice đã giúp Netflix khắc phục được các vấn đề gặp phải trước đó, đồng thời giảm bớt chi phí hoạt động. Hiện nay, Netflix có thể phục vụ tới 210 triệu người dùng trên toàn thế giới và tiếp tục tăng trưởng mà không gặp phải trở ngại lớn nào về kỹ thuật. Điều này có được là nhờ vào việc Netflix đã áp dụng hiệu quả kiến trúc Microservice để vận hành hệ thống của mình
Uber
Giống như Amazon và Netflix, Uber đã quyết định rời bỏ kiến trúc monolithic của mình do gặp phải nhiều trở ngại trong quá trình mở rộng. Các vấn đề Uber gặp phải khi sử dụng hệ thống phát triển dựa trên kiến trúc Monolithic bao gồm: tốc độ phát triển chậm, khó fix bug, khó tích hợp với các bên thứ 3.
Khi hệ thống ngày càng trở nên phức tạp, nó cần tới những lập trình viên rất kinh nghiệm chỉ để thực hiện một vài thay đổi đơn giản. Để khắc phục tình trạng này, Uber đã chia nhỏ hệ thống monolithic của mình thành từng dịch vụ nhỏ và đưa lên vận hành trên cloud. Các dịch vụ mới cũng được phát triển thêm và kết nối với các dịch vụ cũ thông qua các API. Nhờ việc chuyển đổi sang Microservice, Uber đã vượt qua được những khó khăn họ gặp phải khi vận hành hệ thống monolithic.
Như vậy, từ những chia sẻ tổng quan trên, các bạn cũng đã hiểu được về Microservice là gì? các đặc điểm và lợi ích mà nó mang lại khi được những hãng công nghệ lớn sử dụng. Hy vọng rằng, những nhà phát triển sẽ hiểu và sử dụng được Microservices trong công việc phát triển phần mềm của mình trong tương lai!
Giảng viên Nguyễn Thị Hồng Hà
Bộ môn Ứng dụng phần mềm
Trường Cao đẳng FPT Mạng cá cược bóng đá
cơ sở Hà Nội