Categories CDN

Một số rắc rối thường gặp phải khi lần đầu sử dụng CDN để tăng tốc web: một số cái sẽ ảnh hưởng nghiêm trọng nếu bạn không chủ động sửa chữa

CDN

PS: phần lớn các trải nghiệm rắc rối liên quan đến dịch vụ CDN sẽ được khắc phục rất dễ dàng nếu bạn sử dụng dịch vụ CDN chất lượng cao, tập trung vào tính tiện dụng, chẳng hạn như BunnyCDN.

Trong bài viết này tôi trình bày một số rắc rối mà chúng ta có thể gặp phải khi lần đầu sử dụng dịch vụ CDN (mạng phân tán nội dung) để tăng tốc website, chủ yếu cho người dùng WordPress, nhưng có thể có ích cả cho người dùng hệ quản trị nội dung khác. Tôi cũng sẽ nói đến một vài dịch vụ CDN phổ biến.


1. Vấn đề http và https

Nếu trang web của bạn sử dụng https, thì CDN của bạn cũng phải dùng https, nếu không website sẽ không hoạt động bình thường được. Các dịch vụ CDN sẽ cho phép bạn cài đặt chứng chỉ bảo mật cho tên miền CDN, có 2 cách cơ bản và không tốn kém đó là:

  1. Sử dụng chứng chỉ bảo mật chung/chia sẻ (Shared SSL): đây là cách làm đơn giản nhất, tên miền phục vụ CDN sẽ có SSL chỉ thông qua một thao tác, ví dụ của MaxCDN (StackPath) nó sẽ có dạng https://*.netdna-ssl.com, của CDNSun có dạng https://*.r.worldssl.net; còn với KeyCDN nó có dạng https://*.kxcdn.com, trong đó * là tên mà bạn đặt cho dịch vụ CDN của bạn. Nhược điểm của cách này là tên miền phục vụ CDN khác với tên miền gốc. Ví dụ như trang của tôi là speed.family, nhưng tên miền phục vụ CDN có thể là r.worldssl.net; đây là điều có thể không tốt cho SEO, ngoài ra việc này còn dẫn đến chuyện địa chỉ tài nguyên của bạn thường xuyên thay đổi, khi bạn xóa Pull cũ để kéo Pull mới hoặc khi bạn đổi nhà cung cấp dịch vụ CDN. (Tuy nhiên một thời gian sau tôi phát hiện ra là việc sử dụng tên miền mặc định của dịch vụ CDN có thể không làm ảnh hưởng gì đến SEO cả, bạn nên tham khảo ở bài viết này để biết thêm thông tin: https://kiencang.net/thiet-lap-ten-mien-tuy-chinh-cdn/ Tuy vậy, xét cho cùng sử dụng subdomain tên miền của chính website để làm CDN bao giờ cũng là lựa chọn tốt hơn về nhiều mặt).
  2. Sử dụng chứng chỉ bảo mật miễn phí riêng do bạn tự thiết lập: đây là cách mất công hơn một chút, nhưng bạn sẽ có tên miền phục vụ CDN có dạng là subdomain của bạn. Ví dụ tên miền của tôi là kiencang.net thì tên miền phục vụ CDN của tôi có thể là cdn.kiencang.net chứ không phải sử dụng tên miền ngoài. Không có bằng chứng chắc chắn, nhưng cách này có vẻ tốt cho SEO hơn, và đây cũng là cách tôi thấy khá nhiều trang sử dụng CDN áp dụng. Để có được tên miền CDN bảo mật dạng subdomain dùng riêng, bạn cần hai điều kiện. Thứ nhất bạn cần có chứng chỉ SSL, là bộ khóa chứng chỉ, bạn có thể mua, hoặc có miễn phí thông qua những trang như https://www.sslforfree.com/. Chứng chỉ này sau đó sẽ được nhập vào hệ thống CDN để nó thiết lập SSL cho tên miền phục vụ CDN với bộ đôi như hình dưới đâythông tin xác thực và khóa
  3. Bước thứ hai là bạn phải trỏ tên miền CDN subdomain dùng riêng về địa chỉ pull gốc nơi lưu trữ dữ liệu phân tán. Để làm điều này bạn chỉ cần vào chỉnh sửa DNS của tên miền, sử dụng bản ghi CNAME, nó sẽ trông giống thế này:trỏ về CDN tên miền riêng

