Vì sao website ở Mỹ vẫn tải nhanh ở Việt Nam?
Máy chủ ở Mỹ, tại sao mở website từ Việt Nam vẫn rất nhanh?
Giả sử một website có hệ thống chính đặt ở Mỹ.
Bạn đang ở Việt Nam, cách đó hơn mười nghìn kilomet.
Thế nhưng khi mở trang, logo xuất hiện gần như ngay lập tức. Ảnh cũng bắt đầu hiện chỉ sau một khoảnh khắc.
Dữ liệu không thể bỏ qua khoảng cách. Vậy tại sao một website ở Mỹ vẫn có thể tải nhanh ở Việt Nam?
Nếu mọi thứ thật sự đều phải lấy từ máy chủ ở Mỹ, mỗi yêu cầu sẽ phải đi qua Internet tới Mỹ rồi dữ liệu mới quay trở lại Việt Nam.
Khoảng cách vật lý tạo ra độ trễ. Đường truyền có thể có băng thông rất lớn, nhưng tín hiệu vẫn cần thời gian để đi qua hàng nghìn kilomet cáp quang và nhiều thiết bị mạng trên đường.
Một lần như vậy có thể chưa đáng kể.
Nhưng một website cần rất nhiều dữ liệu: ảnh, tệp giao diện, mã JavaScript, font chữ và nhiều tệp khác.
Và nếu hàng triệu người trên thế giới đều phải lấy chúng từ cùng một nơi, máy chủ đó còn phải phục vụ tất cả những người này cùng lúc.
Cuối thập niên 1990, vấn đề web chậm phổ biến đến mức người ta gọi đùa nó là:
World Wide Wait.
Website không chỉ chậm vì đường xa. Một trang bất ngờ nổi tiếng còn có thể bị lượng người truy cập tăng mạnh làm quá tải.
Hiện tượng đó được gọi là đám đông truy cập bất ngờ (flash crowd).
Thêm nhiều máy chủ ở Mỹ có thể giúp phục vụ nhiều người hơn.
Nhưng có thêm mười hay một trăm máy ở Mỹ thì người dùng ở Việt Nam vẫn phải lấy dữ liệu từ Mỹ.
Muốn giảm quãng đường, phải làm một việc khác:
đưa dữ liệu tới gần người dùng hơn.
Nếu tấm ảnh đã có sẵn ở Singapore thì sao?
Giả sử website có một tấm ảnh tên là:
hero.webp
Bản gốc nằm trên máy chủ ở Mỹ.
Nhưng nếu có thêm một bản sao ở Singapore thì sao?
Khi người dùng ở Việt Nam mở trang, thay vì lấy ảnh theo đường:
Việt Nam → Mỹ
họ có thể lấy từ:
Việt Nam → Singapore
Nếu có người dùng ở châu Âu, website lại có thể giữ thêm một bản sao ở châu Âu.
Nếu có người dùng ở Nhật, lại có thể có một bản ở gần Nhật.
Ý tưởng là không bắt tất cả mọi người trên thế giới phải lấy cùng một tệp từ cùng một nơi.
Một hệ thống gồm nhiều máy chủ đặt ở nhiều khu vực để làm việc này được gọi là mạng phân phối nội dung (Content Delivery Network, CDN).
CDN không làm tín hiệu chạy nhanh hơn.
Nó làm cho dữ liệu nằm gần người cần nó hơn.
Một bản gốc, nhiều bản sao
Trong hệ thống này có hai nơi cần phân biệt.
Nơi giữ dữ liệu gốc của website được gọi là máy chủ gốc (origin server).
Các máy của CDN đặt gần người dùng được gọi là máy chủ biên (edge server).
Có thể hình dung như sau:
Máy chủ gốc
Mỹ
│
┌────────────────┼────────────────┐
│ │ │
Singapore Nhật châu Âu
│ │ │
Việt Nam Nhật Bản châu Âu
Người ở Việt Nam không nhất thiết phải hỏi máy chủ gốc ở Mỹ.
Họ có thể lấy dữ liệu từ một máy chủ biên gần hơn.
Nhưng máy ở Singapore không thể tự nhiên có sẵn mọi tấm ảnh của website.
Bản sao đó tới Singapore bằng cách nào?
Người đầu tiên vẫn có thể phải đi tới Mỹ
Giả sử website vừa đăng một tấm ảnh mới.
Máy chủ gốc ở Mỹ có ảnh.
Máy chủ biên ở Singapore chưa có.
Một người ở Việt Nam mở trang.
Yêu cầu trước tiên tới máy chủ biên ở Singapore.
Máy này kiểm tra bộ nhớ đệm (cache) của mình và không tìm thấy tấm ảnh.
Trường hợp này thường được gọi là cache miss: dữ liệu cần dùng chưa có trong bộ nhớ đệm.
Singapore lúc này phải đi lấy bản gốc:
Việt Nam
↓
Singapore
↓
Mỹ
Máy chủ ở Mỹ gửi ảnh về Singapore.
Singapore chuyển ảnh cho người dùng, đồng thời giữ lại một bản trong bộ nhớ đệm.
Bây giờ một người khác ở Việt Nam mở đúng trang đó.
Yêu cầu lại tới Singapore.
Nhưng lần này ảnh đã nằm sẵn ở đó.
Đây là cache hit: dữ liệu cần dùng đã có trong bộ nhớ đệm.
Đường đi lúc này chỉ còn:
Việt Nam
↓
Singapore
Máy chủ ở Mỹ không cần tham gia.
Trên bản đồ, sự khác nhau trông như thế này:

Vậy lần đầu tiên một tệp xuất hiện ở khu vực đó, CDN vẫn có thể phải đi tới máy chủ gốc.
Nhưng sau khi đã có bản sao, hàng nghìn người tiếp theo có thể nhận dữ liệu từ nơi gần hơn.
Một bản sao có thể phục vụ rất nhiều người
CDN còn giải quyết một vấn đề khác.
Giả sử một bài báo đột nhiên được một triệu người mở.
Trong bài có cùng một tấm ảnh.
Nếu tất cả một triệu người đều lấy ảnh từ máy chủ gốc, hệ thống ở đó phải gửi cùng một dữ liệu đi hết lần này tới lần khác.
Với CDN, người dùng ở các khu vực khác nhau sẽ được phục vụ bởi những máy chủ biên khác nhau.
Người ở Việt Nam có thể lấy ảnh từ Singapore.
Người ở Nhật lấy từ một máy gần Nhật.
Người ở châu Âu lấy từ một máy ở châu Âu.
Mỗi máy chủ biên có thể phải lấy ảnh từ máy chủ gốc một lần, rồi dùng bản đã giữ để phục vụ rất nhiều người tiếp theo.
Thay vì:
1.000.000 người
↓
máy chủ gốc
lưu lượng được chia ra:
máy chủ gốc
↙ ↓ ↘
Singapore Nhật châu Âu
↓ ↓ ↓
người dùng người dùng người dùng
Mỗi lần CDN trả được dữ liệu từ bản đang giữ là một lần yêu cầu không cần đi tới máy chủ gốc.
Vì vậy CDN giải quyết cùng lúc hai vấn đề:
- dữ liệu không phải đi quá xa;
- máy chủ gốc không phải phục vụ mọi người.
Đây cũng là lý do CDN giúp website chịu được những đợt lượng truy cập tăng đột ngột.
Ý tưởng này xuất hiện khi web bắt đầu lớn lên
Cuối những năm 1990, khi web phát triển nhanh, việc đưa nội dung tới người dùng ở xa và xử lý lượng truy cập lớn trở thành một vấn đề thực tế.
Tom Leighton và Danny Lewin ở MIT phát triển các thuật toán để phân phối nội dung qua một mạng lớn gồm nhiều máy chủ.
Năm 1998, họ cùng thành lập Akamai.
Đến năm 1999, Akamai bắt đầu cung cấp dịch vụ thương mại và trở thành một trong những công ty đầu tiên xây mạng phân phối nội dung ở quy mô lớn.
Ý tưởng nền tảng vẫn giống thứ vừa thấy:
đừng bắt tất cả người dùng phải quay về cùng một máy chủ để lấy cùng một dữ liệu.
Nhưng khi bắt đầu giữ nhiều bản sao, một vấn đề mới xuất hiện.
Nếu bản gốc vừa thay đổi thì sao?
Giả sử Singapore đang giữ một bản của:
hero.webp
Sau đó website thay tấm ảnh trên máy chủ gốc ở Mỹ.
Bản ở Singapore lúc này đã cũ.
Nhưng nó không tự nhiên biết rằng bản gốc vừa thay đổi.
Vì vậy website thường quy định dữ liệu được phép nằm trong bộ nhớ đệm trong bao lâu.
Khi khoảng thời gian đó hết, CDN phải kiểm tra lại hoặc lấy bản mới từ máy chủ gốc.
Nếu cần cập nhật ngay, website cũng có thể yêu cầu CDN xoá bản cũ.
Đây là sự đánh đổi của việc giữ bản sao.
Giữ lâu thì máy chủ gốc ít phải làm việc hơn và người dùng thường nhận dữ liệu nhanh hơn.
Nhưng nếu nội dung thay đổi, bản cũ cũng có thể tồn tại lâu hơn.
Ai từng sửa CSS hoặc thay một tấm ảnh trên website nhưng một số người vẫn nhìn thấy phiên bản cũ có thể đã gặp chính vấn đề này.
CDN biết đưa bạn tới máy chủ nào bằng cách nào?
Không có một cách duy nhất.
Một CDN có thể dùng DNS để người dùng ở những mạng hoặc khu vực khác nhau được đưa tới những điểm phục vụ khác nhau.
Một số hệ thống còn dùng định tuyến anycast, trong đó cùng một địa chỉ IP được công bố từ nhiều địa điểm. Hệ thống định tuyến của Internet sẽ đưa yêu cầu tới một trong những nơi có đường đi phù hợp.
Vì vậy “máy gần bạn” không nhất thiết là máy gần nhất nếu đo bằng kilomet. Điều quan trọng hơn là đường mạng từ bạn tới điểm đó.
Vậy tại sao một website có hệ thống chính ở Mỹ vẫn có thể tải nhanh tại Việt Nam?
Vì thứ bạn tải xuống không nhất thiết nằm ở Mỹ.
Ảnh, JavaScript, font và nhiều tệp khác có thể đã được sao chép tới Singapore, Việt Nam hoặc một nơi khác gần bạn hơn.
Bạn nhìn thấy một website.
Nhưng phía sau nó có thể là rất nhiều bản sao nằm rải ở nhiều nơi trên thế giới.
Internet còn có một chuyện kỳ lạ khác.
Laptop, điện thoại và TV trong nhà bạn đều có địa chỉ riêng.
Nhưng khi đi ra Internet, cả nhà thường lại xuất hiện dưới cùng một địa chỉ.
Vì sao cả nhà dùng chung một địa chỉ Internet?
Nguồn bài viết (4)
- W3C Recommendations Reduce "World Wide Wait" (1999) · W3C
- Managing Flash Crowds on the Internet (MASCOTS 2003) · UC Santa Cruz
- Company History · Akamai
- CDN reference architecture · Cloudflare Docs