Reading Time: 9 minutes

Các trang web và ứng dụng hiện đại thường phải phân phối một lượng lớn nội dung tĩnh đến người dùng. Nội dung này bao gồm hình ảnh, stylesheet, JavaScript và video. Khi số lượng và dung lượng của các tài nguyên tĩnh này tăng lên, mức tiêu thụ băng thông cũng tăng, thời gian tải trang lâu hơn, làm suy giảm trải nghiệm duyệt web của người dùng và giảm khả năng xử lý còn lại của máy chủ.

CDN là gì?

Để giảm đáng kể thời gian tải trang, cải thiện hiệu suất và cắt giảm chi phí băng thông cũng như hạ tầng, chúng ta có thể triển khai CDN (mạng phân phối nội dung) để lưu vào bộ nhớ đệm các tài nguyên này trên một tập hợp máy chủ được phân bố theo vị trí địa lý.

Trong hướng dẫn này, chúng ta sẽ tìm hiểu CDN là gì và cách thức hoạt động của nó, cùng với các lợi ích mà nó mang lại cho ứng dụng web.

CDN là gì?

CDN là một nhóm máy chủ được phân bố theo vị trí địa lý và tối ưu hóa để phân phối nội dung tĩnh đến người dùng cuối. Nội dung tĩnh này có thể là hầu hết mọi loại dữ liệu, nhưng CDN thường được dùng để phân phối trang web và các tệp liên quan của chúng, video và âm thanh streaming, cùng các gói phần mềm dung lượng lớn.

CDN là gì

Sơ đồ phân phối nội dung khi không sử dụng CDN

Một CDN bao gồm nhiều điểm hiện diện (PoP) ở các vị trí khác nhau, mỗi điểm chứa một số máy chủ biên (edge server) lưu vào bộ nhớ đệm các tài nguyên từ máy chủ gốc (origin server). Khi người dùng truy cập website và yêu cầu các tài nguyên tĩnh như hình ảnh hoặc tệp JavaScript, CDN sẽ định tuyến yêu cầu đó đến máy chủ biên gần nhất, từ đó phân phối nội dung.

Nếu máy chủ biên chưa lưu tài nguyên vào bộ nhớ đệm hoặc bản lưu trữ đã hết hạn, CDN sẽ truy xuất và lưu phiên bản mới nhất từ một máy chủ biên CDN gần khác hoặc từ máy chủ gốc. Nếu máy chủ biên CDN đã có bản lưu trữ của tài nguyên (trường hợp này thường xảy ra nếu website của chúng ta có lượng truy cập vừa phải), nó sẽ trả lại bản lưu này cho người dùng cuối.

CDN là gì

Sơ đồ mạng phân phối nội dung (CDN)

Cách này cho phép người dùng ở các vị trí địa lý khác nhau giảm thiểu số bước trung gian cần thiết để tiếp nhận nội dung tĩnh, truy xuất nội dung trực tiếp từ bộ nhớ đệm của máy chủ biên gần nhất. Kết quả là giảm đáng kể độ trễ và tỷ lệ mất gói, tăng thời gian tải trang và giảm mạnh tải xử lý cho hạ tầng máy chủ gốc.

Các nhà cung cấp CDN thường cung cấp thêm các tính năng bổ sung như giảm thiểu tấn công DDoS và giới hạn tốc độ truy cập, phân tích dữ liệu người dùng, cùng các tối ưu hóa cho trường hợp sử dụng streaming hoặc di động với chi phí bổ sung.

CDN hoạt động như thế nào?

Khi người dùng truy cập vào website của chúng ta, họ sẽ nhận phản hồi từ máy chủ DNS chứa địa chỉ IP của máy chủ web gốc. Trình duyệt của họ sau đó sẽ gửi yêu cầu lấy nội dung trang web, thường bao gồm nhiều tệp tĩnh như trang HTML, stylesheet CSS, mã JavaScript và hình ảnh.

