Escolar Documentos
Profissional Documentos
Cultura Documentos
criada
como harpa net na época da guerra fria se expandiu entre as
universidade, e virou a www (world web wide). os individuos sao
indentificados pelos seus números IP e os endereços dos sites são nomes
que se vinculam a esses endereços como o cpf e o nome em analogia a
uma pessoa.
O mundo Web é tão presente no nosso dia a dia que esquecemos o quão
complexo ele é. Conhecê-lo será fundamental quando você começar a
arquitetar o backend da sua aplicação, e muito importante para que você
desenvolva páginas web que funcionem de fato.
Agora você vai entender como funciona uma aplicação web, e como é
possível torná-la escalável. Para isso, você precisa conhecer um pouco
mais sobre o modelo Cliente-Servidor e sobre a estrutura de uma página
Web. Até aqui você já aprendeu alguns conceitos básicos sobre o mundo
Web. Você já tem uma ideia de como o cliente (seu computador) interage
com um servidor. O próximo passo será ir um pouco mais a fundo para
entender como todas as partes que vimos se relacionam para nos permitir
navegar na Internet.
Aplicações web, como essa que você está usando em seus estudos aqui
na Trybe, seguem uma estrutura básica muito similar. Elas são compostas
por um cliente, um servidor e uma base de dados.
O cliente é responsável por interagir com o usuário. Em uma aplicação
Web o cliente é responsável por definir a estrutura , a aparência e
mecanismos para lidar com as interações do usuário (como um click, ou
um campo para preenchimento).
A estrutura da sua página é definida por uma linguagem chamada HTML,
que é a sigla para Hyper text markup language . O HTML te permite
configurar a estrutura física da sua página web. Cada tag do HTML
descreve um elemento específico do documento, como podemos ver
abaixo:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-
scale=1.0">
<title>Document</title>
</head>
<body>
<header>
<h1>Minha página Web!</h1>
</header>
<p>Bem vindos! Essa é a estrutura básica da minha primeira
página</p>
<ul>O que estou aprendendo:
<li>Git & GitHub</li>
<li>Internet</li>
<li>Shell</li>
</ul>
</body>
</html>
body {
background-color: blue;
}
h1 {
color: purple;
font-size: large;
}
p {
color: green;
font-weight: bold;
}
h2 {
color: red;
border: 3px solid black;
}
O seu pedido é enviado como uma requisição para um servidor, que irá
armazenar, processar e encaminhar as suas compras.
O servidor em uma aplicação Web é quem recebe as requisições do
cliente. Lembra-se do protocolo HTTP? Pois bem, é aqui que ele entra em
cena. É esse protocolo que define uma linguagem para que clientes e
servidores se comuniquem. O servidor espera por requisições HTTP de
uma porta específica, sempre associada a um endereço IP. Com as
requisições, ele vai realizar ações e enviar a resposta via HTTP. Todos os
dados que viajam entre o cliente e o servidor são enviados através da
rede Internet usando o protocolo TCP/IP.
E por fim, o banco de dados de uma aplicação web é onde a informação é
armazenada de forma acessível, gerenciável e em constante atualização.
Imagine que você está lançando uma nova rede social, que em cinco anos
contará com 500 milhões de usuários ativos no mundo todo. Você
certamente irá precisar usar um banco de dados para armazenar
informações sobre usuários, posts , comentários. E quando um visitante
fizer uma requisição para acessar a página, as informações que serão
retornadas para a página virão de um banco de dados. Assim, interações
em tempo real, como vemos hoje no Instagram e Facebook, serão
viáveis.
Passamos pelos conceitos chaves de uma aplicação Web, e vimos de
forma simplificada o seu funcionamento. Mas a medida que a aplicação
cresce, como um único servidor conseguirá lidar com milhares - ou até
mesmo milhões! - de requisições de usuários em tempo real?
Agora, vamos entender como escalonar uma aplicação web. Uma forma
para lidarmos com um grande volume de dados é distribuir o tráfego de
informações entre servidores no backend. O responsável por gerenciar o
trânsito de informações de uma aplicação entre vários servidores backend
é o que chamamos de balanceador de carga.
"Balanceamento de carga" é um termo genérico para uma série de
algoritmos que distribuem as requisições para o servidor. Caso você tenha
curiosidade em conhecer alguns desses algoritmos, pesquise por dois que
são muito populares no design de sistemas distribuídos: Round Robin e
Least Connections. Resumidamente, através de algoritmos o balanceador
de cargas divide para qual host as requisições serão direcionadas em um
sistema de serviços distribuídos.
Tudo tranquilo até aqui, certo?! O balanceador de cargas resolve o
problema de tráfego de dados distribuindo as requisições para servidores
backend. Mas replicar esse modelo ainda pode gerar problemas a medida
que a sua aplicação cresce. À medida que adicionamos mais
funcionalidades para a aplicação, sua complexidade é aumentada e a
carga de trabalho solicitada ao servidor também cresce, este conjunto de
fatores pode sobrecarrega-lo. Assim, para resolver esse problema, é
necessário separar o servidor por funcionalidade. É aqui que serviços
entra em ação.
Um serviço é apenas outro servidor capaz de interagir com servidores, o
que não acontece com um servidor Web, que interage apenas com o
cliente. Cada serviço tem uma funcionalidade, como um serviço para
autenticação de usuário ou serviços de busca. Assim, é possível quebrar o
servidor Web da sua aplicação em múltiplos serviços, cada um com uma
funcionalidade específica. A grande vantagem dos serviços é que você
pode escaloná-los de forma independente. Além disso, os times de uma
empresa também podem trabalhar de forma independente em um
determinado serviço, ao invés de ter uma equipe numerosa trabalhando
em um único servidor, o que poderia se tornar um grande problema de
gestão de projeto.
Tudo o que vimos até agora funciona muito bem para escalonar o tráfego
de dados. Mas a sua aplicação ainda está centralizada em um único lugar.
Quando usuários do mundo todo começarem a acessar o seu site, eles
podem ter um tempo de resposta maior devido à grande distância entre
cliente e servidor. Uma forma de resolvermos esse problema é usando o
que chamamos de Rede de Distribuição de Conteúdo, ou Content Delivery
Network (CDN) . O CDN é um sistema de distribuição de servidores
"proxy". Podemos entender um servidor proxy como sendo um
intermediário entre cliente e servidor.
Empresas com uma grande quantidade de tráfego distribuído no mundo
todo podem pagar por companhias que oferecem serviços de CDN. Assim,
usuários de diversas localidades poderão acessar a aplicação com um
tempo de resposta menor. Um exemplo é a Akamai , que tem sedes em
pontos estratégicos no mundo todo para garantir uma melhor experiência
ao usuário. Se o conteúdo da sua aplicação Web não precisa cruzar o
oceano para que um usuário na China possa utilizá-lo, o tempo de
resposta é muito menor. A Akamai, por exemplo, consegue reduzir esse
tempo de latência ao armazenar cópias do conteúdo da aplicação
(arquivos como o HTML, CSS, mídia) do servidor dos seus clientes. Assim,
a Akamai consegue fornecer a aplicação para o usuário de seus clientes
sem precisar ter acesso ao seu servidor de quem a contratou.
Vamos fixar o que aprendemos? Responda ao Quiz para verificar sua
compreensão do texto:
O protocolo HTTP
protocolos são as regras de comunicação da internet, saõ os protocolos de rede ou de
internet.
os protocolos de internet são uma especie de lingua universal que todos os computadores
independente da maraca conseguem se comunicar.
Vamos fazer uma segunda busca para entender sobre o protocolo HTTP.
No seu navegador, busque por https://github.com/. Clique com o botão
direito, selecione "Inspecionar" e procure por Network na barra superior.
Navegue para o repositório da Trybe na sua barra de navegação com a
janela de inspecionar aberta: https://github.com/betrybe/. Selecione o
primeiro nome e a aba Headers . Você verá uma tela como a que é
mostrada abaixo:
HTTP Headers
HTTP Body
Métodos HTTP
Os métodos HTTP são os verbos que dizem ao servidor o que fazer com
os dados no URL. Como vimos, o endereço URL identifica recursos
específicos. Quando o cliente utiliza o endereço URL combinado a um
verbo HTTP, o servidor saberá qual será a ação necessária para cada
recurso. Os exemplos mais comuns são:
GET
O método GET é o mais comum, e é utilizado para ler informações
encaminhadas pelo servidor para uma URL específica. As requisições GET
são apenas para leitura , o que significa que os dados nunca poderão ser
modificados no servidor. O servidor irá apenas retornar os dados, sem
modificá-los. Assim, esse tipo de requisição é considerada uma operação
segura, pois o efeito retornado será sempre o mesmo,
independentemente do número de requisições feitas. Assim sendo,
dizemos que requisições GET são idempotentes , o que significa que o
efeito da requisição no servidor será sempre o mesmo - fazer milhões de
requisições GET para o mesmo URL tem o mesmo efeito que uma única
requisição. O método GET apenas retorna dados.
Requisições GET são respondidas com status 200 (OK) se o recurso que
estamos querendo acessar for encontrado com sucesso, ou 404 (NOT
FOUND) se a página não for encontrada.
POST
O método POST é utilizado para criar um novo recurso, como um
formulário para login. Você usará o método POST para criar um recurso
subordinado (ex: novo usuário) para a aplicação pai (ex:
http://exemplo.com/usuario). Ao contrário do método GET, o método
POST não é nem seguro e nem idempotente. Fazer duas ou mais
requisições POSTS resultará em novos recursos criados (mesmo que
idênticos). Requisições POST são retornadas com o status code 201
(CREATED) e um novo caminho no header com o Link do recurso criado.
PUT
O método PUT é utilizado para atualizar o recurso identificado pelo URL.
Esse método também pode ser utilizado para criar um novo recurso.
Requisições PUT não são consideradas operações seguras, pois o estado
da aplicação é modificado no servidor. No entanto, o método PUT é
idempotente porque múltiplas requisições PUT para atualizar um recurso
têm o mesmo efeito que uma única requisição.
A resposta a requisição é o status code 200 (OK) se o recurso foi
atualizado com sucesso, ou 404 (NOT FOUND) se ele não for encontrado.
Requisições feitas com o método PUT são usadas para atualizar um recurso, como atualizar
o nome de um usuário por exemplo.
Requisições feitas com o método PUT podem ser usadas para criar novos recursos.
Requisições feitas com o método PUT são idempotentes, se utilizadas para atualizar um
recurso.
DELETE
DELETE é utilizado para deletar um recurso identificado pelo URL. As
requisições DELETE são idempotentes, pois quando deletamos um recurso
ele será deletado. Você pode fazer milhares de requisições com o método
DELETE que no fim o resultado será o mesmo: um recurso deletado(o
primeiro).
A resposta requisição é o status code 200 (OK) se o recurso for deletado
com sucesso, ou 404 (NOT FOUND) se o recurso que será deletado não
existir.
REST
Você pode já ter ouvido falar do termo RESTful para descrever uma
aplicação. REST é a sigla para Representational State Transfer . É um
estilo de arquitetura utilizado no design de aplicações Web. O estado da
aplicação são os dados necessários para que o servidor possa atender a
uma determinada requisição. As regras do REST nos guiam a desenvolver
sistemas mais performáticos, escaláveis, simples, de fácil
manutenção e modificação, portátil e confiável. Performance
Escalabilidade
Simplicidade
Modificabilidade
Visibilidade
Portabilidade
Confiabilidade
Dentre elas, podemos destacar:
Parâmetros de consulta
URL
podem ser utilizadas pelo "Servidor" para enviar dados para o "Cliente"
1. Para Linux :
curl --version
2. Para MacOS :
curl -V
1. Para Linux :
Para MacOS
curl 7.68.0 (x86_64-apple-darwin16.0) libcurl/7.68.0
SecureTransport zlib/1.2.8
Protocols: dict file ftp ftps gopher http https imap imaps
ldap ldaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp
Features: AsynchDNS IPv6 Largefile GSS-API Kerberos SPNEGO
NTLM NTLM_WB SSL libz UnixSockets
curl --version
MacOS
Por padrão o comando curl já vem instalado. No entanto, pode ser que
algum problema tenha acontecido e o comando não esteja instalado. Caso
esta seja sua situação, siga os comandos abaixo. 😉
curl -V
Assim como você fará com toda nova tecnologia que aprender em
programação, o primeiro passo na maioria das vezes é dar uma olhada na
documentação! A documentação contém muitas informações úteis que
podem nos poupar tempo de pesquisa se a analisarmos.
Com a etapa de instalação concluida e a documentação em mãos, vamos
conhecer um pouco mais sobre o comando rodando exemplos práticos no
terminal!
curl testdomain.com
curl -O
https://uploads-ssl.webflow.com/5dbd9ce75ad64f24b67f0932/5dbdd
9165ad64f5e29811c52_BRAND3.png
curl -o trybe_logo.png
https://uploads-ssl.webflow.com/5dbd9ce75ad64f24b67f0932/5dbdd
9165ad64f5e29811c52_BRAND3.png