16/09/2018, 13:11

Sử dụng CDN để tăng tốc độ phân phối nội dung tĩnh

Giới thiệu Các trang web và ứng dụng hiện đại thường phải cung cấp lượng nội dung tĩnh đáng kể cho người dùng cuối. Nội dung này bao gồm hình ảnh, biểu định kiểu, JavaScript và video. Vì các tài sản tĩnh này tăng về số lượng và kích thước, việc sử dụng băng thông tăng lên và thời gian tải trang ...

Giới thiệu

Các trang web và ứng dụng hiện đại thường phải cung cấp lượng nội dung tĩnh đáng kể cho người dùng cuối. Nội dung này bao gồm hình ảnh, biểu định kiểu, JavaScript và video. Vì các tài sản tĩnh này tăng về số lượng và kích thước, việc sử dụng băng thông tăng lên và thời gian tải trang tăng, làm giảm trải nghiệm duyệt web cho người dùng của bạn và giảm khả năng có sẵn của máy chủ.

Để giảm đáng kể thời gian tải trang, cải thiện hiệu suất và giảm chi phí băng thông và cơ sở hạ tầng của bạn, bạn có thể triển khai CDN hoặc content delivery network, để lưu trữ các tài sản này trên một tập hợp các máy chủ phân tán theo địa lý.

Trong hướng dẫn này, chúng tôi sẽ cung cấp tổng quan cấp cao về CDN và cách chúng hoạt động, cũng như các lợi ích mà chúng có thể cung cấp cho các ứng dụng web của bạn.

CDN là gì?

Mạng phân phối nội dung là nhóm máy chủ được phân phối theo địa lý được tối ưu hóa để cung cấp nội dung tĩnh cho người dùng cuối. Nội dung tĩnh này có thể gần như là bất kỳ loại dữ liệu nào, nhưng CDN được sử dụng phổ biến nhất để phân phối các trang web và các tệp liên quan, video và âm thanh trực tuyến và các gói phần mềm lớn.

Diagram of content delivery without a 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 vị trí bao gồm một số cạnh máy chủ lưu trữ nội dung từ _gốc_hoặc máy chủ lưu trữ. Khi người dùng truy cập trang web của bạn và yêu cầu nội dung tĩnh như hình ảnh hoặc tệp JavaScript, yêu cầu của họ sẽ được CDN chuyển đến máy chủ cạnh gần nhất, từ đó nội dung được phân phát. Nếu máy chủ cạnh không có nội dung được lưu trong bộ nhớ cache hoặc tài sản được lưu trong bộ nhớ cache đã hết hạn, CDN sẽ tìm nạp và lưu phiên bản mới nhất từ ​​máy chủ cạnh CDN gần đó hoặc máy chủ gốc của bạn. Nếu cạnh CDN có mục nhập bộ nhớ cache cho nội dung của bạn (xuất hiện phần lớn thời gian nếu trang web của bạn nhận được lưu lượng truy cập vừa phải), nó sẽ trả về bản sao đã lưu vào bộ nhớ cache cho người dùng cuối.

Content Delivery Network (CDN) diagram

Điều này cho phép người dùng phân tán theo địa lý để giảm thiểu số bước nhảy cần thiết để nhận nội dung tĩnh, tìm nạp nội dung trực tiếp từ bộ nhớ cache của cạnh gần đó. Kết quả là giảm độ trễ và mất gói tin đáng kể, thời gian tải trang nhanh hơn và giảm đáng kể tải trên cơ sở hạ tầng gốc của bạn.

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

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

Khi người dùng truy cập trang web của bạn, trước tiên họ nhận được phản hồi từ máy chủ DNS chứa địa chỉ IP của máy chủ web lưu trữ của bạn. Trình duyệt của họ sau đó yêu cầu nội dung trang web, thường bao gồm nhiều tệp tĩnh, chẳng hạn như các trang HTML, bảng định kiểu CSS, mã JavaScript và hình ảnh.

