CDN là cái gì? CDN tăng tốc độ tải của hệ thống như thế nào?

Hôm nay, chúng ta quay lại tìm hiểu các khái niệm technical hay ho tiếp nhé!

Trong bài này, chúng ta nói về một thiết kế rất đơn giản nhưng lại vô cùng hệ quả. Thiết kế này được rất nhiều ông lớn sử dụng để đảm bảo hệ thống hoạt động nhanh, ổn định cho toàn bộ người dùng trên thế giới.

Thứ mà chúng ta sẽ nói đến trong bài được gọi là hệ thống CDN (Content Delivery Network).

CDN (Content Delivery Network) là cái gì?

CDN có thể hiểu là một hệ thống các server được đặt rải rác ở nhiều nơi, nhằm lưu trữ và cung cấp dữ liệu cho người dùng.

Để hiểu cách CDN hoạt động, ta có thể xem dữ liệu là hàng hóa, server là kho hàng.

  • Với cách thiết kế thông thường, ta sẽ có một server chính rất mạnh (origin server). Toàn bộ người dùng sẽ connect tới server này để lấy dữ liệu.
  • Cách này cũng giống như là Thế Giới Di Động có một cái kho thật bự ở Hồ Chí Minh. Khi có người mua, TGDD sẽ ship hàng từ HCM đi toàn quốc. (Nôm na thôi chứ chắc nó có nhiều kho á)
Toàn bộ người dùng kết nối tới Origin server để lấy dữ liệu. Càng xa càng chậm

 

  • Với CDN, ta vẫn có 1 server chính (origin server), 1 hệ thống các server phụ chứa dữ liệu (edge server). Những file tĩnh như ảnh, video, CSS, JS sẽ được lưu trữ tại các CDN này.
  • Tương tự như CoopMart có rất nhiều kho kiêm siêu thị lớn ở mỗi quận, mỗi thành phố. Khi có người mua, nhân viên CoopMart sẽ mang hàng từ siêu thị gần nhất đến nhà.
  • Với CDN, thay vì kết nối trực tiếp tới server chính, client sẽ kết nối tới server gần nhất để lấy dữ liệu, cải thiện tốc độ tải.
Với CDN, người dùng kết nối tới edge server gần nhất để lấy dữ liệu

CDN tăng tốc hệ thống như thế nào?

Đứng từ góc độ của người ship hàng, ta sẽ dễ dàng hiểu được tại sao CDN có thể tăng tốc độ tải cho hệ thống:

  • Giả sử bạn đang ở Hà Nội, mua đồ của TGDD, món đồ phải đi một quảng khá xa tận vài ngày, chuyển từ Hồ Chí Minh ra tận Hà Nội để đến tay bạn.
  • Thế nhưng, nếu bạn muốn mua bó rau của CoopMart, nhân viên sẽ đem bó rau từ siêu thị gần bạn nhất, đưa bác Grab cầm qua, bạn nhận được hàng trong vòng vài giờ.

Địa điểm càng xa, hàng ship càng chậm. Tốc độ truyền dữ liệu cũng vậy! Tín hiệu điện cũng giống như hàng hóa, cũng phải di chuyển qua dây mạng hoặc cáp quang, di chuyển qua server này server nọ.

Mạng nhanh hay chậm, không quan trọng bằng việc server ở xa hay gần.

Tốc độ tải trang có thể được tóm tắt một câu là “nhất cự lý, nhì cường độ”. Kết nối tới con server “ghẻ” ở VN vẫn nhanh hơn server “xịn” ở Mĩ, đơn giản là vì nó gần hơn, tín hiệu được truyền đi ở khoảng cách ngắn hơn.

Đó là lý do các ông lớn đặt đata center tại nhiều nơi. Các cloud provider như AWS, Azure cũng đặt máy chủ của mình tại mười mấy vùng lãnh thổ.

Những lợi ích khác của CDN

