- vừa được xem lúc

API Gateway với Kong - Giải pháp toàn diện cho Microservices

0 0 3

Người đăng: Codeeasy

Theo Viblo Asia

Trong kỷ nguyên của kiến trúc microservices, việc quản lý và điều phối các dịch vụ nhỏ, độc lập trở thành một thách thức lớn. Đây là lúc API Gateway phát huy vai trò quan trọng của mình, hoạt động như một điểm truy cập duy nhất cho tất cả các yêu cầu từ bên ngoài, giúp đơn giản hóa việc tương tác với hệ thống phức tạp. Trong số các giải pháp API Gateway hiện có, Kong Gateway nổi lên như một lựa chọn mạnh mẽ, linh hoạt và được cộng đồng tin dùng.

Bài viết này sẽ đi sâu vào khái niệm API Gateway, khám phá Kong Gateway từ kiến trúc, các thành phần cốt lõi, hệ sinh thái plugin phong phú, cho đến hướng dẫn triển khai thực tế trong môi trường microservices.

1. API Gateway là gì? Tại sao hệ thống Microservices cần API Gateway?

1.1. API Gateway là gì?

API Gateway có thể được hiểu như một cổng vào duy nhất cho tất cả các yêu cầu API từ client đến các dịch vụ backend. Nó hoạt động như một lớp trừu tượng hóa, ẩn đi sự phức tạp của kiến trúc microservices bên trong và cung cấp một giao diện nhất quán cho các ứng dụng client.

API Gateway thực chất là reverse proxy được cải tiến, cung cấp nhiều tùy chỉnh và linh hoạt hơn so với reverse proxy thông thường. API Gateway hoạt động như một 'giao diện' của API nằm giữa Client và các dịch vụ API (Catalog/Ordering Service).

1.2. Tại sao Microservices cần API Gateway?

Trong kiến trúc microservices, một ứng dụng được chia thành nhiều dịch vụ nhỏ, độc lập. Điều này mang lại nhiều lợi ích như khả năng mở rộng, linh hoạt trong phát triển, nhưng cũng đặt ra những thách thức mới:

  • Quản lý nhiều endponts: Client phải biết và gọi nhiều dịch vụ khác nhau để hoàn thành một tác vụ, dẫn đến sự phức tạp trong code phía frontend.
  • Xử lý xuyên suốt (cross-cutting concerns): Các chức năng như xác thực, ủy quyền, giới hạn tốc độ, ghi log, giám sát cần được áp dụng cho nhiều dịch vụ. Nếu mỗi dịch vụ tự xử lý, sẽ dẫn đến trùng lặp code và khó quản lý.
  • Chuyển đổi giao thức/dữ liệu: Các dịch vụ có thể sử dụng các giao thức hoặc định dạng dữ liệu khác nhau, yêu cầu client phải xử lý sự khác biệt này.
  • Tái cấu trúc dịch vụ: Khi các dịch vụ backend thay đổi (thêm, xóa, sửa đổi), client cũng phải cập nhật theo, gây ra sự phụ thuộc chặt chẽ.

API Gateway giải quyết những vấn đề này bằng cách tập trung các chức năng chung và cung cấp một điểm truy cập thống nhất.

1.3. Lợi ích của việc sử dụng API Gateway

Sử dụng API Gateway mang lại nhiều lợi ích đáng kể cho hệ thống microservices:

  • Che dấu cấu trúc nội bộ: Ẩn đi cấu trúc phức tạp của các microservices khỏi client, giúp client chỉ cần tương tác với một điểm duy nhất.
  • Đơn giản hóa code client: Client không cần biết về vị trí hay cách thức giao tiếp của từng microservice, giảm gánh nặng phát triển và bảo trì cho frontend.
  • Quản lý các chức năng xuyên suốt: Tập trung các tác vụ như xác thực, ủy quyền, giới hạn tốc độ (rate limiting), ghi log, giám sát, caching, cân bằng tải tại một nơi duy nhất, giúp quản lý dễ dàng và nhất quán hơn.
  • Chuyển đổi yêu cầu/phản hồi: Có thể chuyển đổi giao thức, định dạng dữ liệu của yêu cầu và phản hồi để phù hợp với cả client và backend.
  • Tăng cường bảo mật: Thêm một lớp bảo mật ở biên, bảo vệ các dịch vụ backend khỏi các mối đe dọa trực tiếp.
  • Khả năng mở rộng và linh hoạt: Dễ dàng thêm, bớt hoặc thay đổi các dịch vụ backend mà không ảnh hưởng đến client.

1.4. Bất lợi khi sử dụng API Gateway