Khi bạn triển khai CDN và tải các tài sản tĩnh này lên máy chủ CDN, bằng cách "đẩy" chúng ra thủ công hoặc có CDN "kéo" nội dung tự động (cả hai cơ chế đều được đề cập trong phần tiếp theo), sau đó bạn hướng dẫn máy chủ web của mình ghi lại các liên kết đến nội dung tĩnh sao cho các liên kết này trỏ tới các tệp được CDN lưu trữ. Nếu bạn đang sử dụng CMS chẳng hạn như WordPress, việc ghi lại liên kết này có thể được triển khai bằng cách sử dụng plugin của bên thứ ba như Trình kích hoạt CDN.

Nhiều CDN cung cấp hỗ trợ cho các miền tùy chỉnh, cho phép bạn tạo bản ghi CNAME bên dưới miền trỏ đến điểm cuối CDN. Khi CDN nhận được yêu cầu người dùng tại điểm cuối này (nằm ở cạnh, gần gũi hơn với người dùng hơn các máy chủ phụ trợ của bạn), nó sẽ chuyển yêu cầu đến điểm hiện diệ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ủ cạnh CDN được thu thập tại điểm trao đổi Internet (IxP), về cơ bản là trung tâm dữ liệu mà các nhà cung cấp dịch vụ Internet (ISP) sử dụng để kết nối mạng của họ. Bộ cân bằng tải bên trong của CDN sau đó định tuyến yêu cầu đến một máy chủ cạnh nằm ở PoP này, sau đó cung cấp nội dung cho người dùng.

Cơ chế lưu bộ nhớ đệm khác nhau giữa các nhà cung cấp CDN, nhưng nhìn chung chúng hoạt động như sau:

  1. Khi CDN nhận được yêu cầu đầu tiên về nội dung tĩnh, chẳng hạn như hình ảnh PNG, nó không có nội dung được lưu trong bộ nhớ cache và phải tìm nạp bản sao của nội dung từ máy chủ cạnh CDN gần đó hoặc chính máy chủ gốc. Điều này được gọi là bộ nhớ cache "bỏ lỡ" và thường có thể được phát hiện bằng cách kiểm tra tiêu đề phản hồi HTTP, có chứa X-Cache: MISS. Yêu cầu ban đầu này sẽ chậm hơn so với yêu cầu trong tương lai vì sau khi hoàn thành yêu cầu này, nội dung sẽ được lưu trong bộ nhớ cache ở cạnh.
  2. Các yêu cầu trong tương lai cho nội dung này (cache "hits"), được định tuyến tới vị trí cạnh này, bây giờ sẽ được phục vụ từ bộ nhớ cache, cho đến khi hết hạn (thường được đặt qua các tiêu đề HTTP). Những phản hồi này sẽ nhanh hơn đáng kể so với yêu cầu ban đầu, làm giảm đáng kể độ trễ cho người dùng và giảm lưu lượng truy cập web vào mạng CDN. Bạn có thể xác minh rằng phản hồi được phục vụ từ bộ nhớ cache CDN bằng cách kiểm tra tiêu đề phản hồi HTTP, tiêu đề này giờ đây sẽ chứa X-Cache: HIT.

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

Trong phần tiếp theo, chúng tôi sẽ giới thiệu hai loại CDN phổ biến: đẩykéo CDN.

Đẩy so với vùng kéo

Hầu hết các nhà cung cấp CDN đều cung cấp hai cách để lưu trữ dữ liệu của bạn: kéo vùng và vùng đẩy.

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

Để sử dụng Vùng đẩy, bạn tải dữ liệu của mình lên một vị trí lưu trữ hoặc nhóm được chỉ định, sau đó CDN sẽ đẩy ra để lưu trữ trên nhóm máy chủ cạnh được phân phối của nó. Khu vực đẩy thường được sử dụng cho các tệp lớn hơn, không thường xuyên thay đổi, như lưu trữ, gói phần mềm, tệp PDF, video và tệp âm thanh.

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

Hầu như bất kỳ trang web nào cũng có thể gặt hái những lợi ích được cung cấp bằng cách triển khai CDN, nhưng nói chung là lý do chính để thực hiện một là giảm tải băng thông từ máy chủ gốc của bạn lên máy chủ CDN và giảm độ trễ cho người dùng được phân phối theo địa lý.