Không chỉ giúp tăng tốc độ tải của hệ thống, CDN còn mang lại nhiều lợi ích như sau:

  • Tăng bảo mật: Ta có thể cài đặt SSL edge server trong CDN để tăng tính bảo mật cho hệ thống.
  • Chống DDOS: Một số CDN provider như Cloudflare còn đi kèm luôn dịch vụ chống DDOS. Các CDN này có khả năng chịu tải cao, có sẵn bộ lọc để chống DDOS trước khi những request này tới được server chính.
  • Caching, tiết kiệm băng thông: Thông thường, người ta lưu trữ những file tĩnh như ảnh, css … trên CDN. Tuy nhiên, một số CDN có thể dùng để cache kết quả từ server (dynamic caching).
  • Thay vì truy cập và lấy dữ liệu đến server chính (origin server), người dùng lấy dữ liệu từ cache của CDN, nhanh và tiết kiệm băng thông hơn nhiều.
  • Tăng tính ổn định của hệ thống: Khi hệ thống chỉ hoạt động dựa trên 1 server, nếu server đó tèo đồng nghĩa với toàn bộ hệ thống di tong.
  • Với CDN, ta có nhiều server nên nếu một server nào đó có bị sập, người dùng vẫn có thể truy cập được dữ liệu trên server khác của hệ thống CDN.

CDN được áp dụng bởi rất nhiều ông lớn như Google, Amazon, Facebook. Bản thân Netflix còn tự xây dựng một hệ thống CDN mang tên OpenConnect, với server trên toàn thế giới để phục vụ nhu cầu phim ảnh của bà con.

Mạng lưới CDN của Netflix

Kết

Thật ra CDN cũng không phải là một khái niệm mới lạ gì, mà đã được áp dụng từ rất lâu. Nếu bạn từng copy url của jQuery hoặc bootstrap bỏ vào HTML, bạn đã sử dụng CDN của Google mà không biết đấy.

Nếu muốn thử áp dụng CDN cho hệ thống hiện tại, các bạn có thể tìm hiểu về Cloudflare. Hoặc các bạn có thể upload file ảnh/css lên Azure Storage hoặc Amazon S3, sau đó nghịch ngợm AzureCDN hoặc Amazon Cloudfront nhé.

Nếu bạn nào có hứng thú về chủ đề web performancesystem architecture, muốn đọc những bài viết như thế này thì cứ để lại comment nhe. Nếu nhiều người ủng hộ mình sẽ viết tiếp nha!

Link tham khảo

10 thoughts on “CDN là cái gì? CDN tăng tốc độ tải của hệ thống như thế nào?”

  1. Hay và dễ hiểu. A viết bài giới thiệu về DDOS và hệ thống đê :v
    Thánh-Khoa (đùa đó) :v

    Like

  2. Mạng nhanh hay chậm, không quan trọng bằng việc server ở xa hay gần.
    cái này cứ sao sao ấy

    Like

  3. Hi anh, cảm ơn anh đã chia sẽ bài viết. Em có chổ này không hiểu anh giải thích giúp e với ạ: ” Tốc độ load nhanh hay chậm thì dựa vào đâu ( Routing, cache hay yếu tố nào khác ) và làm sao biết được NCC nào là tốt nếu không dùng thử ạ ?” . Cảm ơn anh.

    Like

  4. Xin chào anh Hoàng,
    Em có một số thắc mắc về CDN mong anh giải đáp ạ.
    Những file tĩnh sẽ được lưu trữ tại CDN vậy thì các CDN khác nhau sẽ được lưu trữ dữ liệu khác nhau hay giống nhau ạ?
    1. Nếu như giống nhau thì đó có được xem là tốn tài nguyên bộ nhớ không ạ?
    2. Nếu như khác nhau vậy khi người dùng muốn truy xuất dữ liệu không có tại server gần nhất thì dữ liệu có thông qua origin server để di chuyển đến user không ạ? Như vậy thì có thể mất thời gian hơn ạ.

    Like

Leave a comment