Bên cạnh những lợi ích, API Gateway cũng có một số hạn chế cần cân nhắc:

  • Tăng độ phức tạp: Thêm một thành phần vào kiến trúc, đòi hỏi việc quản lý và bảo trì riêng.
  • Điểm nghẽn cổ chai tiềm năng (Single Point of Failure): Nếu API Gateway gặp sự cố, toàn bộ hệ thống có thể bị ảnh hưởng. Cần có các giải pháp dự phòng và khả năng chịu lỗi cao.
  • Tăng độ trễ (Latency): Mỗi yêu cầu phải đi qua API Gateway trước khi đến dịch vụ backend, có thể làm tăng nhẹ độ trễ. Tuy nhiên, với các API Gateway hiệu suất cao như Kong, ảnh hưởng này thường không đáng kể.
  • Chi phí: Có thể tốn thêm chi phí cho hạ tầng và tài nguyên để vận hành API Gateway.

2. Kong Gateway là gì?

Kong Gateway

Kong Gateway là một API Gateway mã nguồn mở, nhẹ, hiệu suất cao và có khả năng mở rộng, được thiết kế đặc biệt cho kiến trúc microservices. Nó được xây dựng trên nền tảng Nginx và LuaJIT, cho phép xử lý một lượng lớn yêu cầu với độ trễ thấp.

2.1. Ưu điểm của Kong Gateway

  • Khả năng mở rộng dễ dàng: Kong server là stateless, cho phép dễ dàng thêm hoặc xóa các node để đáp ứng nhu cầu tải. Nó hỗ trợ nhiều loại cơ sở dữ liệu để lưu trữ cấu hình như PostgreSQL và Cassandra, phù hợp cho cả hệ thống tập trung lẫn phân tán.
  • Hiệu năng vượt trội: Kong được biết đến với khả năng xử lý hàng nghìn yêu cầu mỗi giây, là một trong những API Gateway có hiệu năng cao nhất trên thị trường.
  • Hệ sinh thái plugin phong phú: Kong cung cấp một thư viện lớn các plugin có sẵn cho nhiều chức năng khác nhau như xác thực, giới hạn tốc độ, ghi log, giám sát, chuyển đổi dữ liệu, v.v. Ngoài ra, người dùng có thể phát triển các plugin tùy chỉnh bằng Lua, Go, Python, JavaScript.
  • Miễn phí và mã nguồn mở: Kong có phiên bản cộng đồng miễn phí, phù hợp cho các dự án nhỏ và vừa, cũng như các mục đích học tập và phát triển.

2.2. Kiến trúc Kong Gateway

Kong Gateway có kiến trúc phân tán, bao gồm các thành phần chính sau:

  • Kong Nodes: Các instance của Kong Gateway, chịu trách nhiệm xử lý các yêu cầu API. Chúng là stateless và có thể được scale out dễ dàng.
  • Database: Nơi lưu trữ cấu hình của Kong (Services, Routes, Consumers, Plugins, v.v.). Kong hỗ trợ PostgreSQL và Cassandra.
  • Admin API: Một RESTful API được sử dụng để cấu hình và quản lý Kong Gateway. Đây là giao diện chính để tương tác với Kong.
  • Plugins: Các module mở rộng chức năng của Kong, được thực thi tại các giai đoạn khác nhau của vòng đời yêu cầu.

2.3. Hiểu được Traffic Flow trong Kong Gateway

Mặc định, Kong lắng nghe các yêu cầu trên cổng 8000 (HTTP) và 8443 (HTTPS). Khi một yêu cầu API từ client đến Kong Gateway, nó sẽ được xử lý theo các bước sau:

  1. Tiếp nhận yêu cầu: Kong nhận yêu cầu từ client.
  2. Định tuyến (Routing): Dựa trên các Routes đã cấu hình, Kong sẽ xác định Service tương ứng mà yêu cầu cần được chuyển tiếp đến.
  3. Thực thi Plugin: Các Plugins được cấu hình cho Route, Service hoặc toàn cục sẽ được thực thi tại các giai đoạn khác nhau (ví dụ: xác thực trước khi định tuyến, giới hạn tốc độ, ghi log sau khi xử lý).
  4. Proxy đến Upstream Service: Yêu cầu được proxy đến Upstream Service (microservice backend).
  5. Nhận phản hồi: Kong nhận phản hồi từ Upstream Service.
  6. Thực thi Plugin (phản hồi): Các Plugin liên quan đến phản hồi được thực thi (ví dụ: chuyển đổi phản hồi, ghi log).
  7. Gửi phản hồi về client: Phản hồi được gửi về cho client.

3. Các Dịch vụ trong Kong Gateway: Service, Route, Consumer, Plugin

Kong Gateway Architecture

Để hiểu cách Kong Gateway hoạt động, điều quan trọng là phải nắm vững các khái niệm về Service, Route, Consumer và Plugin.

3.1. Service

Service trong Kong đại diện cho một API hoặc microservice backend mà bạn muốn Kong quản lý. Nó là một thực thể trừu tượng hóa địa chỉ của dịch vụ backend. Thuộc tính chính của một Service là URL (hoặc host, port, path) của dịch vụ backend đó.

  • Ví dụ: Nếu bạn có một dịch vụ người dùng chạy tại http://my-user-service:3000/users, bạn sẽ tạo một Service trong Kong trỏ đến URL này.