Chúng tôi sẽ đi qua những điều này và một số ưu điểm chính khác được cung cấp bằng cách sử dụng CDN bên dưới.

Tắt nguồn gốc

Nếu bạn đang gần khả năng băng thông trên máy chủ của mình, việc tải xuống các tài sản tĩnh như hình ảnh, video, tệp CSS và JavaScript sẽ giảm đáng kể mức sử dụng băng thông của máy chủ của bạn. Mạng phân phối nội dung được thiết kế và tối ưu hóa để phục vụ nội dung tĩnh và các yêu cầu của khách hàng cho nội dung này sẽ được định tuyến và phục vụ bởi các máy chủ CDN cạnh. Điều này có lợi ích bổ sung là giảm tải trên máy chủ gốc của bạn, khi chúng phân phối dữ liệu này ở tần số thấp hơn nhiều.

Độ trễ thấp hơn cho trải nghiệm người dùng được cải thiện

Nếu cơ sở người dùng của bạn bị phân tán theo địa lý và phần không quan trọng của lưu lượng truy cập đến từ một khu vực địa lý xa xôi, CDN có thể giảm độ trễ bằng cách lưu vào bộ nhớ cache trên các máy chủ cạnh gần người dùng của bạn hơn. Bằng cách giảm khoảng cách giữa người dùng và nội dung tĩnh, bạn có thể cung cấp nội dung nhanh hơn cho người dùng của mình và cải thiện trải nghiệm của họ bằng cách tăng tốc độ tải trang.

Những lợi ích này phức tạp cho các trang web phục vụ nội dung video chủ yếu băng thông, nơi có thời gian trễ cao và thời gian tải chậm ảnh hưởng trực tiếp hơn đến trải nghiệm người dùng và tương tác nội dung.

Quản lý Spikes giao thông và tránh thời gian ngừng hoạt động

CDN cho phép bạn xử lý các lưu lượng lớn và các vụ nổ bằng các yêu cầu cân bằng tải trên một mạng lớn, phân tán các máy chủ cạnh. Bằng cách tải xuống và lưu vào bộ nhớ cache nội dung tĩnh trên mạng phân phối, bạn có thể chứa số lượng người dùng đồng thời lớn hơn với cơ sở hạ tầng hiện có của mình.

Đối với các trang web sử dụng một máy chủ gốc duy nhất, những đột biến lưu lượng truy cập lớn này thường có thể áp đảo hệ thống, gây ra mất điện không mong muốn và thời gian ngừng hoạt động. Chuyển lưu lượng truy cập vào cơ sở hạ tầng CDN có sẵn và dự phòng cao, được thiết kế để xử lý các mức lưu lượng truy cập web thay đổi, có thể làm tăng tính khả dụng của nội dung và nội dung của bạn.

Giảm chi phí

Khi phân phối nội dung tĩnh thường chiếm phần lớn việc sử dụng băng thông của bạn, việc tải các nội dung này lên mạng phân phối nội dung có thể giảm đáng kể chi tiêu cơ sở hạ tầng hàng tháng của bạn. Ngoài việc giảm chi phí băng thông, CDN có thể giảm chi phí máy chủ bằng cách giảm tải trên máy chủ gốc, cho phép cơ sở hạ tầng hiện có của bạn mở rộng. Cuối cùng, một số nhà cung cấp CDN cung cấp thanh toán giá cố định hàng tháng, cho phép bạn chuyển đổi mức sử dụng băng thông hàng tháng biến đổi thành chi tiêu định kỳ có thể dự đoán được ổn định.

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

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

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

Chọn giải pháp tốt nhất

Nếu nút cổ chai của bạn là tải CPU trên máy chủ gốc và không phải băng thông, thì CDN có thể không phải là giải pháp thích hợp nhất. Trong trường hợp này, bộ nhớ đệm cục bộ sử dụng bộ đệm phổ biến như NGINX hoặc Varnish có thể làm giảm tải đáng kể bằng cách phân phát nội dung từ bộ nhớ hệ thống.

