CDN giúp tăng tốc website của bạn như thế nào?

Chú thích của người biên tập: bài viết này sẽ lý giải tại sao CDN lại giúp website tải nhanh hơn, cùng các công nghệ căn bản ẩn dưới nó.

Về cơ bản có mấy thứ sau:

  • Nội dung gần người dùng hơn giúp giảm độ trễ;
  • Các công nghệ nén giúp giảm thiểu dữ liệu;
  • Ổ cứng SSD & khả năng chịu được lưu lượng truy cập lớn nhờ cân bằng tải.

Kiến thức ở bài này rất thích hợp với những ai mới tìm hiểu về CDN.

OK, giờ chúng ta sẽ đi vào chi tiết bài viết của Cloudflare nhé.


Hầu như tất cả người dùng Internet ngày nay đều đã có các trải nghiệm về lợi ích mà CDN / Content Distribution Network (mạng phân phối nội dung) đem lại rồi. Phần đa các công ty công nghệ lớn, chẳng hạn như Google, Apple và Microsoft đều sử dụng CDN để giảm độ trễ (latency) khi người dùng tải nội dung trang web.

Công ty CDN thường sẽ đặt các máy chủ tại những điểm trao đổi giữa các mạng khác nhau. Những điểm trao đổi internet (IXP / Internet Exchange Points) này là những địa điểm chính mà các nhà cung cấp internet khác nhau liên kết với nhau để cung cấp cho nhau quyền truy cập vào các tài nguyên trên các mạng khác nhau của họ. 

Ngoài IXP, công ty CDN sẽ đặt các máy chủ trong các trung tâm dữ liệu ở các vị trí trên toàn cầu tại các khu vực có lưu lượng truy cập cao và các vị trí chiến lược để có thể có được tốc độ kết nối nhanh nhất có thể.

Lợi ích chính của CDN là khả năng cung cấp nội dung nhanh chóng và hiệu quả hơn. Tối ưu hóa hiệu suất CDN có thể được chia thành ba mục chính:

  1. Giảm khoảng cách – giảm khoảng cách vật lý giữa máy khách và nơi đặt dữ liệu được yêu cầu;
  2. Tối ưu hóa phần cứng / phần mềm – cải thiện hiệu suất của cơ sở hạ tầng phía máy chủ gốc, chẳng hạn như bằng cách sử dụng ổ cứng thể rắn (SSD) và cân bằng tải (load balancing) hiệu quả hơn;
  3. Giảm truyền dữ liệu – sử dụng các kỹ thuật để giảm kích thước tệp, nhờ vậy tải trang ban đầu diễn ra nhanh hơn.

Để hiểu lợi ích của việc sử dụng CDN, hãy cùng tìm hiểu xem cách truyền dữ liệu giữa máy khách & máy chủ diễn ra như thế nào khi không có CDN.

PS: nếu bạn muốn tìm các dịch vụ CDN tốt cho website nói chung, và WordPress nói riêng, hãy tham khảo bài viết này.

Sự khác biệt về thời gian tải khi CÓ & KHÔNG có CDN là gì?

Hãy tưởng tượng rằng ai đó ở New York cần truy cập một trang web được lưu trữ trên máy chủ gốc ở tận Singapore. Khoảng cách vật lý giữa hai địa điểm này là rất lớn, với độ dài lên đến 9520 dặm (15320 km).

khoảng cách xa giữa máy khách và máy chủ gốc

Nếu máy chủ lưu trữ nội dung trang web (máy chủ gốc) được đặt tại Singapore, thì mỗi yêu cầu đối với mỗi nội dung của trang web sẽ phải đi từ New York đến Singapore rồi quay ngược lại lần nữa (để trả kết quả về cho máy khách). 

Giống như ai đó thực hiện một chuyến bay quốc tế với nhiều kết nối sân bay trên đường đi, mỗi yêu cầu phải di chuyển qua một loạt bộ định tuyến (router) dọc theo hành trình xa xôi của nó từ điểm A đến điểm B.

Nếu bạn muốn xem một ví dụ thực tế về số lượng kết nối (bước nhảy) khác nhau mà máy tính của bạn cần để đến một dịch vụ web cụ thể từ vị trí hiện tại của bạn, hãy theo dõi bằng công cụ traceroute trên máy tính để bàn.

khoảng cách xa khiến nó phải đi qua nhiều bộ định tuyến và làm tăng độ trễ

