Khoá học ngắn về API gateway
Envoy, Kong và OpenResty đặt cạnh nhau
Ba gateway này làm cùng hai việc: chọn một route cho mỗi request, rồi ghép đường dẫn gửi lên backend. Khoá học đưa cho cả ba đúng cùng một cấu hình, gửi đúng cùng những đường dẫn, và ghi lại chỗ ba bên trả lời khác nhau. Không so cái nào tốt hơn — chỉ đo xem chuyển từ cái này sang cái kia thì cái gì đổi.
/b$: Envoy khớp mỗi /b, Kong cũng vậy, nhưng
OpenResty khớp cả /a/b — ba ngữ nghĩa regex khác nhau trên cùng một chuỗi. Và
cùng ý định “bỏ tiền tố”, Envoy với OpenResty gửi lên backend //x/y còn Kong gửi
/x/y.
Lộ trình
Mỗi bài khoảng 12–15 phút đọc, kèm phòng thí nghiệm chạy ngay trên trình duyệt.
Cùng một bộ route, ba kết quả
Năm route dựng trên cả ba gateway, bảy đường dẫn gửi qua. Envoy không sắp lại gì, hai bên kia thì có. Kèm lab tự gõ route.
Bài 2Backend nhận được đường dẫn gì
Mười sáu tổ hợp đã curl thật, trong đó có chỗ hai gateway sinh ra hai dấu gạch chéo liền nhau. Kèm lab tự đặt cách viết lại.
Cách đo
Bốn container trên một mạng Docker: một backend nginx trả về đúng $request_uri nó
nhận được, và ba gateway cùng trỏ vào đó. Mọi con số trong khoá là một lần
curl thật qua một trong ba gateway, không có thư viện client nào ở giữa.
docker network create apilab
docker run -d --name apilab-echo --network apilab nginx:1.27-alpine
docker run -d --name apilab-envoy --network apilab envoyproxy/envoy:v1.31-latest …
docker run -d --name apilab-kong --network apilab -e KONG_DATABASE=off kong:3.9
docker run -d --name apilab-or --network apilab openresty/openresty:alpine
Phần lớn cấu hình được viết thành từng cặp hai thứ tự ngược nhau, để tách phần do gateway sắp xếp khỏi phần do thứ tự viết. Đây là cách duy nhất phát hiện ra rằng Envoy không sắp lại gì trong khi hai gateway kia đều sắp.
Hai engine JavaScript trong khoá được đối chiếu lại với chính những số liệu đó: bộ chọn route khớp 74/74 kết quả curl, bộ ghép đường dẫn khớp 16/16.