Khi triển khai CDN và chuyển các tài nguyên tĩnh này lên máy chủ CDN, thông qua việc “đẩy” thủ công hoặc để CDN tự động “kéo” các tài nguyên (cả hai cơ chế này sẽ được trình bày ở phần tiếp theo), chúng ta sẽ cấu hình lại máy chủ web để viết lại các liên kết đến nội dung tĩnh sao cho chúng trỏ đến các tệp được lưu trên CDN. Nếu sử dụng CMS như WordPress, việc viết lại liên kết này có thể được thực hiện thông qua plugin bên thứ ba như CDN Enabler.

Nhiều CDN hỗ trợ tên miền tùy chỉnh, cho phép chúng ta tạo bản ghi CNAME trong tên miền của mình, trỏ đến một endpoint của CDN. Khi CDN nhận yêu cầu của người dùng tại endpoint này (nằm ở vị trí edge, gần người dùng hơn nhiều so với máy chủ backend), nó sẽ định tuyến yêu cầu đến PoP gần nhất với người dùng. PoP này thường bao gồm một hoặc nhiều máy chủ biên của CDN đặt chung tại Internet Exchange Point (IxP), về cơ bản là một trung tâm dữ liệu mà các nhà cung cấp dịch vụ Internet (ISP) dùng để kết nối mạng lưới của họ. Bộ cân bằng tải nội bộ của CDN sau đó sẽ định tuyến yêu cầu đến một máy chủ biên trong PoP này, từ đó phân phối nội dung cho người dùng.

Cơ chế lưu vào bộ nhớ đệm có thể khác nhau tùy nhà cung cấp CDN, nhưng về cơ bản chúng hoạt động như sau:

  • Khi CDN nhận yêu cầu đầu tiên cho một tài nguyên tĩnh, ví dụ một ảnh PNG, nó chưa có bản lưu trong bộ nhớ đệm nên phải lấy bản sao từ một máy chủ biên CDN gần đó hoặc trực tiếp từ máy chủ gốc. Trường hợp này gọi là “cache miss” và thường có thể nhận biết bằng cách kiểm tra HTTP response header, trong đó có X-Cache: MISS. Yêu cầu đầu tiên này sẽ chậm hơn các yêu cầu sau vì sau khi hoàn tất, tài nguyên sẽ được lưu vào bộ nhớ đệm tại máy chủ biên.
  • Các yêu cầu tiếp theo cho tài nguyên này (“cache hit”) được định tuyến đến vị trí edge đó sẽ được phân phối từ bộ nhớ đệm cho đến khi hết hạn (thời gian này thường được đặt thông qua HTTP header). Các phản hồi này sẽ nhanh hơn đáng kể so với yêu cầu ban đầu, giảm mạnh độ trễ cho người dùng và giảm tải lưu lượng truy cập trên máy chủ web gốc nhờ chuyển sang mạng CDN. Chúng ta có thể xác minh phản hồi được phân phối từ bộ nhớ đệm của CDN bằng cách kiểm tra HTTP response header, lúc này sẽ có X-Cache: HIT.

Để tìm hiểu chi tiết hơn về cách hoạt động cụ thể của một CDN và được triển khai, hãy tham khảo tài liệu của nhà cung cấp CDN đó.

Ở phần tiếp theo, chúng ta sẽ tìm hiểu về hai loại CDN phổ biến: CDN dạng push và CDN dạng pull.

Push và Pull Zones

Hầu hết các nhà cung cấp CDN cung cấp hai cách để lưu vào bộ nhớ đệm dữ liệu: pull zonepush zone.

Pull zone hoạt động bằng cách nhập địa chỉ máy chủ gốc, để CDN tự động truy xuất và lưu tất cả tài nguyên tĩnh có trên trang web vào bộ nhớ đệm. Pull zone thường được dùng để phân phối các tài nguyên web có dung lượng nhỏ đến trung bình, cập nhật thường xuyên, như tệp HTML, CSS và JavaScript. Sau khi cung cấp địa chỉ máy chủ gốc cho CDN, bước tiếp theo thường là viết lại liên kết đến các tài nguyên tĩnh sao cho chúng trỏ đến URL do CDN cung cấp. Từ thời điểm đó trở đi, CDN sẽ xử lý các yêu cầu tài nguyên từ người dùng và phân phối nội dung từ bộ nhớ đệm phân tán theo vị trí địa lý hoặc từ máy chủ gốc khi cần.

