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

CDN

Trong bài viết này mình 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. Mình cũng sẽ nói đến một vài dịch vụ CDN phổ biến.

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 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 nó sẽ có dạng https://*.netdna-ssl.com, còn của CDNSun có dạng https://*.r.worldssl.net; 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 tên miền phục vụ CDN khác với tên miền gốc. Ví dụ như trang của mình là ducanhplus.com, nhưng tên miền phục vụ CDN có thể là netdna-ssl.com; đâ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.
  2. Sử dụng chứng chỉ bảo mật miễn phí riêng: đâ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 mình là ducanhplus.com thì tên miền phục vụ cdn của mình có thể là static.ducanhplus.com 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 mình 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óaBướ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 đề.

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 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ỉ.

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ể kéo toàn bộ dữ liệu website của bạn (còn tùy thuộc web bạn nhiều hay ít bài viết, như trang mình hơn 700 bài nó chỉ mất có 5 phút) ra các máy chủ phân tán của nó, 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 cho WordPress giúp bạn tích hợp 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 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 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í, 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, 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: mình 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).

Ả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ó 2 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ư mình đã 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.
  • Máy chủ CDN có vấn đề, nếu chuyện này xảy ra, 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.

Ả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, đâ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ị ả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)
  • 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à 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 thích hợp cho trình duyệt tương ứng

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/2019). 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 mình cũng khá nhiều ảnh, và có khoảng 50 – 60 ngàn lượt xem trên tháng, mình 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 (các ảnh lấy trực tiếp từ thẻ 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.
  • 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.

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

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.

Mình 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 host không sao, tuy nhiên mình 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ì đó mình 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. Mình 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 thường xuyên theo dõi 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ể. 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 mình đang 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ó thiết bị 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 mình chưa mua dùng, gói dùng thử cho phép bạn trải nghiệm đến một tháng. Mình trình bày thế, để bạn nào có điều kiện thì cũng nên dùng, nếu sự 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ả.

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 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. Mình 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:

  • 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.
  • 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: mình đã 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

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

Mình 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à mình 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.

Xem thêm:

Leave a Comment

Your email address will not be published. Required fields are marked *