Từ Việt Nam tới Singapore, Hong Kong, Virginia: một request có database tốn bao nhiêu mạng?
Hoàng Xuân · Embra Engineering · Đo 00:17–00:25 ngày 22/10/2026 · Một máy, một nhà mạng, ngoài giờ cao điểm. Đọc giới hạn trước khi dùng số.
Từ máy đo tại Việt Nam, một vòng mạng tới Singapore mất khoảng 66 ms, gấp đôi tới TP.HCM (33 ms). Tới Virginia, region mặc định của function trên Vercel, mất 282 ms. Chênh lệch này nhỏ khi trang chỉ tải một lần. Nó lớn dần khi app và database nằm ở hai nơi, vì mỗi truy vấn chạy tuần tự trả thêm một vòng.
Trong bài này
Đo cái gì, đo thế nào
Mỗi vòng, công cụ mở một kết nối TCP rồi bắt tay TLS tới từng đích, lần lượt, rồi nghỉ 1 giây. Tổng cộng 120 vòng. Tên miền được phân giải trước khi bấm giờ. Thời gian TCP connect xấp xỉ một vòng mạng (RTT).
Đích là endpoint API hoặc object storage theo region của nhà cung cấp: Bizfly Cloud và VNG Cloud ở Hà Nội và TP.HCM, AWS ở Singapore, Hong Kong, Tokyo và Virginia. Front-end của các endpoint này nằm trong region tương ứng. Thêm vercel.com để thấy CDN của Vercel ở gần đến đâu. Không đo app thật của ai.
Công cụ là một chương trình Go ngắn, chỉ dùng thư viện chuẩn; mã nguồn chưa công bố. Cách làm đủ để tự viết lại.
Kết quả
TCP connect p50, mili giây, càng ngắn càng tốt:
| Đích | Connect p50 | Connect p90 | TLS p50 | Request đầu p50 | Thành công |
|---|---|---|---|---|---|
| Bizfly Cloud, TP.HCM | 33,2 | 61,8 | 95,1 | 161 | 119/120 |
| VNG Cloud, TP.HCM | 34,1 | 55,6 | 94,3 | 162 | 117/120 |
| Vercel (CDN anycast) | 35,4 | 62,7 | 79,8 | 151 | 119/120 |
| VNG Cloud, Hà Nội | 49,6 | 61,5 | 71,0 | 170 | 118/120 |
| Bizfly Cloud, Hà Nội | 57,8 | 83,6 | 81,9 | 198 | 117/120 |
| AWS, Singapore | 66,2 | 95,3 | 79,1 | 211 | 116/120 |
| AWS, Hong Kong | 76,8 | 108,5 | 91,1 | 245 | 117/120 |
| AWS, Tokyo | 134,9 | 168,7 | 148,3 | 418 | 115/120 |
| AWS, Virginia (Mỹ) | 281,7 | 314,7 | 298,2 | 862 | 112/120 |
Đơn vị mili giây. “Request đầu” là mô hình cho một request HTTPS trên kết nối mới: connect + TLS + một vòng cho chính request, chưa tính thời gian server xử lý. TLS gồm cả phần tính toán của server đích, nên chỉ so sánh tương đối giữa các đích. Các lần không thành công đều là timeout 3 giây ở bước TLS, rải đều mọi đích, nhiều khả năng do đường mạng phía máy đo.
Ba điều đọc được từ bảng:
- Từ máy này, Singapore chỉ chậm hơn Hà Nội khoảng 8–17 ms. Máy đo nhiều khả năng ở phía Nam: TP.HCM nhanh nhất. Người dùng ở Hà Nội sẽ thấy thứ tự khác; xem giới hạn.
- Đuôi dài hơn trung vị nhiều. p90 tới Singapore là 95 ms, có lần vượt 1 giây. Người dùng cảm nhận các lần chậm đó, không cảm nhận trung vị.
- Virginia gấp khoảng 4 lần Singapore. Một function để region mặc định trả khoảng 0,9 giây chỉ cho phần mạng của request đầu tiên.
Khi app và database ở hai nơi
Một trang thường chạy vài truy vấn nối tiếp: đọc session, đọc user, đọc danh sách đơn. Nếu app và database cùng data center, mỗi vòng dưới 1 ms. Nếu ở hai nơi, mỗi truy vấn tuần tự cộng thêm một RTT giữa hai nơi đó.
| App ở … , database ở … | RTT giữa hai nơi | 1 truy vấn | 5 truy vấn | 10 truy vấn |
|---|---|---|---|---|
| Cùng data center | < 1 | < 1 | < 5 | < 10 |
| TP.HCM, Singapore (ước lượng) | ~66 | 66 | 331 | 662 |
| TP.HCM, Virginia (ước lượng) | ~282 | 282 | 1.409 | 2.817 |
Đơn vị mili giây, chỉ phần mạng, cộng thêm vào thời gian mỗi request. Ước lượng từ RTT đo ở máy này, không phải số đo server-to-server; đường giữa hai data center thường ổn định hơn đường từ mạng gia đình. Connection pool giữ kết nối sẵn nên không tính bắt tay TCP/TLS ở đây.
Vì vậy câu hỏi đầu tiên không phải “region nào gần người dùng nhất”, mà là “app có nằm cùng chỗ với database không”. Vercel cũng tự khuyến nghị đặt function cùng region với database. Gộp các truy vấn tuần tự thành một (JOIN, hoặc chạy song song khi độc lập) giảm chi phí này ở mọi nơi.
CDN gần không có nghĩa là function gần
Kết nối tới vercel.com chỉ mất 35 ms, ngang TP.HCM, vì CDN của Vercel có điểm hiện diện gần. Nhưng đó là nơi kết thúc kết nối và trả nội dung tĩnh. Function vẫn chạy ở region compute; Vercel có 19 region, gần nhất là Singapore và Hong Kong, mặc định là Virginia. Trang tĩnh nhanh không chứng minh API có database cũng nhanh.
Giới hạn của phép đo
- Một máy, một nhà mạng, một khung giờ. Đo lúc 00:17–00:25, ngoài giờ cao điểm. Buổi tối (20:00–23:00), băng thông quốc tế thường nghẽn hơn; các con số tới Singapore, Hong Kong và Mỹ có thể xấu hơn đáng kể. Chưa đo từ mạng di động.
- Vị trí máy đo. Mạng cố định tại Việt Nam; RTT thấp nhất tới TP.HCM gợi ý máy ở phía Nam. Người dùng ở miền Bắc sẽ thấy Hà Nội nhanh hơn và Singapore xa hơn.
- Endpoint không phải app. Đây là front-end API/storage của nhà cung cấp. Thời gian TLS phụ thuộc cả cấu hình server đích.
- Bảng truy vấn là ước lượng từ RTT đo ở máy này, chưa đo trực tiếp giữa hai data center.
Embra sẽ đo lại vào giờ cao điểm và từ mạng di động, rồi cập nhật bài này kèm ngày sửa.
Tự đo từ mạng của bạn
Số đo từ mạng của chính người dùng có giá trị hơn mọi bảng chung. Cách đo trong bài này:
- Chọn đích là endpoint theo region của nhà cung cấp bạn đang cân nhắc (API hoặc object storage của region đó), không dùng tên miền có CDN phía trước.
- Phân giải DNS trước, rồi mới bấm giờ cho TCP connect và TLS handshake.
- Xen kẽ các đích trong cùng một vòng, nghỉ 1 giây giữa các vòng, chạy ít nhất 100 vòng.
- Báo cả p50 và p90, cùng số lần thất bại; không dùng trung bình.
- Chạy lại vào giờ cao điểm tối và từ mạng di động.
Muốn dùng công cụ của Embra, gửi email tới hello@embra.cloud.
Bài liên quan: so sánh nơi chạy app có Postgres cho người dùng Việt Nam và chuyển app Next.js có Postgres khỏi Vercel. Embra đang xây hosting app và PostgreSQL tại Việt Nam, hiện ở closed alpha; số đo trong bài là của các nhà cung cấp khác, không phải của hạ tầng Embra.