Cái bộ chứng chỉ SSL để bạn nhập vào trông nó khá lằng nhằng như bên dưới, bộ dưới đây chỉ là ví dụ, của bạn sẽ KHÁC hoàn toàn nhé:

-----BEGIN CERTIFICATE----- qJ6A0HRD4auyaF3CMxETMNchHwQGdMBSe0BFIzRXanRWa XBCdl5mclRnbJhBDKQQVDYwHwESMlRXY0NVLl12bTpADIQQVDYQEwMRMVFkATYAB VNgBJAzCxUEMAUQBBEQD3bISGqSCG0AMIiAZAIiDIAv IM== -----END CERTIFICATE-----
-----BEGIN PRIVATE KEY----- Wbo6CjdgoKVCKGKD+iZGmwV/zVhCSWt8ujcTqyQ2 tMefgCt7XYjCjg7OehHHAfdjASTg9H7vv8iktK/glIno2yRxNtbZyPgEffVWVE3zrB1tA/fn kOFHmdqSpXvgJEWvhCuxE9Q2h0WhPKyMpw9yCSw7dFR -----END PRIVATE KEY-----

Thường thì chứng chỉ miễn phí SSL sau 3 tháng bạn sẽ cần chứng chỉ mới, do vậy bạn cần phải nhớ thời hạn để cập nhật. Chốt lại quả thực cách này có thể có ưu điểm về SEO, nhưng cũng có phiền phức là phải để ý, nếu không khi quá hạn website sẽ gặp vấn đề.

Cập nhật: Tuy nhiên may mắn là không phải dịch vụ CDN nào cũng yêu cầu bạn phải nhớ thời hạn và cập nhật, chẳng hạn như KeyCDN hoặc BunnyCDN, BizFly tạo sẵn chứng chỉ SSL miễn phí và tự động cập nhật. Ngược lại CDNSun thì yêu cầu bạn phải nhớ để tự gia hạn cho chứng chỉ.


2. Tích hợp dịch vụ CDN vào website

Thường thì chỉ mất từ 5 – 10 phút là dịch vụ CDN có thể thiết lập các cài đặt ban đầu, và bạn có thể bắt đầu sử dụng được rồi. Để kiểm tra xem CDN đã hoạt động hay chưa, bạn chỉ cần thay địa chỉ một ảnh gốc bằng một ảnh trên CDN, nếu nó hiện ra là ổn. Ví dụ:

CDN-da-hoat-dong

Có khá nhiều plugin WordPress giúp bạn tích hợp CDN dễ dàng vào website. Việc tích hợp này sẽ giúp trang thay thế các đường dẫn cũ đang trỏ về hosting gốc chuyển sang trỏ về host phục vụ CDN (thay thế các đường dẫn, bao gồm ảnh, CSS, JS và các nội dung tĩnh khác, kể cả file âm thanh, video nếu có).

Một số plugin làm việc này tốt và thao tác đơn giản chủ yếu là các plugin dùng để tạo cache (vốn cũng hay được dùng để tăng tốc wordpress) như:

Bạn chỉ cần vào khu vực CDN của từng plugin và paste địa chỉ tên miền phục vụ CDN vào là được. Hướng dẫn chi tiết hơn bạn có thể tham khảo thêm trên mạng (thường thì trong phần cài đặt của từng plugin, nó cũng có hướng dẫn bạn cách làm rồi).

Nếu bạn không dùng các plugin cache ở trên hoặc nếu plugin cache của bạn không có tính năng CDN bạn có thể dùng plugin chuyên để tích hợp CDN vào website là:

  • CDN Enabler (miễn phí) – đây là plugin đơn giản do KeyCDN phát triển

