Gogoduk nâng cấp hiệu năng API như thế nào với Redis 8.8?
Case study thực tế về việc Gogoduk ứng dụng Redis 8.8 để tối ưu hóa API latency và đơn giản hóa kiến trúc: thay thế Lua Script rate limiter bằng INCREX và tối ưu cache bằng Hash Subkey Notifications.
Để phục vụ hàng triệu request bản đồ, định vị địa lý (Geocoding) và gợi ý địa chỉ (Autocomplete) tại Việt Nam với tốc độ phản hồi tối ưu dưới 15ms, hạ tầng lưu trữ và bộ đệm của Gogoduk luôn là ưu tiên cải tiến hàng đầu.
Với việc công bố chính thức phiên bản Redis 8.8 vào đầu tháng 6 năm 2026, đội ngũ kỹ sư của Gogoduk đã nhanh chóng nghiên cứu, thử nghiệm và tích hợp bản cập nhật này vào môi trường chạy thử nghiệm (staging) để chuẩn bị cho kế hoạch nâng cấp hệ thống trên production.
Bài viết này chia sẻ chi tiết case study thực tế về việc Gogoduk ứng dụng các tính năng đột phá của Redis 8.8 để tăng tốc độ phản hồi của API và tối giản hóa kiến trúc phân tán.
1. Loại bỏ Lua Script, tối giản hóa Go API Gateway
Bài toán Rate Limiting cũ tại Gogoduk
Trước phiên bản 8.8, để giới hạn tần suất gọi API của khách hàng một cách an toàn và tránh rò rỉ bộ nhớ (memory leaks) khi gặp sự cố mạng đột ngột, Gogoduk sử dụng một đoạn mã Lua Script để thực thi nguyên tử (Atomic) hai lệnh INCR và EXPIRE trên Redis:
Mặc dù giải pháp này hoạt động ổn định, nó mang lại một số phiền toái kỹ thuật:
- Mã nguồn middleware của Go phải tự quản lý việc đăng ký, tải và lưu trữ mã băm SHA của script Lua.
- Redis server phải duy trì tài nguyên chạy máy ảo Lua VM, gây ảnh hưởng nhẹ đến CPU hiệu năng cao khi lượng truy cập tăng vọt.
Giải pháp nâng cấp với lệnh INCREX bản địa
Redis 8.8 giải quyết triệt để bài toán này bằng cách cung cấp lệnh INCREX nguyên tử tích hợp sẵn trong nhân:
Chúng tôi đã viết lại Go middleware của mình để gọi câu lệnh trực tiếp:
Kết quả đo lường:
- Mã nguồn Go gọn hơn 50%: Loại bỏ hoàn toàn phần khai báo biến script Lua và logic quản lý lỗi biên dịch script.
- Tiết kiệm CPU cho Redis Cluster: CPU sử dụng cho việc xử lý giới hạn tần suất giảm khoảng 12% ở mức tải cực đại nhờ loại bỏ máy ảo Lua VM.
- Giảm thiểu trễ mạng: Ứng dụng chỉ gọi đúng 1 câu lệnh trực tiếp tới Redis để có kết quả phản hồi cuối cùng.
2. Quản lý API Key Caching mịn hơn với Hash Subkey Notifications
Một trong những tác vụ tốn tài nguyên nhất của API Gateway là kiểm tra tính hợp lệ của API Key gửi kèm request (Keystore). Gogoduk lưu trữ trạng thái API Key của từng người dùng dưới dạng một bảng băm (Hash):
Hạn chế trước đây
Cơ chế Keyspace Notifications cũ của Redis chỉ thông báo khi toàn bộ key user:100 bị thay đổi hoặc hết hạn. Khi một API key cụ thể bị khóa hoặc thay đổi trạng thái, ứng dụng không có cách nào tối ưu để biết để xóa cache ở bộ nhớ cục bộ (Application RAM cache) ngoài việc xóa toàn bộ session của người dùng đó hoặc polling liên tục database.
Giải pháp của Redis 8.8
Tính năng Subkey Notifications mới của Redis 8.8 cho phép đăng ký lắng nghe sự kiện thay đổi hoặc hết hạn của từng field (subkey) cụ thể bên trong một Hash.
Gogoduk đã ứng dụng cơ chế này để lắng nghe trực tiếp thay đổi trạng thái của từng API Key riêng lẻ:
Khi quản trị viên vô hiệu hóa API key key_live_abc, Redis phát ra sự kiện và ứng dụng Go lập tức invalidate chính xác key đó khỏi bộ nhớ đệm RAM của instance API Gateway hiện tại. Các API key khác của cùng người dùng vẫn được giữ nguyên trong cache, giúp hệ thống hoạt động vô cùng mượt mà mà không lo bị phình bộ nhớ hay cache trễ (stale cache).
3. Tối ưu hóa Cache bản đồ ranh giới hành chính bằng Array
Dữ liệu bản đồ ranh giới hành chính Việt Nam chứa các đa giác (Polygons) tọa độ rất phức tạp. Khi thực hiện định vị ngược (Reverse Geocoding), hệ thống cần truy xuất mảng tọa độ thô để tính toán khoảng cách và xác định tỉnh/huyện nhanh chóng.
Trước đây, việc lưu các mảng số tọa độ lớn trong Redis sử dụng List cho thấy hiệu năng truy xuất theo chỉ số (index-access) rất kém do List thực chất là danh sách liên kết kép ($O(N)$).
Cấu trúc Array của antirez giúp ích gì?
Cấu trúc Array mới của Redis 8.8 (thiết kế bởi antirez) cung cấp khả năng truy xuất index đạt tốc độ không đổi $O(1)$ và hỗ trợ mảng thưa thớt (sparse arrays) cực kỳ tốt bằng cách chia dữ liệu thành từng cụm 4,096 slots.
Chúng tôi áp dụng cấu trúc này để lưu trữ cache các điểm ranh giới địa lý. Kết hợp với lệnh xoay vòng mảng ARRING và lệnh tổng hợp tính toán khoảng cách trên server-side AROP, Gogoduk đã cắt giảm được 30% lượng RAM cần thiết để cache bản đồ ranh giới và tăng tốc độ xử lý các truy vấn không gian phức tạp.
4. Kết luận
Việc nhanh chóng thử nghiệm và đón đầu các công nghệ mới như Redis 8.8 là minh chứng cho cam kết của Gogoduk trong việc mang lại dịch vụ Bản đồ Việt Nam hiệu năng cao nhất cho các nhà phát triển.
Bằng cách tối giản hóa Gateway, loại bỏ Lua Script truyền thống và ứng dụng các cấu trúc mảng mới, Gogoduk tiếp tục củng cố khả năng cung cấp API có độ trễ siêu thấp dưới 15ms ngay cả trong các chu kỳ cao điểm mua sắm hoặc điều phối đơn hàng lớn.
Nếu bạn đang tìm kiếm giải pháp tích hợp bản đồ Việt Nam, tra cứu địa chỉ tự động chuẩn xác và có tốc độ tối ưu, hãy thử ngay Gogoduk Map API.
Muốn dùng GoGoDuk?
Miễn phí trọn đời — 100 request/ngày mỗi tài khoản, không cần thẻ tín dụng. Giới hạn cao hơn theo yêu cầu.
Đăng ký →