3.2. Route

Route định nghĩa cách các yêu cầu từ client được điều hướng đến một Service cụ thể. Một Service có thể có nhiều Routes, cho phép bạn định tuyến các loại yêu cầu khác nhau đến cùng một dịch vụ backend dựa trên các tiêu chí như đường dẫn (path), host, header, phương thức HTTP, v.v.

  • Ví dụ: Bạn có thể có một Route /users và một Route /customers cùng trỏ đến Service my-user-service, nhưng xử lý các yêu cầu khác nhau.

3.3. Consumer

Consumer đại diện cho người dùng cuối hoặc ứng dụng client truy cập vào API của bạn thông qua Kong Gateway. Consumers cho phép bạn kiểm soát ai được phép truy cập vào API và áp dụng các chính sách cụ thể (ví dụ: giới hạn tốc độ, xác thực) cho từng người dùng hoặc nhóm người dùng.

  • Ví dụ: Bạn có thể tạo các Consumer cho ứng dụng di động, ứng dụng web, hoặc các đối tác khác, và áp dụng các chính sách truy cập khác nhau cho mỗi Consumer.

3.4. Plugin

Plugin là các module mở rộng chức năng của Kong Gateway. Chúng cho phép bạn thêm các tính năng như xác thực, ủy quyền, giới hạn tốc độ, ghi log, caching, chuyển đổi dữ liệu, v.v., mà không cần sửa đổi code của các dịch vụ backend. Plugin có thể được áp dụng ở nhiều cấp độ: toàn cục, cho một Service, cho một Route, hoặc cho một Consumer.

4. Các Plugin phổ biến trong Kong Gateway

Kong Gateway cung cấp một thư viện plugin rất phong phú, đáp ứng hầu hết các nhu cầu của một API Gateway hiện đại. Các plugin này được phân loại theo chức năng chính [1, 3]:

  • Authentication (Xác thực):

    • Key Auth: Xác thực client bằng API key.
    • Basic Auth: Xác thực bằng tên người dùng và mật khẩu.
    • JWT: Xác thực bằng JSON Web Tokens.
    • OAuth 2.0: Hỗ trợ xác thực và ủy quyền theo chuẩn OAuth 2.0.
    • OpenID Connect: Triển khai chức năng Relying Party (RP) cho OpenID Connect.
  • Security (Bảo mật):

    • ACL (Access Control List): Kiểm soát quyền truy cập dựa trên danh sách trắng/đen của IP hoặc Consumer.
    • CORS: Xử lý Cross-Origin Resource Sharing.
    • IP Restriction: Giới hạn truy cập dựa trên địa chỉ IP.
    • Bot Detection: Phát hiện và chặn các yêu cầu từ bot.
  • Traffic Control (Kiểm soát lưu lượng):

    • Rate Limiting: Giới hạn số lượng yêu cầu mà một client có thể gửi trong một khoảng thời gian nhất định.
    • Request Size Limiting: Giới hạn kích thước của yêu cầu.
    • Proxy Caching: Cache phản hồi từ upstream service để giảm tải và tăng tốc độ phản hồi.
    • Load Balancing: Cân bằng tải giữa nhiều instance của một dịch vụ backend (hỗ trợ DNS-based hoặc ring-balancer).
    • Circuit Breaker: Ngắt kết nối với các dịch vụ backend bị lỗi để tránh quá tải và cho phép chúng phục hồi.
  • Logging (Ghi log):

    • File Log: Ghi log yêu cầu/phản hồi vào file.
    • HTTP Log: Gửi log đến một HTTP endpoint khác.
    • TCP Log: Gửi log qua TCP.
    • Datadog, Prometheus, Splunk, ELK: Tích hợp với các hệ thống giám sát và ghi log phổ biến.
  • Transformations (Chuyển đổi):

    • Request Transformer: Chuyển đổi yêu cầu trước khi gửi đến upstream service (thêm/sửa/xóa header, body, query parameters).
    • Response Transformer: Chuyển đổi phản hồi trước khi gửi về client.
    • CORS: Thêm các header CORS vào phản hồi.
  • Analytics & Monitoring (Phân tích & Giám sát):

    • Prometheus: Cung cấp các metrics để giám sát hiệu suất của Kong.
    • Datadog: Tích hợp với Datadog để giám sát và phân tích.
  • Serverless:

    • AWS Lambda: Kích hoạt các hàm AWS Lambda từ Kong.
    • Azure Functions: Kích hoạt các hàm Azure Functions.

Ngoài ra, Kong còn có các plugin liên quan đến AI, GraphQL, Canary Release, v.v., và khả năng phát triển plugin tùy chỉnh cho phép mở rộng chức năng không giới hạn.

5. Lợi ích khi sử dụng Kong Gateway trong hệ thống Microservices