Plugin không nên dùng để làm việc này là:

  • WP Fastest cache phiên bản miễn phí (bạn có thể xem thêm cách sử dụng ở đây), vì bản này chỉ cho tạo cache cho bản desktop nên nếu theme của bạn có riêng phiên bản di động thì nó sẽ không có nội dung CDN! (lưu ý: các giao diện hiện giờ hầu như là giao diện đáp ứng, không cần thiết kế riêng trên di động, nhưng một số plugin can thiệp vào chuyện này nên ngay cả theme chỉ dùng một giao diện, plugin có thể ảnh hưởng và tạo ra 2 phiên bản khác nhau cho desktop và di động).

Để kiểm tra bạn đã tích hợp thành công hay chưa, bạn cần thoát khỏi WordPress, trình duyệt sau đó phải xóa lịch sử duyệt web (hoặc xem trên trình duyệt ẩn danh), rồi vào lại trang của bạn. Trên trình duyệt bạn di chuột đến ảnh nào đó trên trang, rồi chuột phải mở hình ảnh trong tab mới, nếu địa chỉ ảnh giờ là địa chỉ tên miền phục vụ CDN nghĩa là bạn đã thay thế thành công.

P/S: tôi lần đầu loay hoay cả tiếng vì tưởng chưa tích hợp được, nhưng hóa ra là do chưa xóa lịch sử duyệt web trên Chrome nên nó vẫn tải ảnh từ địa chỉ cũ (tài nguyên lưu ở bộ nhớ đệm trên trình duyệt).


3. Ảnh không tải được trên tất cả các trình duyệt

Nếu bạn kiểm tra ảnh không tải được trên cả 3 trình duyệt Chrome, FireFox và Safari thì có hai khả năng:

  • Nguyên nhân đơn giản nhất là có thể máy chủ CDN chưa kéo hết được nội dung về (thực tế ít khi xảy ra) hoặc việc kết nối giữa địa chỉ pull gốc và địa chỉ subdomain dùng riêng của bạn chưa thành công (có khả năng xảy ra nhiều hơn, điều này gặp phải khi máy chủ DNS của bạn cập nhật chậm, hoặc bạn thao tác nhầm gì đó ở bản ghi CNAME). Cách đơn giản nhất để kiểm tra như tôi đã nói ở trên là thử vào một ảnh thông qua tên miền sudomain dùng riêng xem có được không là biết liền. Bạn nên sử dụng Cloudflare để cập nhật CNAME nhanh hơn;
  • Máy chủ CDN có vấn đề, nếu chuyện này xảy ra, trang web thường cũng không truy cập được, hoặc bố cục web bị phá vỡ hoàn toàn. Chuyện này rất hiếm khi xảy ra, vì các máy chủ làm dịch vụ CDN đều rất mạnh và có khả năng thay thế cho nhau. Dù vậy không có gì 100%, khi có sự cố này bạn sẽ phải đợi vấn đề khắc phục, hoặc nếu vẫn còn vào được trang quản trị thì tạm thời không dùng CDN nữa mà dùng tài nguyên lưu ở hosting gốc;
  • Chức năng lazy load để tải chậm ảnh (một tính năng dùng để tăng tốc website, rất hay được tích hợp vào các plugin tạo cache hoặc các plugin giảm dung lượng ảnh) có thể là nguyên nhân, bạn thử tắt nó đi, sau đó xóa cache (clear cache), xóa lịch sử duyệt web rồi tải lại xem có tải được ảnh nữa không.

4. Ảnh không tải được trên một số trình duyệt

Ví dụ ảnh tải được trên Chrome nhưng không tải được trên Safari, sau khi xóa hết lịch sử duyệt web, rồi kiểm tra lại, nếu tình trạng này vẫn diễn ra thì có thể vấn đề này liên quan đến định dạng ảnh WebP, cho dù đây là tình huống khá hiếm gặp.

Vấn đề trên xảy ra khi website của bạn hiện đang sử dụng plugin nào đó để chuyển ảnh sang định dạng WebP nhằm tăng tốc độ tải trang (ảnh WebP nhẹ hơn JPGPNG khá nhiều, chất lượng gần như tương đương) và dùng mime type để ẩn định dạng thực webp.