Trước khi triển khai CDN, các bước tối ưu hóa bổ sung - như giảm thiểu và nén các tệp JavaScript và CSS và bật tính năng nén yêu cầu HTTP máy chủ web - cũng có thể có tác động đáng kể đế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 tốc độ tải trang của bạn và cải thiện nó là của Google PageSpeed ​​Insights. Một công cụ hữu ích khác cung cấp phân tích thác nước về yêu cầu và thời gian phản hồi cũng như tối ưu hóa được đề xuất là Pingdom.

Phần kết luận

Mạng phân phối nội dung 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à tính khả dụng của các trang web của bạn. Bằng cách lưu vào bộ nhớ đệm các tài sản tĩnh trên mạng phân phối địa lý của các máy chủ được tối ưu hóa, bạn có thể giảm đáng kể thời gian tải trang và độ trễ cho người dùng cuối. Ngoài ra, CDN cho phép bạn giảm đáng kể mức sử dụng băng thông của mình bằng cách hấp thụ các yêu cầu của người dùng và phản hồi từ bộ đệm ở cạnh, do đó làm giảm chi phí băng thông và cơ sở hạ tầng của bạn.

Với các plugin và hỗ trợ của bên thứ ba cho các khung chính như WordPress, Drupal, Django và Ruby on Rails, cũng như các tính năng bổ sung như giảm thiểu DDoS, SSL đầy đủ, giám sát người dùng và nén nội dung, CDN có thể là công cụ hữu hiệu để bảo mật và tối ưu hóa các trang web có lưu lượng truy cập cao.

Bài liên quan

Một số tips để tăng tốc độ Rspec test in Rails

Với số lượng test case lớn bạn có thể cảm nhận được là việc chạy test case đó nhanh hay chậm. Tốc độ của Rspec test có thể ảnh hưởng bởi những vấn đề như sau: Việc sử dụng before(:each) và before(:all) before(:each)được gọi trong mọi test case. Nếu code trong before(:each) chậm sẽ làm cho mỗi ...

Trần Trung Dũng viết 18 giờ trước

Tuyệt kỹ: Sử dụng cache để tăng tốc hệ thống

Bài viết của tác giả: Thanh Tú Phạm Bạn đã bao giờ sử dụng cache để tăng tốc hệ thống? Nếu dùng redis nó đã cung cấp cho bạn những cấu trúc cơ bản như hash, string, list, set, zset. Tuy nhiên bạn sẽ gặp 2 vấn đề, 1 là invalidate cache ko đơn giản, nhất là phải tính đến việc ...

Tạ Quốc Bảo viết 00:11 ngày 13/01/2019

Cache để tăng tốc độ truy cập cho web

Thường nó giúp tốc độ trang web tăng lên ngay lập tức vài chục lần. Trước khi nghĩ đến hạ sách load balance, thread pool, DB connection pool, vertical scaling, horizontal scaling và những thuật ngữ rất kêu khác, hãy nghĩ đến cache. Bộ nhớ đệm có tác dụng gì đối với Website? Xóa bộ nhớ đệm có ảnh ...

Son Dong viết 23:33 ngày 26/10/2018

Nén Gzip để tăng tốc độ tải website

Đa số các trình duyệt thông dụng hiện nay đều có khả năng giải nén những trang web đã được nén lại, để tiết kiệm băng thông và giúp thời gian tải website nhanh hơn. Mặc dù tính năng này đã được đưa ra một thời gian, nhưng ít ai chú ý hoặc biết đến nó. Đa số các trình ...

Tạ Quốc Bảo viết 18:06 ngày 02/10/2018

Sử dụng CDN để tăng tốc độ phân phối nội dung tĩnh

Giới thiệu Các trang web và ứng dụng hiện đại thường phải cung cấp lượng nội dung tĩnh đáng kể cho người dùng cuối. Nội dung này bao gồm hình ảnh, biểu định kiểu, JavaScript và video. Vì các tài sản tĩnh này tăng về số lượng và kích thước, việc sử dụng băng thông tăng lên và thời gian tải trang ...

Trần Trung Dũng viết 13:11 ngày 16/09/2018
0