Với push zone, chúng ta tải dữ liệu lên một bucket hoặc vùng lưu trữ được chỉ định, sau đó CDN sẽ phân phối dữ liệu này đến bộ nhớ đệm trên hệ thống máy chủ biên được phân tán của nó. Push zone thường được sử dụng cho các tệp lớn, ít thay đổi như tệp lưu trữ, gói phần mềm, tệp PDF, video và âm thanh.

Lợi ích của việc sử dụng CDN

Hầu như bất kỳ website nào cũng có thể hưởng lợi từ việc triển khai CDN, nhưng nhìn chung các lý do cốt lõi là giảm tải băng thông từ máy chủ gốc sang máy chủ CDN, và giảm độ trễ cho người dùng ở nhiều vị trí địa lý khác nhau.

Dưới đây là các lợi ích chính khi sử dụng CDN:

Giảm tải cho máy chủ gốc (Origin Offload)

Nếu máy chủ của chúng ta đang gần đạt giới hạn băng thông, việc chuyển các tài nguyên tĩnh như hình ảnh, video, tệp CSS và JavaScript sang CDN sẽ giúp giảm đáng kể mức sử dụng băng thông. CDN được thiết kế và tối ưu hóa để phân phối nội dung tĩnh, và các yêu cầu từ phía người dùng sẽ được định tuyến đến và phục vụ bởi các máy chủ biên. Điều này còn giúp giảm tải xử lý cho máy chủ gốc nhờ giảm tần suất phục vụ nội dung.

Giảm độ trễ để cải thiện trải nghiệm người dùng

Nếu người dùng của chúng ta phân bố rộng về mặt địa lý và một phần đáng kể lưu lượng truy cập đến từ các khu vực xa, CDN có thể giảm độ trễ bằng cách lưu các tài nguyên tĩnh vào bộ nhớ đệm trên máy chủ biên gần người dùng hơn. Bằng cách rút ngắn khoảng cách giữa người dùng và nội dung tĩnh, chúng ta có thể phân phối nội dung nhanh hơn và cải thiện trải nghiệm nhờ tăng tốc độ tải trang.

Lợi ích này đặc biệt rõ rệt đối với các website phân phối nội dung video tiêu tốn nhiều băng thông, đặc biệt là khi độ trễ cao và tốc độ tải chậm ảnh hưởng trực tiếp đến trải nghiệm và mức độ tương tác của người dùng.

Quản lý lưu lượng đột biến và tránh ngừng dịch vụ

CDN cho phép xử lý các đợt tăng lưu lượng đột ngột bằng cách cân bằng tải yêu cầu trên mạng lưới máy chủ biên phân tán rộng. Bằng cách chuyển và lưu trữ nội dung tĩnh trên mạng phân phối, chúng ta có thể phục vụ nhiều người dùng đồng thời hơn mà không cần mở rộng hạ tầng hiện tại.

Đối với các website chỉ dùng một máy chủ gốc, các đợt bùng nổ lưu lượng lớn thường dễ gây quá tải hệ thống, dẫn đến sự cố ngừng dịch vụ ngoài dự kiến. Chuyển lưu lượng sang hạ tầng CDN có độ sẵn sàng cao và khả năng dự phòng, được thiết kế để xử lý lưu lượng web ở nhiều mức khác nhau, sẽ giúp tăng khả năng truy cập cho tài nguyên và nội dung.

Giảm chi phí

Vì việc phân phối nội dung tĩnh thường chiếm phần lớn băng thông sử dụng, việc chuyển các tài nguyên này sang CDN có thể giúp giảm rõ rệt chi phí hạ tầng hàng tháng. Ngoài việc cắt giảm chi phí băng thông, CDN còn giảm tải cho máy chủ gốc, giúp hạ tầng hiện có có thể mở rộng hiệu quả hơn. Cuối cùng, một số nhà cung cấp CDN đưa ra hình thức thanh toán cố định hàng tháng, giúp chuyển chi phí băng thông biến động sang mức chi phí ổn định, dễ dự đoán.

