Tìm hiểu và xây dựng microservices bằng API Gateway
Khác với mô hình nguyên khối (Monolithic Architecture) chỉ bao gồm một đầu vào và một đầu ra, mô hình Microservices là tập hợp của nhiều khối nhỏ với các chức năng khác nhau, mỗi khối có đầu vào và đầu ra riêng biệt. Để có thể vận hành, các khối đó phải được liên kết chặt chẽ với nhau nhằm tạo ra sự thống nhất, từ đó tác động trực tiếp đến ứng dụng cũng như giao tiếp ứng dụng của khách hàng.
Một trong các phương pháp tốt nhất để xây dựng microservices là sử dụng API Gateway. Cùng Bizfly Cloud tìm hiểu chi tiết hơn về cách triển khai này trong bài viết dưới đây.
Điểm khác biệt giữa mô hình nguyên khối và mô hình Microservices
Đối với mô hình nguyên khối, client sẽ tạo một request REST() cho ứng dụng để truy xuất dữ liệu. Bộ cân bằng tải định tuyến sẽ yêu cầu đến một trong N trường hợp ứng dụng giống hệt như nhau. Tiếp đó, ứng dụng sẽ thực hiện truy vấn các bảng cơ sở dữ liệu khác nhau và trả về dữ liệu cho client.
Trong khi đó, đối với mô hình Microservices, dữ liệu về chi tiết sản phẩm hiển thị trên màn hình sẽ được sở hữu bởi nhiều microservices.
Kiến trúc Direct Client‑to‑Microservice communication
Thuật ngữ Direct Client‑to‑Microservice communication có thể được hiểu là client có thể gửi request trực tiếp tới một số microservices nhất định. Cụ thể, mỗi microservice sẽ có một endpoint công khai, hoặc đôi khi sẽ có cả một cổng TCP khác cho mỗi microservice.
Ví dụ: Mỗi microservice có một điểm cuối công khai là api url (https://serviceName.api.company.name). Trong môi trường dựa trên cluster, URL trên sẽ ánh xạ tới bộ cân bằng tải trong cụm để phân phối các request trên các microservice. Bạn cũng có thể sử dụng Application Delivery Controller (ADC) giữa các microservices và mạng Internet. Lớp này đóng vai trò như một tầng trong suốt (transparent tier) thực hiện nhiệm vụ cân bằng tải và bảo vệ các dịch vụ thông qua SSL termination, giúp tăng khả năng chịu tải của máy chủ.
Direct client-to-microservice communication có thể phù hợp đối với các ứng dụng microservice nhỏ, đặc biệt nếu client là ứng dụng web server-side tương tự như ASP.NET MVC. Tuy nhiên, khi xây dựng các ứng dụng microservice lớn và phức tạp (ví dụ khi cần xử lý hàng chục loại microservices) và đặc biệt khi client app là ứng dụng remote di động hoặc web SPA, thì cách tiếp cận này sẽ gặp một số vấn đề phát sinh.
Ngoài ra, việc xây dựng microservices bằng Direct Client‑to‑Microservice communication có thể gây khó khăn cho việc tái cấu trúc các microservices. Trong quá trình xây dựng, bạn có thể sẽ muốn thay đổi các phân vùng hệ thống cho các dịch vụ. Ví dụ như hợp nhất hai dịch vụ hoặc tách một dịch vụ thành hai hoặc nhiều dịch vụ. Tuy nhiên, nếu áp dụng Direct Client‑to‑Microservice communication, việc thực hiện tái cấu trúc có thể trở nên phức tạp và khó thực hiện.
Do những vấn đề trên nên hiếm khi có ý nghĩa cho client nói chuyện trực tiếp với microservice.
Sử dụng API Gateway
Một phương pháp xây dựng microservices tối ưu hơn so với Direct Client‑to‑Microservice communication đó là sử dụng API Gateway. Về cơ bản đây vẫn là giao tiếp giữa client và microservice nhưng sẽ không thực hiện trực tiếp mà thông qua một Gateway. Do đó, API Gateway sẽ nằm giữa client và microservices, hoạt động như một reverse proxy, định tuyến các requests từ client đến các dịch vụ. Đồng thời cung cấp các tính năng khác như xác thực, SSL termination, cache,...
>> Tìm hiểu thêm: API gateway là gì? Khi nào cần sử dụng API gateway?
Các tính năng của API Gateway
Reverse proxy hoặc định tuyến gateway
API Gateway cung cấp reverse proxy để định tuyến các requests đến các endpoint của microservices nội bộ. Gateway này sẽ cung cấp một endpoint hoặc URL cho client, sau đó ánh xạ các requests này tới một nhóm microservices nội bộ. Tính năng này giúp tách biệt client khỏi microservices, đồng thời hỗ trợ API nguyên khối bằng cách đặt API Gateway ở giữa API nguyên khối và client. Theo đó, người dùng có thể bổ sung API mới làm microservice mới trong khi vẫn sử dụng phiên bản cũ của API nguyên khối cho đến khi nó được chia thành nhiều microservices trong tương lai.
Tổng hợp requests
Bạn có thể tổng hợp nhiều requests (thường là HTTP requests) để nhắm nhiều microservices nội bộ vào một client request. Cách tiếp cận này rất thuận tiện khi màn hình của client cần thông tin từ một số microservices nhất định. Cụ thể, client sẽ gửi một request duy nhất đến API Gateway để gửi một số requests đến các microservices nội bộ, sau đó tổng hợp kết quả và trả lại cho client. Mục đích của việc này là để giảm thiểu giao tiếp giữa client và backend API, đặc biệt là đối với các ứng dụng remote bên ngoài datacenter. Đối với các ứng dụng web thông thường thực hiện các requests trong môi trường máy chủ, cách tiếp cận này không quá cần thiết do có độ trễ nhỏ hơn nhiều so với các remote client.
Cross-cutting concerns hoặc giảm tải Gateway
Tùy theo từng dịch vụ API Gateway, người dùng có thể giảm tải từng microservice đến Gateway, giúp đơn giản hóa việc triển khai từng microservice bằng cách hợp nhất các cross-cutting concerns vào một tầng chung. Cách tiếp cận này rất phù hợp cho các tính năng chuyên dụng, có tính phức tạp cao và khó có thể triển khai đúng cách trong các microservices nội bộ, chẳng hạn như: xác thực và ủy quyền, tìm kiếm dịch vụ, response caching, rate limiting và throttling, cân bằng tải, danh sách IP cho phép,...
Ưu và nhược điểm khi xây dựng microservices bằng API Gateway
Ưu điểm
- Đóng gói cấu trúc bên trong ứng dụng: Thay vì phải gọi từng dịch vụ cụ thể, client chỉ cần giao tiếp với Gateway.
- Không thực hiện lệnh gọi một dịch vụ cụ thể: Phía client sẽ chỉ tương tác với API Gateway.
- Đơn giản hóa code từ phía client.
Nhược điểm
- Chỉ khi API được cập nhật thì các dịch vụ ứng dụng web mới được hiển thị.
- Việc cập nhật API Gateway cần diễn ra "nhanh, gọn, nhẹ" nhất có thể. Nếu không, các nhà phát triển sẽ phải đợi khá lâu trong lúc hệ thống cập nhật API.
Một số lưu ý khi xây dựng microservices bằng API Gateway
Khi xây dựng microservices bằng API Gateway, bạn cần lưu ý một số vấn đề dưới đây:
- Hiệu suất và khả năng mở rộng: Xây dựng API Gateway trên nền tảng hỗ trợ I/O không đồng bộ, không chặn.
- Ứng dụng mô hình lập trình phản ứng: Thực hiện viết mã API Gateway theo dạng khai báo thông qua phương pháp phản ứng.
- Yêu cầu dịch vụ: Sử dụng cơ chế dựa trên tin nhắn, không đồng bộ hoặc cơ chế đồng bộ (HTTP, Thrift,…)
- Khám phá dịch vụ: API Gateway cần định vị được vị trí (địa chỉ IP và cổng) của từng microservice để có thể giao tiếp.
- Xử lý các lỗi một phần: API Gateway có thể trả về dữ liệu được lưu trữ trong bộ nhớ cache nếu có sẵn, từ đó hỗ trợ ngăn chặn các lỗi một phần.
Dịch vụ API Gateway của Bizfly Cloud nhằm giúp các developer có thể dễ dàng khởi tạo, duy trì và giám sát các API ở mọi quy mô phát triển. Bizfly API Gateway có khả năng xử lý hàng trăm nghìn lệnh gọi API cùng lúc, đồng thời quản lý lưu lượng, xác thực và kiểm soát việc truy cập, điều chỉnh và quản lý các phiên bản API,...
Cơ chế cân bằng tải linh hoạt, giúp phân bổ đồng đều lượng truy cập vào các server của khách hàng. Với giao diện dashboard thông minh của Bizfly API Gateway, người dùng có thể dễ dàng tạo, tích hợp với bất cứ dịch vụ nào thông qua public HTTP API. Chính sách thanh toán linh hoạt, người dùng chỉ cần chi trả cho các lệnh gọi API và lưu lượng dữ liệu truyền đi (datatransfer), tối ưu hóa chi phí trong mọi quy mô sử dụng.
Cùng đón đọc thêm nhiều bài viết công nghệ từ Bizfly Cloud để luôn được cập nhật về các xu hướng công nghệ đám mây mới nhất!
Bizfly Cloud là nhà cung cấp dịch vụ điện toán đám mây với chi phí thấp, được vận hành bởi VCCorp.
Bizfly Cloud là một trong 4 doanh nghiệp nòng cốt trong "Chiến dịch thúc đẩy chuyển đổi số bằng công nghệ điện toán đám mây Việt Nam" của Bộ TT&TT; đáp ứng đầy đủ toàn bộ tiêu chí, chỉ tiêu kỹ thuật của nền tảng điện toán đám mây phục vụ Chính phủ điện tử/chính quyền điện tử.
Độc giả quan tâm đến các giải pháp của Bizfly Cloud có thể truy cập tại đây.
DÙNG THỬ MIỄN PHÍ và NHẬN ƯU ĐÃI 3 THÁNG tại: Manage.bizflycloud