Content Delivery Network Explained 🌎⚡️
Tags: webdev, tutorial, career, security
Published: 2024-04-21 00:09:52

## Summary
   * [🇺🇸 English](#how-cdn-works)
   * [🇧🇷 Portuguese](#como-funciona-uma-cdn)

## Why does a CDN exist? <a name="how-cdn-works"></a>

Let's imagine we are an Amazon Prime user, located in Sao_Paulo/Brazil, while Amazon is based in the United States.

Given this setup, all of Amazon's movies and series are stored in the United States, so every time you want to watch something, you will have to make a request over a long distance to Amazon in the United States.

At first glance, we can see that using this method is not scalable and comes with several problems, such as:

1 - Latency
2 - Distributing data at speed over very long distances
3 - Data distribution capacity

## What exactly is a CDN?

A CDN or Content Delivery Network is a distributed network of proxy servers.

The idea is that the content from Amazon Prime, which is stored in the United States, is replicated across various proxy servers distributed worldwide.

In practice, when someone located in Sao_Paulo/Brazil, for example, wants to watch a movie or series, a request will be made to the nearest CDN instead of to Amazon’s origin servers.

This way, latency is greatly reduced, and data distribution happens much faster.

## Functional requirements of a CDN:

- **Retrieve**: Needs to be able to request content from the origin server
- **Request**: Must be able to respond to the user when they request content.
- **Delivery**: If the CDN is a Push Model, the origin server needs to be able to push content to the CDN
- **Search**: Needs to be capable of searching content within its infrastructure
- **Update**: Proxies should be able to update each other
- **Delete**: Must be capable of clearing cache, if necessary.

## Non-functional requirements:

- Performance
- Availability
- Scalability
- Readability
- Security

## How does the CDN work between the Origin and the Client?

To simplify, the Client (User) makes a request, this request communicates with the nearest CDN, if the content is already saved in cache, the CDN returns the response to the user and completes the request.

If it is new content that is not stored in Cache, the CDN communicates with the Origin Servers to search for the new content, and the origin server delivers this content back to the CDN, which then delivers the content to the user.

Image below for better understanding:

![CDN-Client-Origin-Server](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y08c6g08z7mjwzt0o8mt.png)

Well, this is a very simple explanation of how a CDN works and what it is, there are several other topics we can delve into to understand more about CDNs.

<hr />

## Porque uma CDN existe? <a name="como-funciona-uma-cdn"></a>

Vamos imaginar que somos um usuário da Amazon Prime, e estamos localizados em Sao_Paulo/Brazil e a Amazon está localizada nos Estados Unidos.

Dado essa ideia, todos os filmes e series da Amazon, estão armazenados nos Estados Unidos, então toda vez que voce quiser assistir algo voce vai ter que fazer uma requisição de uma longa distancia para a Amazon que está nos estados unidos.

A primeira vista, já percebemos que usar essa forma não é escalável e tem vários problemas, tais como:

1 - Latência
2 - Distribuir dados com velocidade entre distancias muito longas
3 - Capacidade de distribuição de dados

## O que é uma CDN de fato?

Uma CDN ou Content Delivery Network é uma rede distribuída de servidores proxy.

A ideia é que o conteúdo da Amazon Prime que está nos Estados Unidos, seja replicada em vários servidores proxy distribuídos no mundo inteiro.

Na pratica, quando alguém que estiver localizado em Sao_Paulo/Brazil por exemplo, quiser assistir um filme ou serie, será realizada uma requisição para uma CDN que estiver mais próxima do usuário, ao invés de fazer uma requisição para os servidores de origem da Amazon.

Desse modo, a latência é muito menor e a distribuição de dados acontece muito mais rápido.

## Requisitos funcionais de uma CDN:

- **Retrieve**: Precisa ser capaz de solicitar conteúdo do servidor de origem
- **Request**: Precisa ser capaz de responder ao usuário quando ele solicitar conteúdo.
- **Delivery**: Caso a CDN seja uma Push Model, o servidor de origem precisa ser capaz de dar push no conteúdo para a CDN
- **Search**: Precisa ser capaz de buscar conteúdo dentro da infra da mesma
- **Update**: Proxy's devem ser capazes de fazer update entre si
- **Delete**: Deve ser capaz de limpar cache, caso necessário.

## Requisitos não funcionais:

- Perfomance
- Disponibilidade
- Escalabilidade
- Legibilidade
- Segurança

## Como a CDN funciona entre o Origin e o Client ?

Para simplificar, o Client (Usuário) faz uma requisição, essa mesma requisição se comunica com a CDN mais próxima, se o conteúdo já estiver salvo em cache, a CDN devolve a resposta para o usuário e finaliza a requisição.

Caso seja um conteúdo novo que não esteja armazenado em Cache, a CDN se comunica com os servidores de Origem (Origin Server) para buscar pelo novo conteúdo, e o origin server devolve esse conteúdo para a mesma, e a CDN devolve o conteúdo para o usuário.

Imagem abaixo para melhor entendimento:

![CDN-Client-Origin-Server](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/alp11nmfmiqwuehkuhb0.png)

Bom isto é uma explicação bem simples de como funciona e o que é uma CDN, existem vários outros tópicos que podemos nos aprofundar para entendermos mais sobre a CDN.