Việc tích hợp Kong Gateway vào kiến trúc microservices mang lại nhiều lợi ích chiến lược:

  • Tăng cường bảo mật: Kong cung cấp một lớp bảo mật mạnh mẽ ở biên, với các plugin xác thực, ủy quyền, giới hạn IP, phát hiện bot, giúp bảo vệ các dịch vụ backend khỏi các mối đe dọa.
  • Quản lý API tập trung: Tất cả các API được quản lý tại một nơi duy nhất, giúp dễ dàng cấu hình, giám sát và kiểm soát truy cập.
  • Khả năng mở rộng linh hoạt: Kiến trúc stateless của Kong cho phép dễ dàng mở rộng theo chiều ngang để đáp ứng lưu lượng truy cập tăng cao.
  • Giảm độ phức tạp cho dịch vụ backend: Các dịch vụ backend không cần phải lo lắng về các chức năng xuyên suốt như xác thực, giới hạn tốc độ, ghi log, vì Kong đã xử lý chúng.
  • Tăng tốc độ phát triển: Các nhà phát triển backend có thể tập trung vào logic nghiệp vụ cốt lõi mà không bị phân tâm bởi các vấn đề về API Gateway.
  • Tối ưu hóa hiệu suất: Các tính năng như caching và cân bằng tải giúp cải thiện đáng kể tốc độ phản hồi và khả năng chịu tải của hệ thống.
  • Hệ sinh thái phong phú: Với hàng trăm plugin có sẵn và khả năng phát triển plugin tùy chỉnh, Kong có thể đáp ứng hầu hết mọi yêu cầu phức tạp.

6. Hướng dẫn Setup Kong Gateway cơ bản trên Ubuntu

Phần này sẽ hướng dẫn cách cài đặt Kong Gateway với PostgreSQL làm cơ sở dữ liệu trên hệ điều hành Ubuntu. (Lưu ý: Hướng dẫn này dựa trên các tài liệu chính thức và có thể cần điều chỉnh tùy theo phiên bản Kong và môi trường cụ thể của bạn).

6.1. Yêu cầu phần cứng

Kong Gateway có thể chạy trên nhiều cấu hình phần cứng khác nhau tùy thuộc vào quy mô và lưu lượng truy cập dự kiến:

Size Cấu hình phần cứng Số config Độ trễ Thông lượng Dùng cho
Small CPU 1-2core, RAM 2-4GB < 100 < 100ms < 500 RPS Môi trường Development
Medium CPU 2-4core, RAM 4-8GB < 1000 < 20ms < 2500 RPS Production clusters
Large CPU 8-16core, RAM 16-32GB < 10000 < 10ms < 10000 RPS Mission-critical clusters

6.2. Cài đặt PostgreSQL trên Ubuntu

Kong Gateway yêu cầu một cơ sở dữ liệu để lưu trữ cấu hình. PostgreSQL là lựa chọn phổ biến và được khuyến nghị.

# Cập nhật danh sách gói và cài đặt PostgreSQL
sudo apt update
sudo apt install -y postgresql postgresql-contrib # Khởi động và kích hoạt PostgreSQL
sudo systemctl start postgresql
sudo systemctl enable postgresql # Tạo người dùng và cơ sở dữ liệu cho Kong
sudo -u postgres psql -c "CREATE USER kong WITH PASSWORD 'your_kong_password';"
sudo -u postgres psql -c "CREATE DATABASE kong OWNER kong;"

Lưu ý quan trọng: Thay thế your_kong_password bằng mật khẩu mạnh của bạn. Đối với môi trường production, cần cấu hình pg_hba.conf chặt chẽ hơn để đảm bảo bảo mật.

6.3. Cài đặt Kong Gateway trên Ubuntu

Sau khi cài đặt PostgreSQL, bạn có thể tiến hành cài đặt Kong Gateway.

# Thêm kho lưu trữ Kong APT
curl -fsSL https://konghq.com/install-deb | sudo tee /etc/apt/sources.list.d/kong.list
sudo apt update # Cài đặt Kong Gateway
sudo apt install -y kong-gateway # Cấu hình Kong để kết nối với PostgreSQL
sudo cp /etc/kong/kong.conf.default /etc/kong/kong.conf
sudo nano /etc/kong/kong.conf # Trong file kong.conf, tìm và chỉnh sửa các dòng sau:
database = postgres
pg_host = 127.0.0.1
pg_port = 5432
pg_user = kong
pg_password = your_kong_password
pg_database = kong # Chạy migration để khởi tạo schema database cho Kong
kong migrations bootstrap -c /etc/kong/kong.conf # Khởi động Kong Gateway
sudo kong start -c /etc/kong/kong.conf

Lưu ý:

  • Thay thế your_kong_password bằng mật khẩu bạn đã đặt cho người dùng kong trong PostgreSQL.
  • proxy_listen là cổng mà Kong lắng nghe các yêu cầu từ client (mặc định 8000/8443). admin_listen là cổng cho Admin API (mặc định 8001/8444).