Vì yêu cầu từ New York đến Singapore cần phải đi qua từng địa điểm của bộ định tuyến dọc đường truyền, lượng thời gian (độ trễ) bị tăng lên ở cả tổng khoảng cách và thời gian mỗi bộ định tuyến xử lý yêu cầu. 

Khi máy chủ gốc xử lý yêu cầu và trả lời máy khách, tiếp đó nó sẽ gửi thông tin trở lại thông qua một chuỗi bộ định tuyến tương tự, trước khi quay trở lại New York.

Phép đo tổng số chuyến đi khứ hồi này được gọi trong ngành viễn thông là RTT / Round Trip Time cho “thời gian khứ hồi”. Chưa tính đến băng thông khả dụng và khả năng tắc nghẽn mạng (network congestion), hãy xem qua một ví dụ về các yếu tố tạo ra độ trễ.

Để minh họa, chúng ta thử quan sát ví dụ trên:

  • Mất 250ms để thực hiện yêu cầu đi từ New York đến Singapore;
  • Việc thiết lập kết nối TCP / IP sẽ thêm 3 lần độ trễ 250ms nữa;
  • Trang web yêu cầu 5 nội dung duy nhất bao gồm hình ảnh, tệp JavaScript và chính trang web đó.

Hãy xem thử trang web này sẽ mất bao lâu để tải xong:

  • 750ms: Kết nối TCP / IP được thực hiện giữa máy khách ở New York và máy chủ gốc ở Singapore;
  • 250ms: Yêu cầu HTTP cho trang web đi từ New York đến Singapore;
  • 250ms: Máy khách yêu cầu ở New York nhận được phản hồi từ máy chủ gốc ở Singapore với mã trạng thái 200 và trang web bao gồm tất cả các nội dung bổ sung cần thiết;
  • 250ms: Mỗi nội dung trong số 5 nội dung được yêu cầu bởi người duyệt web ở New York;
  • 1500ms: Năm nội dung được phân phối không đồng bộ tới máy khách từ máy chủ gốc ở Singapore.

Trong ví dụ đơn giản này, tổng thời gian để tải trang web này là khoảng 3000 mili giây .

Như bạn có thể thấy, mỗi khi yêu cầu được thực hiện và phản hồi được gửi đi, toàn bộ đường truyền giữa máy khách ở New York và máy chủ gốc ở Singapore sẽ được đi qua. Khi các trang web trở nên lớn hơn và yêu cầu số lượng nội dung lớn hơn, độ trễ giữa điểm A và điểm B tiếp tục tăng lên.

Hãy xem lại ví dụ về nội dung được lưu trữ ở máy chủ gốc Singapore được phục vụ cho một máy khách ở New York, nhưng hiện tại trang web ở Singapore đang sử dụng CDN với một máy chủ biên ở Atlanta có chứa bản sao nội dung tĩnh của trang web được lưu trong bộ nhớ cache:

  • Mất 50ms cho một yêu cầu đi từ New York đến Atlanta;
  • Thiết lập kết nối TCP / IP sẽ thêm 3 lần độ trễ 50ms;
  • Trang web yêu cầu 5 nội dung duy nhất bao gồm hình ảnh, tệp JavaScript và chính trang web.

Hãy cùng xem trang web này sẽ mất bao lâu để tải bằng CDN:

  • 150ms: Kết nối TCP / IP được thực hiện giữa máy khách ở New York và máy chủ biên ở Atlanta;
  • 50ms: Yêu cầu HTTP GET cho trang web truyền từ máy khách đến máy chủ biên;
  • 50ms: Máy khách nhận được phản hồi từ cache của máy chủ biên với trang web bao gồm danh sách tất cả các nội dung bổ sung vẫn đang được yêu cầu;
  • 50ms: Mỗi nội dung trong số 5 nội dung được khách hàng yêu cầu;
  • 800ms: Năm nội dung được phân phối không đồng bộ đến máy khách từ máy chủ biên.

Tổng thời gian vận chuyển để tải trang web này là khoảng 1100 mili giây.

khi có CDN dữ liệu gần máy khách của người dùng hơn

Trong ví dụ này, việc giảm khoảng cách giữa máy khách và nội dung tạo ra sự cải thiện về độ trễ 1900ms cho nội dung tĩnh, thể hiện sự cải thiện gần 2 giây trong thời gian tải.

CDN giúp giảm thời gian tải trang như thế nào