Vì vậy khi dịch vụ CDN kéo dữ liệu ảnh về máy chủ của nó thì nó kéo ảnh WebP về (trong khi đuôi vẫn là JPG, và PNG, nhưng về bản chất đây là ảnh WebP). Và khi phân phối ảnh này cho người dùng nó sẽ là ảnh webp ẩn dưới đuôi jpg hoặc png, kết quả là các trình duyệt không hỗ trợ webp sẽ không hiển thị được ảnh. Để khắc phục bạn chỉ cần bỏ tính năng chuyển ảnh sang WebP, và bỏ đoạn mã chuyển hướng ở file .htaccess liên quan đến WebP là được.

Để sử dụng được WebP thông qua CDN bạn cần 2 điều kiện:

  • Dịch vụ CDN có hỗ trợ webp (hiện hầu hết các dịch vụ đều làm được điều này) chẳng hạn BunnyCDN, Cloudflare bản pro. Đây là cách tiện lợi nhất để sử dụng ảnh WebP, tuy nhiên CDN thì thường có phí, và không với mọi trang web bạn đều có khả năng chi trả;
  • Bạn sử dụng biện pháp nhận dạng khác để sử dụng webp trên trình duyệt thích hợp, một ứng viên thích hợp để làm điều này là plugin Cache Enabler , vì nó có khả năng tạo 2 phiên bản cache khác nhau, một bản là ảnh webp, bản còn lại là định dạng ảnh cũ và phân phối bản cache phù hợp cho trình duyệt tương ứng.

5. Vấn đề tiền dung lượng CDN

Dịch vụ CDN nói chung có 2 cách tính tiền cước:

  • Cố định hàng tháng, ví dụ 10 USD/tháng như ở Stackpath CDN, hoặc 20 USD/tháng ở Cloudflare (gói pro) (thông tin về giá vào tháng 1/2021). Bạn dùng dung lượng bao nhiêu cũng được, không lo tốn tiền;
  • Gói tính theo dung lượng, thậm chí đôi khi cả tính thêm phí theo số lượng request kết nối, thường các dịch vụ CDN truyền thống hay áp dụng cách này, ví dụ như KeyCDN, CDNSun, CDN77

Với chi phí CDN tính theo dung lượng ở Việt Nam (thuộc nhóm có giá cao so với khu vực khác) dao động từ 0,1 đến 0,15 USD/GB thì như website của tôi cũng khá nhiều ảnh, và có khoảng 50 – 60 ngàn lượt xem trên tháng, tôi thấy thống kê tốn khoảng 30 – 50 GB thì chi phí sẽ rơi tầm 4 đến 7,5 USD/tháng. Như thế là chấp nhận được.