6.4. Kiểm tra cài đặt

Sau khi cài đặt, bạn có thể kiểm tra trạng thái của Kong Gateway:

curl -i http://localhost:8001/

Nếu Kong hoạt động đúng, bạn sẽ nhận được phản hồi JSON từ Admin API, bao gồm thông tin về phiên bản Kong và các plugin đã cài đặt.

7. Luồng xử lý API qua Kong Gateway và vai trò của Plugin

Khi một yêu cầu API đi qua Kong Gateway, nó sẽ trải qua một chuỗi các giai đoạn xử lý, và các plugin sẽ được thực thi tại các giai đoạn cụ thể này. Thứ tự thực thi của các plugin được xác định bởi thuộc tính priority của chúng (plugin có priority cao hơn sẽ được thực thi trước) và giai đoạn (phase) mà chúng được cấu hình để chạy.

Các giai đoạn chính trong vòng đời yêu cầu của Kong Gateway bao gồm:

  1. init_worker: Được thực thi khi mỗi tiến trình worker của Nginx khởi động. Thường dùng cho các tác vụ khởi tạo toàn cục.
  2. rewrite: Được thực thi khi yêu cầu được tiếp nhận từ client. Ở giai đoạn này, Service và Consumer chưa được xác định. Các plugin cấu hình toàn cục sẽ chạy ở đây. Ví dụ: plugin chuyển đổi yêu cầu cơ bản.
  3. certificate: Được thực thi trong giai đoạn bắt tay SSL/TLS để xử lý chứng chỉ.
  4. access: Được thực thi cho mỗi yêu cầu từ client và trước khi yêu cầu được proxy đến upstream service. Đây là giai đoạn quan trọng nhất cho các plugin bảo mật và kiểm soát lưu lượng. Ở giai đoạn này, Kong đã xác định được Service và Consumer (nếu có).
  5. balancer: Giai đoạn cân bằng tải, nơi Kong chọn một upstream target để gửi yêu cầu đến.
  6. preread: Được thực thi trước khi đọc toàn bộ body của yêu cầu. Hữu ích cho các plugin cần kiểm tra header hoặc một phần nhỏ của body.
  7. header_filter: Được thực thi khi tất cả các header phản hồi đã được nhận từ upstream service.
  8. body_filter: Được thực thi cho mỗi chunk của body phản hồi nhận được từ upstream service. Hữu ích cho việc chuyển đổi nội dung phản hồi.
  9. log: Được thực thi khi byte phản hồi cuối cùng đã được gửi đến client. Thường dùng cho các plugin ghi log và giám sát.

Ví dụ về luồng xử lý với các Plugin cụ thể:

Giả sử một yêu cầu đến Kong Gateway và các plugin sau được kích hoạt:

  • JWT (JSON Web Token) Plugin: Được cấu hình ở giai đoạn access.
  • Rate Limiting Plugin: Được cấu hình ở giai đoạn access.
  • CORS (Cross-Origin Resource Sharing) Plugin: Được cấu hình ở giai đoạn header_filterrewrite.
  • IP Restriction Plugin: Được cấu hình ở giai đoạn access.

Luồng xử lý sẽ diễn ra như sau:

  1. Client gửi yêu cầu đến Kong Gateway.
  2. Giai đoạn rewrite:
    • CORS Plugin (phần rewrite): Kong kiểm tra Origin header của yêu cầu. Nếu là preflight request (OPTIONS method), Kong sẽ xử lý và trả về phản hồi CORS cần thiết mà không cần proxy đến backend. Nếu không, nó sẽ tiếp tục xử lý.
  3. Giai đoạn access:
    • IP Restriction Plugin: Kong kiểm tra địa chỉ IP của client. Nếu IP không nằm trong danh sách cho phép (hoặc nằm trong danh sách chặn), yêu cầu sẽ bị từ chối ngay lập tức với lỗi 403 Forbidden.
    • JWT Plugin: Kong kiểm tra Authorization header của yêu cầu để tìm JWT. Nó sẽ xác thực chữ ký của JWT, kiểm tra thời hạn hiệu lực, và các claim khác (ví dụ: iss, aud). Nếu JWT không hợp lệ hoặc thiếu, yêu cầu sẽ bị từ chối với lỗi 401 Unauthorized hoặc 403 Forbidden. Nếu hợp lệ, thông tin từ JWT (ví dụ: sub - subject) có thể được sử dụng để xác định Consumer và chuyển tiếp đến các plugin khác.
    • Rate Limiting Plugin: Sau khi xác định được Consumer (hoặc dựa trên IP/header), Kong sẽ kiểm tra xem Consumer đó có vượt quá giới hạn số lượng yêu cầu trong một khoảng thời gian nhất định hay không. Nếu vượt quá, yêu cầu sẽ bị từ chối với lỗi 429 Too Many Requests.
  4. Giai đoạn balancer: Nếu tất cả các plugin ở giai đoạn access đều vượt qua, Kong sẽ chọn một upstream target từ Service đã được định tuyến và chuẩn bị proxy yêu cầu.
  5. Kong proxy yêu cầu đến Backend Service.
  6. Backend Service xử lý yêu cầu và gửi phản hồi về Kong Gateway.
  7. Giai đoạn header_filter:
    • CORS Plugin (phần header_filter): Kong thêm các header CORS cần thiết (ví dụ: Access-Control-Allow-Origin, Access-Control-Allow-Methods, Access-Control-Allow-Headers) vào phản hồi trước khi gửi về client, đảm bảo rằng trình duyệt của client có thể xử lý phản hồi từ các nguồn gốc khác nhau.
  8. Giai đoạn log:
    • Các plugin ghi log (ví dụ: File Log, HTTP Log) sẽ ghi lại thông tin chi tiết về yêu cầu và phản hồi, bao gồm cả kết quả xử lý của các plugin khác, để phục vụ cho việc giám sát và phân tích sau này.
  9. Kong gửi phản hồi cuối cùng về Client.