Bằng cách giảm tổng khoảng cách mà tất cả lưu lượng truy cập cần thiết phải đi qua, mỗi người dùng đến trang web sẽ tiết kiệm được một lượng thời gian tải (đáng kể). Vì người dùng bắt đầu rời khỏi trang web (thoát) rất nhanh khi thời gian chờ tăng lên, cải tiến này giúp trải nghiệm người dùng tốt hơn cũng như thời gian người dùng trên trang cao hơn.

CDN tải nội dung như thế nào? Bộ nhớ đệm là gì?

Như đã đề cập trước đó, thông thường khi một máy khách yêu cầu một tệp từ máy chủ gốc, yêu cầu cần phải đi vòng khứ hồi đến máy chủ đó & rồi quay lại máy khách một lần nữa. CDN cải thiện độ trễ bằng cách kéo các tệp nội dung tĩnh từ máy chủ gốc vào mạng CDN phân tán trong một quá trình được gọi là bộ nhớ đệm (caching). 

Một số CDN sẽ có các tính năng nâng cao cho phép chọn lọc nội dung động. Sau khi dữ liệu được lưu vào bộ nhớ đệm, CDN phân phối nội dung cho máy khách từ trung tâm dữ liệu CDN gần với máy khách nhất.

máy chủ gốc phục vụ tất cả lưu lượng truy cập
Nếu chỉ có hosting gốc, dù máy khách ở đâu, bạn cũng phải lấy dữ liệu từ máy chủ gốc này
máy chủ biên CDN phục vụ các máy khách ở các vị trí khác nhau hiệu quả hơn
Khi có CDN, nội dung tĩnh được lấy từ máy chủ CDN gần nhất, vừa giúp tăng tốc, vừa giúp giảm tải

Sau khi thực hiện bắt tay TCP, máy khách thực hiện một yêu cầu HTTP đến mạng của CDN. Nếu nội dung chưa được lưu vào bộ nhớ đệm, trước tiên CDN sẽ tải xuống nội dung từ máy chủ gốc bằng cách thực hiện một yêu cầu bổ sung giữa máy chủ gốc và máy chủ biên của CDN.

Dưới đây là 4 bước trong bộ đệm CDN điển hình:

  1. Khi người dùng yêu cầu một trang web, yêu cầu của người dùng được chuyển đến máy chủ biên gần nhất của CDN;
  2. Máy chủ biên sau đó đưa ra yêu cầu đến máy chủ gốc đối với nội dung mà người dùng yêu cầu;
  3. Máy chủ gốc gốc đáp ứng yêu cầu của máy chủ biên;
  4. Cuối cùng máy chủ biên trả lời máy khách.

Công dụng của khoảng cách địa lý gần gũi giữa CDN với máy khách xảy ra sau khi yêu cầu ban đầu đến máy chủ gốc đã được thực hiện. Khi dữ liệu đã được lưu vào bộ nhớ đệm từ máy chủ gốc vào mạng của CDN rồi, mỗi yêu cầu tiếp theo từ máy khách chỉ cần đến máy chủ biên gần nhất. Điều này có nghĩa là nếu máy chủ biên gần nhất gần hơn máy chủ gốc, độ trễ có thể được giảm bớt và nội dung có thể được phục vụ nhanh hơn nhiều.

Điều quan trọng cần lưu ý là thời gian cần thiết để tải xuống nội dung và xử lý các yêu cầu và phản hồi hiện không được tính đến; cho đến lúc này chúng ta chỉ tính thời gian di chuyển cần thiết để chuyển thông tin giữa hai địa điểm trên mà thôi. Các yếu tố độ trễ quan trọng khác mà chúng ta sẽ tìm hiểu tiếp bao gồm giảm dung lượng dữ liệu, tốc độ đĩa cứng và tắc nghẽn mạng.

CDN giảm kích thước tệp để tăng tốc độ như thế nào?

Để cải thiện thời gian tải trang, CDN giảm dung lượng truyền dữ liệu tổng thể giữa máy chủ bộ đệm CDN và máy khách. Cả độ trễ và băng thông yêu cầu đều giảm khi tổng lượng dữ liệu truyền giảm. Kết quả là trang tải trang nhanh hơn và chi phí băng thông thấp hơn. Hai thành phần chính yếu đóng góp vào sự cải thiện này gồm:

Minification – thu nhỏ là quá trình mà các khối mã được giảm kích thước bằng cách loại bỏ tất cả các thành phần chú thích (dành cho con người). Trong khi lập trình viên cần tách các ý tưởng thành các tên biến, khoảng trắng và chú thích hợp lý để đọc các khối mã dễ dàng và thuận lợi trong việc bảo trì, nhưng máy tính có thể chạy mã thành công, không gây ra bất cứ ảnh hưởng gì khi xóa chúng đi.

Đây là cùng một khối mã trước và sau khi rút gọn:

Trước khi rút gọn có tám dòng mã:

tám dòng mã

Sau khi rút gọn, nó giảm xuống chỉ còn có một dòng mã:

rút gọn còn một dòng mã

Bây giờ đoạn mã đã được giảm từ tám dòng xuống một dòng, kích thước tệp tổng thể cũng đã được giảm xuống tương ứng. Điều này có nghĩa là mất ít thời gian hơn để chuyển tệp, giảm độ trễ và giúp tải nội dung nhanh hơn.

Nén tệp – nén tệp là một thành phần không thể thiếu trong việc giảm độ trễ và tiêu thụ băng thông cần thiết khi truyền dữ liệu qua Internet. Gzip là một phương pháp nén phổ biến và được coi là phương pháp hay nhất để sử dụng khi chuyển các trang web. Nhiều nhà cung cấp CDN đã bật Gzip theo mặc định. Bạn có thể muốn biết website tiết kiệm được bao nhiêu khi sử dụng Gzip? Thông thường, các tệp nén sẽ giảm khoảng 50% đến 70% kích thước ban đầu (chỉ các tệp dạng văn bản, không phải tệp media như hình ảnh, các tệp đa phương tiện sử dụng phương pháp nén khác).

Dịch vụ CDN có thể sử dụng phần cứng như thế nào để cải thiện tốc độ?

Liên quan đến việc tối ưu hóa phần cứng của CDN, một lợi ích đáng kể đến từ việc sử dụng ổ cứng thể rắn (SSD / Solid-State hard Drives) thay vì ổ đĩa cứng truyền thống (HDD / Hard Disk Drives); ổ cứng thể rắn SSD có thể mở tệp nhanh hơn tới 30% so với ổ đĩa cứng truyền thống HDD, đồng thời có khả năng phục hồi và đáng tin cậy hơn.

Tương tự như một máy ghi âm, ổ đĩa cứng truyền thống bao gồm một đĩa kim loại quay tròn có lớp phủ từ tính để lưu trữ dữ liệu. Đầu đọc / ghi trên cánh tay truy cập thông tin, trong khi đĩa quay bên dưới nó. Quá trình này là hoạt động cơ học và bị ảnh hưởng bởi tốc độ quay của đĩa. Với sự ra đời của ổ cứng thể rắn, kiểu ổ cứng cũ hơn đã trở nên ít được sử dụng hơn, mặc dù ngày nay chúng vẫn được sản xuất và được lưu hành rộng rãi trong nhiều hệ thống máy tính.

Ổ cứng thể rắn (SSD) cũng là một dạng lưu trữ liên tục, nhưng có chức năng tương tự như ổ USB hoặc thẻ nhớ thường thấy trong các thiết bị như máy ảnh kỹ thuật số; chúng không có bộ phận chuyển động. Nếu một đĩa cứng thông thường đang quay và hệ thống bị xáo trộn, ổ cứng có thể bỏ qua, dẫn đến lỗi đọc / ghi và thời gian chết tiềm ẩn. Một lợi ích quan trọng khác của SSD là khả năng truy cập các tệp bị phân mảnh. Phân mảnh tệp là tình trạng các phần của tệp nằm ở các vị trí khác nhau trên đĩa, dẫn đến việc truy cập ổ cứng HDD chậm hơn. Vì SSD có thể truy cập các vị trí bộ nhớ không liền kề một cách hiệu quả, phân mảnh không phải là mối đe dọa đối với hiệu suất.

Khi dịch vụ CDN mới ra đời, dữ liệu được lưu trữ trên ổ đĩa cứng HDD. Giờ đây, một số dịch vụ CDN cung cấp ổ cứng thể rắn SSD trên tất cả máy chủ biên caching. Nhược điểm của SSD là chi phí; SSD có thể đắt gấp 5 lần so với phương tiện truyền thống HDD. Vì lý do này, một số dịch vụ CDN thường sẽ tránh sử dụng SSD và thay vào đó sẽ chọn công nghệ cũ hơn. Dịch vụ CDN của Cloudflare sử dụng ổ cứng SSD.

(Dịch từ bài viết CDN Performance của Cloudflare)