Tuy nhiên nếu bạn nào gặp vấn đề chi phí dung lượng CDN cao bất thường thì có thể có 3 nguyên nhân:

  • Lưu lượng truy cập website cao bao giờ cũng kéo theo tốn dung lượng truyền tải. Nếu nguyên nhân tốn dung lượng là vì số người vào web cao thì nên vui hơn là buồn. Bạn có thể chuyển sang các dịch vụ tính hàng tháng để giải quyết vấn đề này. Ngoài ra nếu mục đích CDN của bạn chỉ là phòng tránh đứt cáp ở Việt Nam, thế thì vào những tháng bình thường bạn không cần sử dụng CDN nữa, các dịch vụ tính theo dung lượng thường cho phép lưu số tiền nhập vào khoảng 1 năm, theo đó hàng tháng bạn không dùng cũng không sao, số tiền chuyển sang tháng kế tiếp, hết 1 năm bạn không dùng mới bị trừ hết. Bạn nên xem chính sách thanh toán cụ thể của từng nhà cung cấp để đưa ra quyết định tối ưu nhất;
  • Nếu lượng truy cập vào web không cao mà dung lượng truyền dữ liệu lại tốn thì nguyên nhân đôi khi là do các ảnh quá lớn trên website, ngoài ra bạn nên kiểm tra xem có phải bạn đặt các file âm thanh, nhạc hay thậm chí là video nặng trên host web không? 10 bức ảnh dung lượng lớn có thể có dung lượng 50 MB (chẳng hạn các ảnh lấy trực tiếp từ thẻ nhớ máy ảnh đưa lên web), tải 20 lần đã xấp xỉ 1GB rồi; 1 file nhạc trung bình cũng có thể có dung lượng đến 5MB, nghe 100 lần cũng tốn đến 0,5GB; video thì khỏi nói, vài phút cũng có thể tốn hàng 100MB. Nếu đúng, bạn cần loại bỏ vấn đề này bằng cách cho video, âm thanh qua lưu trữ ở bên thứ 3 như YouTube, SoundCloud, còn ảnh cần giảm dung lượng trước khi up lên host hoặc sử dụng plugin tối ưu hóa ảnh;
  • Có thể trang nào đó bên ngoài sử dụng ảnh trên website của bạn, thường là do copy bài viết, nếu bạn thấy lưu lượng bị lấy quá lớn có thể sử dụng giải pháp chống hotlink, khi đó các website bên ngoài sẽ không sử dụng được tài nguyên CDN. Thường thì nhiều dịch vụ CDN có sẵn tính năng này trên ứng dụng của họ.

6. Dịch vụ CDN gián đoạn

[Cập nhật: ở thời điểm hiện tại các dịch vụ CDN có uptime lên tới 100% không phải là hiếm vì họ có nhiều biện pháp chuyển đổi để nếu không may một cụm máy chủ gặp sự cố thì lập tức có cụm máy chủ khác gần đó thay thế. Ngoài ra các dịch vụ CDN cũng rất trung thực trong việc tự theo dõi uptime của chính họ, nên giờ vấn đề bạn chủ động theo dõi uptime của dịch vụ CDN có lẽ không cần thiết nữa. Tuy nhiên theo dõi uptime của hosting thì vẫn cần, vì độ ổn định của hosting không được cao như vậy].

Khi chúng ta sử dụng CDN, khả năng website bị gián đoạn hoặc chậm bất thường sẽ tăng lên. Vì giờ nguy cơ gián đoạn/chậm web = nguy cơ gián đoạn/chậm hosting + nguy cơ gián đoạn/chậm CDN.

Tôi từng có kinh nghiệm xấu với MaxCDN với PoP ở Singapore khi bị downtime (gián đoạn) mấy lần trong khi hosting gốc thì không làm sao, tuy nhiên tôi nghĩ đó chỉ là tính thời điểm, có thể khi đó dịch vụ ở Sing chưa ổn định hẳn mà thôi. MaxCDN về sau thuộc về (hoặc sát nhập gì đó tôi cũng không rõ) StackPath, và thuộc nhóm các công ty có chất lượng CDN hàng đầu hiện nay và giá cả rất cạnh tranh (hồi xưa MaxCDN có giá khá đắt).

Đa số các dịch vụ CDN đều rất ổn định, vì bản chất của nó là để góp phần tăng tốc và duy trì tính liền mạch của người dùng web. Tôi từng dùng KeyCDN, CDNSun, Cloudflare thì không gặp vấn đề downtime đáng kể nào. Tuy nhiên bạn vẫn phải theo dõi uptime của trang web sử dụng CDN để đảm bảo bất cứ vấn đề gì xảy ra bạn cũng nắm bắt được sớm nhất có thể- ít nhất là trên các website quan trọng. Cũng như đánh giá được tổng quan chất lượng, để chuyển đổi sang dịch vụ khác khi cần.

Cách kiểm tra uptime (thời gian dịch vụ web liền mạch, không bị gián đoạn) hiện có nhiều ứng dụng rất hấp dẫn, trong đó có nhiều cái miễn phí.

Hiện tôi dùng sản phẩm miễn phí freshping, ưu điểm của nó là kiểm tra liên tục dịch vụ mỗi phút một lần, các dịch vụ miễn phí khác như uptimerobot cũng hay, nhưng tần suất thấp hơn, phải 5 phút mới kiểm tra một lần.