Luồng xử lý này đảm bảo rằng các chính sách bảo mật và kiểm soát lưu lượng được áp dụng một cách nhất quán và hiệu quả trước khi yêu cầu đến được dịch vụ backend, giúp bảo vệ và tối ưu hóa hệ thống microservices.

8. So sánh Kong Gateway với các API Gateway phổ biến khác

Thị trường API Gateway có nhiều lựa chọn khác nhau, từ mã nguồn mở đến các giải pháp thương mại và dịch vụ đám mây. Dưới đây là bảng so sánh Kong Gateway với một số đối thủ cạnh tranh nổi bật:

Tiêu chí Kong Gateway Apigee (Google Cloud) AWS API Gateway Nginx (Reverse Proxy) Apache APISIX Tyk KrakenD
Loại Mã nguồn mở (Community Edition), Thương mại (Enterprise) Thương mại, Dịch vụ đám mây Dịch vụ đám mây Mã nguồn mở (Core), Thương mại (Plus) Mã nguồn mở Mã nguồn mở (Community Edition), Thương mại (Enterprise) Mã nguồn mở
Nền tảng Nginx + LuaJIT Java AWS Infrastructure C Nginx + LuaJIT Go Go
Cơ sở dữ liệu PostgreSQL, Cassandra PostgreSQL, Cassandra, NoSQL (internal) Không yêu cầu (serverless) Không yêu cầu (cấu hình file) etcd MongoDB, Redis, PostgreSQL, MySQL Không yêu cầu (cấu hình file)
Khả năng mở rộng Rất tốt (stateless nodes) Rất tốt (managed by Google) Rất tốt (serverless, managed by AWS) Tốt (cần cấu hình thủ công) Rất tốt Tốt Tốt
Hệ sinh thái Plugin Rất phong phú (có sẵn & tùy chỉnh) Phong phú (chính sách tích hợp) Tích hợp sâu với AWS services Hạn chế (cần cấu hình Lua/Nginx) Rất phong phú (có sẵn & tùy chỉnh) Phong phú (có sẵn & tùy chỉnh) Hạn chế (chủ yếu là middleware)
Quản lý Admin API, Kong Manager (Enterprise), Konga (Community) Console web, API Console web, API, CLI Cấu hình file, API (Nginx Plus) Admin API, Dashboard Dashboard, API Cấu hình file
Mô hình triển khai On-premise, Cloud, Kubernetes Cloud-native Cloud-native On-premise, Cloud, Kubernetes On-premise, Cloud, Kubernetes On-premise, Cloud, Kubernetes On-premise, Cloud, Kubernetes
Chi phí Miễn phí (Community), trả phí (Enterprise) Trả phí (dựa trên mức sử dụng) Trả phí (dựa trên mức sử dụng) Miễn phí (Core), trả phí (Plus) Miễn phí Miễn phí (Community), trả phí (Enterprise) Miễn phí
Độ phức tạp cài đặt Trung bình Thấp (managed service) Thấp (managed service) Trung bình Trung bình Trung bình Thấp
Phù hợp với Microservices, Hybrid/Multi-cloud Doanh nghiệp lớn, tích hợp Google Cloud Hệ sinh thái AWS, Serverless Reverse proxy đơn giản, tải cao Microservices, hiệu suất cao Microservices, API Management Hiệu suất cao, API Composition