Tăng cường bảo mật

CDN còn được sử dụng phổ biến trong trường hợp giảm thiểu tấn công DDoS. Nhiều nhà cung cấp CDN cung cấp tính năng giám sát và lọc yêu cầu đến máy chủ biên, phân tích lưu lượng web để phát hiện các mẫu đáng ngờ, chặn lưu lượng tấn công độc hại nhưng vẫn cho phép lưu lượng hợp lệ. Các dịch vụ này thường bao gồm nhiều cấp độ bảo vệ DDoS, từ bảo vệ các cuộc tấn công phổ biến ở tầng hạ tầng (OSI layer 3 và 4), đến các biện pháp giảm thiểu nâng cao và giới hạn tốc độ truy cập.

Ngoài ra, hầu hết CDN cho phép cấu hình SSL toàn diện, để mã hóa lưu lượng giữa CDN và người dùng cuối, cũng như giữa CDN và máy chủ gốc, bằng chứng chỉ SSL do CDN cung cấp hoặc chứng chỉ tùy chỉnh.

Lựa chọn giải pháp phù hợp

Nếu điểm nghẽn của chúng ta nằm ở tải CPU trên máy chủ gốc chứ không phải băng thông thì CDN có thể không phải là giải pháp phù hợp nhất. Trong trường hợp này, việc lưu vào bộ nhớ đệm cục bộ bằng các công cụ phổ biến như NGINX hoặc Varnish có thể giảm tải rõ rệt bằng cách phân phối tài nguyên trực tiếp từ bộ nhớ hệ thống.

Trước khi triển khai CDN, các bước tối ưu bổ sung, như rút gọn (minify) và nén các tệp JavaScript và CSS, cũng như bật tính năng nén yêu cầu HTTP của máy chủ web, cũng có thể mang lại tác động đáng chú ý đến thời gian tải trang và mức sử dụng băng thông.

Một công cụ hữu ích để đo và cải thiện tốc độ tải trang là Google PageSpeed Insights. Một công cụ khác cung cấp biểu đồ waterfall về thời gian yêu cầu và phản hồi, kèm theo các gợi ý tối ưu, là Pingdom.

Kết luận

CDN có thể là một giải pháp nhanh chóng và hiệu quả để cải thiện khả năng mở rộng và độ sẵn sàng của website. Bằng cách lưu vào bộ nhớ đệm các tài nguyên tĩnh trên mạng lưới máy chủ được tối ưu hóa và phân tán theo vị trí địa lý, chúng ta có thể giảm mạnh thời gian tải trang và độ trễ cho người dùng cuối. Ngoài ra, CDN còn giúp giảm mạnh mức sử dụng băng thông bằng cách tiếp nhận yêu cầu của người dùng và phản hồi trực tiếp từ bộ nhớ đệm ở máy chủ biên, từ đó giảm chi phí băng thông và hạ tầng.

Với các plugin và sự hỗ trợ từ bên thứ ba cho nhiều framework lớn như WordPress, Drupal, DjangoRuby on Rails, cùng các tính năng bổ sung như giảm thiểu DDoS, SSL toàn diện, giám sát người dùng và nén tài nguyên, CDN là một công cụ mạnh mẽ giúp bảo mật và tối ưu hiệu suất cho các website có lưu lượng truy cập cao.

0 Bình luận

Đăng nhập để thảo luận

Chuyên mục Hướng dẫn

Tổng hợp các bài viết hướng dẫn, nghiên cứu và phân tích chi tiết về kỹ thuật, các xu hướng công nghệ mới nhất dành cho lập trình viên.

Đăng ký nhận bản tin của chúng tôi

Hãy trở thành người nhận được các nội dung hữu ích của CyStack sớm nhất

Xem chính sách của chúng tôi Chính sách bảo mật.

Đăng ký nhận Newsletter

Nhận các nội dung hữu ích mới nhất