Thiết kế kiến trúc phần mềm là khâu quan trọng bậc nhất đối với việc bảo trì, vận hành, mở rộng phần mềm sau này. Đối với việc thiết kế web ngày nay, 02 hướng thiết kế nổi tiếng và được sử dụng rộng rãi là “Nguyên khối” (Monolithic) và “Microservices”.
Thiết kế Microservices với API Gateway được ra đời với mục đích cải thiện khả năng mở rộng và tối giản quá trình bảo trì, vận hành của các hệ thống phức tạp. Bài viết này sẽ phân tích tại sao chúng ta nên chọn Microservices và thiết kế theo Microservices với API Gateway.
Phần mềm nguyên khối và Microservices
Thiết kế phần mềm nguyên khối (Monolithic) so với Microservices
Các phần mềm nguyên khối là các phần mềm mà mọi services, API, Database cũng như các chức năng đều nằm chung 01 phần mềm sau khi build. Đối với các phần mềm nhỏ, điều này là vô cùng hợp lý khi nó mang lại sự tiện lợi, dễ kiểm soát cho lập trình viên. Đối với các phần mềm lớn, nhiều chức năng nhưng các chức năng nghiệp vụ đều liên quan với nhau, ví dụ như các bài toán đặc thù của ngành điện, đòi hỏi các API, services giao tiếp với nhau liên tục với tần suất cao thì việc thiết kế 01 phần mềm đồng nhất là một điểm mạnh, đem lại sự tin cậy và ổn định cao.
Những năm gần đây, có một kiểu kiến trúc thiết kế phần mềm mới ra đời đó là Microservices. Đây là kiểu thiết kế mà trong đó, các phân hệ backend được tách hẳn ra services khác nhau, giao tiếp với nhau thông qua các API qua giao thức HTTP/HTTPS. Mỗi services thường đặc trưng cho một phân hệ phần mềm và có kích thước nhỏ so với tổng thể hệ thống.
Giả sử như bài toán đặt ra là việc kết hợp hàng trăm các chức năng khác nhau, và các tính năng khá tách biệt nhau, ví dụ như việc giao tiếp giữa 2 phân hệ phần mềm của 02 ban nghiệp vụ khác nhau, thì lúc này, việc thiết kế phần mềm nguyên khối gặp trở ngại. Lúc này, việc thiết kế để các phần mềm giao tiếp được với nhau, nâng cao tính mở rộng cũng như giữ được khả năng bảo trì dễ dàng là điều cần thiết. Lúc này kiến trúc Microservices được xem như một lựa chọn thích hợp.
Ưu điểm:
- Thuận tiện cho việc thiết kế và triển khai liên tục cho các dự án lớn phức tạp.
- Thuận tiện cho việc test theo các phân hệ chức năng hơn, khi giờ đây có thể test các khối phần mềm nhỏ hơn.
- Deploy dễ hơn, vì nay deploy theo từng service.
- Thuận lợi cho việc phát triển theo team nhiều người, và nhiều team làm việc với nhau.
- Giảm thiểu việc phụ thuộc vào 1 stack công nghệ cụ thể, vì tất các các services đều có thể được thay thế và nâng cấp dần dần theo thời gian, miễn là vẫn đáp ứng được giao tiếp đầu ra, đầu vào.
Nhược điểm:
- Các nhà phát triển sẽ gặp khó khăn khi bảo trì hệ thống phân tán (distributed). Việc giao tiếp (intercommunication) giữa các services qua internet là rất quan trọng.
- Testing các services liên quan với nhau cùng lúc sẽ gặp khó khăn hơn, vì phải thông qua nhiều services qua internet.
- Việc phát triển các chức năng gồm nhiều services liên quan với nhau sẽ gặp khó khăn khi các team phải làm việc với nhau kỹ càng hơn, tránh xung đột giữa các service sau khi đã phát triển.
API Gateway cho kiến trúc Microservices: Giải pháp phát triển, bảo trì hệ thống Microservices
Thiết kế API Gateway cho Microservices
API Gateway sẽ giúp cho các nhà phát triển client giảm thiểu các vấn đề về security khi quá nhiều các services đều public ra internet, thay vì chỉ 1 gateway public. Hơn nữa các vấn đề về xác thực (authentication), phân quyền, SSL… sẽ đơn giản hơn nếu chỉ có 01 gateway tương tự như các phần mềm nguyên khối. Ngoài ra, khi hệ backend mở rộng, client cũng dễ nâng cấp hơn vì chỉ cần truy cập đến các route của API Gateway thay vì trỏ đến các services mới.
Hiện nay, ASP.NET Core API từ 2.0 trở lên đều hỗ trợ thiết kế theo dạng Microservices và đặt biệt là thiết kế API Gateway với Ocelot hoặc Azure.
Vậy Microservices là một hướng thiết kế phần mềm phù hợp với các bài toán phức tạp, liên quan tới nhiều phân hệ phần mềm khác nhau. Việc thiết kế theo Microservices vừa giúp nâng cao khả năng mở rộng, tối giản quá trình bảo trì và vận hành. Cùng với API Gateway, hệ thống Microservices sẽ còn cải thiện được tính bảo mật và dễ dàng nâng cấp hơn nữa, mang lại một giải pháp thiết kế mới cho các doanh nghiệp.
Nguyễn Văn Điệp