Phân tích chi tiết hơn:

  • Kong Gateway: Là lựa chọn mạnh mẽ cho các hệ thống microservices, đặc biệt khi cần sự linh hoạt trong triển khai (on-premise, cloud, hybrid) và khả năng tùy biến cao thông qua plugin. Phiên bản Community miễn phí là điểm cộng lớn cho các dự án nhỏ và vừa. Hiệu năng cao và cộng đồng lớn là những ưu điểm nổi bật.

  • Apigee (Google Cloud): Là giải pháp API Management toàn diện, mạnh mẽ, phù hợp cho các doanh nghiệp lớn với nhu cầu quản lý API phức tạp, phân tích chuyên sâu và tích hợp sâu với hệ sinh thái Google Cloud. Tuy nhiên, chi phí cao và khả năng vendor lock-in là những điểm cần cân nhắc.

  • AWS API Gateway: Lý tưởng cho các dự án chạy hoàn toàn trên AWS, đặc biệt là kiến trúc serverless (Lambda). Nó tích hợp rất chặt chẽ với các dịch vụ AWS khác, mang lại khả năng mở rộng và quản lý dễ dàng. Tuy nhiên, nó kém linh hoạt hơn khi triển khai ngoài môi trường AWS.

  • Nginx (Reverse Proxy): Nginx bản thân là một reverse proxy và web server hiệu suất cao. Mặc dù có thể được cấu hình để hoạt động như một API Gateway cơ bản (routing, load balancing, SSL termination), nhưng nó thiếu các tính năng quản lý API nâng cao như xác thực, giới hạn tốc độ, quản lý consumer, và hệ sinh thái plugin phong phú như Kong. Để có các tính năng này, thường phải kết hợp với các module Lua hoặc Nginx Plus.

  • Apache APISIX: Tương tự Kong, APISIX cũng được xây dựng trên Nginx + LuaJIT, mang lại hiệu suất cao và khả năng mở rộng tốt. Nó cũng có hệ sinh thái plugin phong phú và được đánh giá là một đối thủ cạnh tranh trực tiếp của Kong, đặc biệt trong các trường hợp cần hiệu suất cực cao và quản lý cấu hình phân tán (sử dụng etcd).

  • Tyk: Một API Gateway mã nguồn mở khác được viết bằng Go. Tyk cung cấp cả phiên bản Community và Enterprise, với các tính năng quản lý API toàn diện, bao gồm cổng developer, phân tích và quản lý phiên bản API. Nó có thể là lựa chọn tốt cho những ai ưa thích Go và cần một giải pháp API Management đầy đủ.

  • KrakenD: Một API Gateway hiệu suất cao được viết bằng Go, tập trung vào việc tổng hợp API (API Composition) và chuyển đổi dữ liệu. KrakenD rất nhanh và nhẹ, phù hợp cho các trường hợp sử dụng cần hiệu suất tối đa và ít yêu cầu các tính năng quản lý API phức tạp khác.

Lựa chọn API Gateway phù hợp phụ thuộc vào nhiều yếu tố như quy mô dự án, yêu cầu về tính năng, ngân sách, môi trường triển khai và kinh nghiệm của đội ngũ phát triển.

9. Setup Kong với bài toán Microservice: Ví dụ thực tế

Để minh họa cách Kong hoạt động với microservices, chúng ta sẽ cấu hình một Service và một Route đơn giản để proxy yêu cầu đến một dịch vụ backend mẫu.

Giả sử bạn có một dịch vụ backend đơn giản trả về HTML tại https://httpbin.org/html.

9.1. Thêm một Service

Bạn sẽ tạo một Service trong Kong để đại diện cho dịch vụ httpbin.org/html.

curl -i -X POST http://localhost:8001/services \ --data name=get_simple_html \ --data url=\'https://httpbin.org/html\'

Phản hồi thành công sẽ có status HTTP/1.1 201 Created.

9.2. Thêm một Route

Tiếp theo, bạn sẽ thêm một Route cho Service get_simple_html để định tuyến các yêu cầu đến nó. Chúng ta sẽ sử dụng đường dẫn /html.

curl -i -X POST http://localhost:8001/services/get_simple_html/routes \ --data \'paths[]=/html\' \ --data \'name=simple_html_route\'

Phản hồi thành công sẽ có status HTTP/1.1 201 Created.

9.3. Kiểm tra hoạt động

Bây giờ, bạn có thể gửi yêu cầu đến Kong Gateway thông qua Route đã cấu hình:

curl -i -X GET http://localhost:8000/html -H "accept: text/html"

Nếu mọi thứ được cấu hình đúng, Kong sẽ proxy yêu cầu của bạn đến https://httpbin.org/html và trả về nội dung HTML từ dịch vụ đó.

10. Những điều cần cân nhắc và hơn thế nữa

10.1. Quản lý cấu hình Kong

Trong môi trường production, việc quản lý cấu hình Kong (Services, Routes, Plugins, Consumers) một cách thủ công thông qua Admin API có thể không hiệu quả. Các công cụ như decK (Declarative Configuration for Kong) cho phép bạn quản lý cấu hình Kong dưới dạng file YAML hoặc JSON, sau đó đồng bộ hóa với Kong Gateway. Điều này giúp áp dụng GitOps và CI/CD cho cấu hình API Gateway.

10.2. Kong Manager (GUI)

