# CDN

![](https://2407442552-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lpv9LvHzpublmUWisvz%2Fsync%2F40073f02886fb8860d7d63ed4e592b9cea7275a3.png?generation=1589265737799029\&alt=media)

A **content delivery network** (CDN) is a globally distributed network of proxy servers, serving content from locations closer to the user. Generally, **static files** such as HTML/CSS/JS, photos, and videos are served from CDN, although some CDNs such as Amazon's **CloudFront** support dynamic content. The site's DNS resolution will tell clients which server to contact.

Serving content from CDNs can significantly improve performance in two ways:

* Users receive content at data centers close to them
* Your servers do not have to serve requests that the CDN fulfills

> CDN 相当于是一个建在你附近的 cache，尤其一些 static files 加载的时候耗费时间，那么提前帮你存在附近。你用的时候很快就可以得到了。

## Push CDNs

Push CDNs receive new content whenever changes occur on your server. You take full responsibility for providing content, uploading directly to the CDN and rewriting URLs to point to the CDN. You can configure when content expires and when it is updated. Content is uploaded only when it is new or changed, **minimizing traffic**, but **maximizing storage**.

Sites with a **small amount of traffic** or sites with content that isn't often updated work well with push CDNs. Content is placed on the CDNs once, instead of being re-pulled at regular intervals.

## Pull CDNs

Pull CDNs grab new content from your server when the first user requests the content. You leave the content on your server and rewrite URLs to point to the CDN. This results in a slower request until the content is cached on the CDN.

A time-to-live (TTL) determines how long content is cached. Pull CDNs minimize storage space on the CDN, but can create redundant traffic if files expire and are pulled before they have actually changed.

Sites with **heavy traffic work well with pull CDNs**, as traffic is spread out more evenly with only recently-requested content remaining on the CDN.

> 假设你是一个公司，你的 content 在你的 hosts 上，如果是小流量的话，可以用 push CDNs 的方法。你的 host 一有更新，就 push 给这些 CDNs。如果流量大的话，就让 CDNs 需要的时候来 pull，因为这样可以 evenly spread。

## Disadvantages

* CDN **costs** could be significant depending on traffic, although this should be weighed with additional costs you would incur not using a CDN.
* Content might be **stale** if it is updated before the TTL expires it.
* CDNs **require changing URLs** for static content to point to the CDN.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://liuyang89116.gitbook.io/system-design/chapter/cdn.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