Tuy nhiên thì cả 2 dịch vụ trên chỉ có các máy chủ kiểm tra nằm ngoài Việt Nam, nên thực tế nó sẽ không kiểm tra được dịch vụ CDN của bạn tại Việt Nam có liền mạch hay không, vì máy chủ ở nước ngoài nó sẽ chỉ kiểm tra được tính liền mạch của CDN của các PoP gần đó nhất, chứ không phải ở PoP tại Việt Nam. Có một cách tạm dùng được là bạn sử dụng IP của máy chủ CDN tại Việt Nam rồi dùng freshping để kiểm tra, tuy nhiên cách này không hoàn toàn chính xác, vì ở đây chúng ta chỉ biết được cụm máy chủ có chứa CDN của ta hoạt động, mà không dám chắc được địa chỉ CDN của mình sống.

Duy nhất có dịch vụ kiểm tra uptime của site24x7 (của Zoho) là có máy chủ kiểm tra đặt tại Hà Nội, do vậy sử dụng dịch vụ ở đây sẽ chính xác nhất, nhưng bạn phải sử dụng bản có phí. Giá rẻ nhất là 10 USD, cũng xót tiền nên tôi chưa mua dùng, gói dùng thử cho phép bạn trải nghiệm đến một tháng. Tôi trình bày thế, để bạn nào có điều kiện thì cũng nên dùng, nếu nguy cơ xảy ra gián đoạn dịch vụ đáng giá hơn 10 USD thì không có lý do gì mà chúng ta không dùng cả.


7. Trùng lặp nội dung

Bản chất của CDN là để tăng tốc và điều đó có lợi cho SEO, nhưng để tăng tốc, các dịch vụ CDN truyền thống buộc phải sao lưu dữ liệu gốc của bạn trên một địa chỉ khác với địa chỉ tên miền ban đầu (ngay cả khi bạn dùng subdomain của bạn để làm địa chỉ CDN thì nó vẫn được xem là địa chỉ khác) và điều này có thể dẫn đến trùng lặp nội dung và ảnh hưởng SEO tương đối nghiêm trọng.

Khắc phục hiện tượng này tương đối khó, nhưng sự khó khăn của nó nằm ở chỗ dễ gây nhầm lẫn do có nhiều hiểu lầm, cũng như sự không rõ ràng của các công cụ tìm kiếm lớn về cách họ làm việc với các thẻ thông báo nội dung trùng lặp, kèm theo những hướng dẫn cũng có phần lẫn lộn của chính các dịch vụ cung cấp CDN. Tôi sẽ viết một bài viết khác để đào sâu câu chuyện này. Nhưng tạm thời có một số ngộ nhận phổ biến sau mà bạn không nên làm:

  • Sai lầm 1: Sử dụng robots.txt để chặn tất cả các bọ tìm kiếm lập chỉ mục nội dung CDN;
  • Sai lầm 2: Hoặc cho bọ tìm kiếm lập chỉ mục nội dung CDN nhưng lại không có bất kỳ điều chỉnh nào khác.

Cập nhật: Tôi đã hoàn thành bài viết về chống trùng lặp nội dung và tránh hiện tượng ảnh không được index khi sử dụng CDN


8. Các dịch vụ CDN trong nước thì thế nào?

Tôi chưa dùng thử dịch vụ CDN trong nước nên cũng không rõ, tuy nhiên một số CDN chất lượng nhất mà tôi biết có khách hàng mục tiêu chủ yếu là các website rất lớn (như các trang tin tức hàng đầu, trang thương mại điện tử lớn). Dịch vụ CDN cho nhóm khách hàng nhỏ chỉ có khả năng chi tiêu dưới 200 ngàn/tháng không có nhiều.

Cập nhật: lần đầu tiên, tôi dùng dịch vụ CDN trong nước có tên BizFly, họ có chất lượng ổn, bạn có thể tham khảo đánh giá ở đây: speed.family/cdn-bizflycloud/

Xem thêm:

Back to Top