Kong Manager là giao diện người dùng đồ họa (GUI) cho Kong Gateway Enterprise, giúp quản lý và giám sát Kong dễ dàng hơn. Đối với phiên bản cộng đồng, bạn có thể sử dụng các công cụ GUI mã nguồn mở khác như Konga.

10.3. Tích hợp với CI/CD

Kong Gateway có thể dễ dàng tích hợp vào quy trình CI/CD của bạn. Bạn có thể tự động hóa việc triển khai và cập nhật cấu hình Kong cùng với việc triển khai các microservices, đảm bảo tính nhất quán và giảm thiểu lỗi thủ công.

10.4. Giám sát và Ghi log

Việc giám sát hiệu suất và ghi log các yêu cầu đi qua Kong Gateway là rất quan trọng. Kong cung cấp nhiều plugin để tích hợp với các hệ thống giám sát và ghi log phổ biến như Prometheus, Grafana, Datadog, ELK Stack, giúp bạn có cái nhìn sâu sắc về lưu lượng API và phát hiện sớm các vấn đề.

10.5. Phát triển Plugin tùy chỉnh

Nếu các plugin có sẵn không đáp ứng được nhu cầu cụ thể của bạn, Kong cho phép bạn phát triển các plugin tùy chỉnh bằng Lua, Go, Python hoặc JavaScript. Điều này mang lại sự linh hoạt tối đa để mở rộng chức năng của Kong Gateway.

Kết luận

API Gateway là một thành phần không thể thiếu trong kiến trúc microservices hiện đại, giúp giải quyết các thách thức về quản lý, bảo mật và hiệu suất. Kong Gateway với kiến trúc mạnh mẽ, hiệu năng cao và hệ sinh thái plugin phong phú, là một trong những lựa chọn hàng đầu để triển khai API Gateway cho hệ thống của bạn.

Việc hiểu rõ các khái niệm, thành phần và cách thức hoạt động của Kong, cùng với việc áp dụng các thực hành tốt nhất, sẽ giúp bạn xây dựng và quản lý các hệ thống microservices hiệu quả, an toàn và có khả năng mở rộng.

Xem nhiều hơn bài viết của tôi tại đây nhé: codeeasy.blog

Tags: #API-Gateway #Kong-Gateway #Microservice

Bình luận

Bài viết tương tự

- vừa được xem lúc

Create Certificates, Identifiers & Profiles App IOS

Mở đầu. Xin chào các bạn hôm này mình sẽ giới thiệu cho các bạn một cách tạo certificates, identifiers & profiles với tài khoản Apple Developer. Có tài khoản Apple Developer. Ai chưa có thì không cần đọc tiếp nha :.

0 0 51

- vừa được xem lúc

Chương 5 Object oriented programming

Chương 5 Object oriented programming. Tôi lần đầu tiên được giới thiệu về lập trình hướng đối tượng ở trường cao đẳng nơi tôi đã có một giới thiệu tóm tắc về c++.

0 0 38

- vừa được xem lúc

Hướng dẫn tạo link tracking nguồn cài đặt cho mobile app (xác định nguồn cài đặt cho mobile app)

Giới thiệu. Bạn đang chạy quá nhiều campaign cho ứng dụng mobile từ các mạng xã hội: facebook, twitter, ... các chiến dịch offline cũng như các chiến dịch online của bên thứ 3. Bạn không thể xác định được nguồn nào mang cho mình lượng install cao nhất. Vì nếu dùng shortlink thì chỉ đo được lượt clic

0 0 49

- vừa được xem lúc

SwiftUi: Bắt đầu từ những điều căn bản nhất. Phần 1

Trong bài này, bạn sẽ được tìm hiểu về việc tạo ra giao diện bằng việc khai báo và tuỳ chỉnh views, cách sử dụng các biến trạng thái để cập nhật giao diện thay vì dùng code. Tập sử dụng tính năng new preview và live preview, những trải nghiệm thú vị khi làm việc cùng với code và WYSIWYG layout.

0 0 77

- vừa được xem lúc

Những điều khác nhau cần biết giữa thiết kế ứng dụng Android và ứng dung iOS

Để tạo ra ứng dụng có trải nghiệm tốt nhất, tương thích với dòng thiết bị, bạn nên ghi nhớ sự khác biệt giữa 2 nền tảng iOS và Android. Các ứng dụng này không chỉ khác nhau ở phần trông như thế nào, chúng cũng khác nhau về cấu trúc và luồng ứng dụng.

0 0 40

- vừa được xem lúc

Những khó khăn khi làm dự án maintain ( dưới góc nhìn của một React Native Developer)

Đi làm một vài năm ở công ty outsource, minh thấy hầu như các anh em đều khá e ngại với các dự án maintain, nhất là thuộc hàng code "siêu thối", spec thuộc loại "siêu to khổng lồ ",... Và mình cũng thế, mình cũng đang "theo đuổi" một chú em với "chức năng siêu to kh

0 0 327