Prólogo
Con el advenimiento de la Web 2.0, la arquitectura de la red Internet ha evolucionado a partir de la tradicional C/S
arquitectura de la transformación de una forma más cómoda y eficiente B/S
arquitectura, B / S arquitectura simplifica en gran medida la dificultad de las aplicaciones de red del usuario, mejorar la experiencia del usuario.
B/S
La arquitectura trae los siguientes dos beneficios:
- El cliente utiliza un navegador unificado (
Browser
). Debido a la unidad del navegador, no se requieren configuraciones especiales ni conexiones de red. Además, la naturaleza interactiva del navegador hace que sea muy fácil para los usuarios usarlo, y la herencia del comportamiento del usuario es muy fuerte, es decir, siempre que el usuario haya aprendido a navegar por Internet, sin importar qué aplicación se use, una vez que se haya aprendido, tiene la experiencia de usar cualquier otro servicio de Internet. . - El servidor (
Server
) se basa en uno unificadoHTTP
. Es diferente de la arquitectura C / S tradicional que usa un protocolo de capa de aplicación personalizado. El uso de un HTTP simplifica el modo de desarrollo unificado, y tiene una gran cantidad de servidores basados en HTTP, comoApache
,Nginx
,Tomcat
y así sucesivamente, estos servidores pueden utilizar directamente, no sólo eso, incluso el marco general para el desarrollo de servicios también pueden utilizar directamente, sin necesidad de desarrollar por separado tales comoSpring
,Spring MVC
,MyBatis
y así sucesivamente, podemos centrarnos en los servicios de lógica de negocio, que también simplifica nuestro trabajo de desarrollo.
Descripción general de la arquitectura de red B / S
B/S
protocolo de capa de aplicación unificada basada HTTP
interactuar con los datos, con los más C/S
diferentes aplicaciones a largo conexión a Internet modo interactivo utilizados. HTTP
Por lo general, se utiliza un método de comunicación de conexión corta sin estado. Normalmente, una solicitud completa una interacción de datos, y luego la conexión de comunicación se desconecta esta vez. El uso de este método puede responder efectivamente a más solicitudes de usuarios.
Cuando la entrada en el navegador antoniopeng.com este URL
tiempo y pulse Intro, muchas operaciones se producen:
- En primer lugar, una petición
DNS
para resolver el nombre de dominio que corresponde a laIP
dirección. - Entonces, de acuerdo a esta
IP
dirección para encontrar el servidor correspondiente en Internet, puesto en marcha una (/ POST / GET ...) petición al servidor. El servidor devuelve los recursos de datos predeterminados al usuario accedido, y también puede haber una lógica empresarial muy complicada en el lado del servidor.- Puede haber muchos servidores, y un dispositivo de equilibrio de carga (como
Nginx
) distribuye todas las solicitudes de los usuarios de manera uniforme. - Y si los datos solicitados se almacenan en la memoria caché o en un archivo estático, o en la base de datos.
- Puede haber muchos servidores, y un dispositivo de equilibrio de carga (como
- Por último, cuando los datos de vuelta al navegador, resolución de encontrar algunos recursos estáticos (tales como
CSS
,,JS
)IMG
iniciará tiempo adicionalHTTP
solicitud, y estas solicitudes son propensos a estar enCDN
el, entonces elCDN
servidor procesará estas solicitudes.
Cómo hacer una solicitud
El problema es simple y compleja, simplemente significa que cuando estamos en un conjunto de datos del navegador URL
, pulse la tecla ENTER para iniciar esta HTTP
solicitud, pronto será capaz de volver a ver el resultado de esta solicitud. Complejo significa que la solicitud puede iniciarse sin la ayuda de un navegador.
Y una HTTP
conexión es esencialmente una Socket
conexión, entonces podemos simular completamente el navegador para iniciar una HTTP
petición. Apache HttpClient
Un proceso se lleva a cabo por un programa abierto HTTP
petición kit de herramientas.
Lo siguiente se basa en una HttpClient
llamada de ejemplo:
Introducir dependencias
En pom.xml
el complemento org.apache.httpcomponents:httpclient
dependiente
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.5</version>
</dependency>复制代码
Crear solicitud HTTP Obtener
El código de implementación es el siguiente
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
public class MyTest {
public static void main(String[] args) {
get();
}
private static void get() {
// 创建 HttpClient 客户端
CloseableHttpClient httpClient = HttpClients.createDefault();
// 创建 HttpGet 请求
HttpGet httpGet = new HttpGet("http://www.baidu.com");
// 设置长连接
httpGet.setHeader("Connection", "keep-alive");
// 设置代理(模拟浏览器版本)
httpGet.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36");
// 设置 Cookie
httpGet.setHeader("Cookie", "UM_distinctid=34342706a09352-0376059833914f-3c604504-1fa400-16442706a0b345; CNZZDATA1262458286=1603637673-1530123020-%7C1530123020; JSESSIONID=805587506F1594AE02DC45845A7216A4");
CloseableHttpResponse httpResponse = null;
try {
// 请求并获得响应结果
httpResponse = httpClient.execute(httpGet);
HttpEntity httpEntity = httpResponse.getEntity();
// 输出请求结果
System.out.println(EntityUtils.toString(httpEntity));
} catch (IOException e) {
e.printStackTrace();
}
// 无论如何必须关闭连接
finally {
if (httpResponse != null) {
try {
httpResponse.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (httpClient != null) {
try {
httpClient.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}复制代码
Además de Java
la utilización de muy comunes HttpClient
herramientas, además de la línea de comandos del curl
sistema, a través del rizo + URL simplemente puede iniciar una HTTP
petición
- Ingrese el comando
curl https://www.baidu.com复制代码
- Devolver resultados de datos HTML
<!DOCTYPE html>
<!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer><link rel=stylesheet type=text/css href=https://ss1.bdstatic.com/5eN1bjq8AAUYm2zgoY3K/r/www/cache/bdorz/baidu.min.css><title>鐧惧害涓€涓嬶紝浣犲氨鐭ラ亾</title></head> <body link=#0000cc> <div id=wrapper> <div id=head> <div class=head_wrapper> <div class=s_form> <div class=s_form_wrapper> <div id=lg> <img hidefocus=true src=//www.baidu.com/img/bd_logo1.png width=270 height=129> </div> <form id=form name=f action=//www.baidu.com/s class=fm> <input type=hidden name=bdorz_come value=1> <input type=hidden name=ie value=utf-8> <input type=hidden name=f value=8> <input type=hidden name=rsv_bp value=1> <input type=hidden name=rsv_idx value=1> <input type=hidden name=tn value=baidu><span class="bg s_ipt_wr"><input id=kw name=wd class=s_ipt value maxlength=255 autocomplete=off autofocus=autofocus></span><span class="bg s_btn_wr"><input type=submit id=su value=鐧惧害涓€涓?class="bg s_btn" autofocus></span> </form> </div> </div> <div id=u1> <a href=http://news.baidu.com name=tj_trnews class=mnav>鏂伴椈</a> <a href=https://www.hao123.com name=tj_trhao123 class=mnav>hao123</a> <a href=http://map.baidu.com name=tj_trmap class=mnav>鍦板浘</a> <a href=http://v.baidu.com name=tj_trvideo class=mnav>瑙嗛</a> <a href=http://tieba.baidu.com name=tj_trtieba class=mnav>璐村惂</a> <noscript> <a href=http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2f%3fbdorz_come%3d1 name=tj_login class=lb>鐧诲綍</a> </noscript> <script>document.write('<a href="http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u='+ encodeURIComponent(window.location.href+ (window.location.search === "" ? "?" : "&")+ "bdorz_come=1")+ '" name="tj_login" class="lb">鐧诲綍</a>');
</script> <a href=//www.baidu.com/more/ name=tj_briicon class=bri style="display: block;">鏇村浜у搧</a> </div> </div> </div> <div id=ftCon> <div id=ftConw> <p id=lh> <a href=http://home.baidu.com>鍏充簬鐧惧害</a> <a href=http://ir.baidu.com>About Baidu</a> </p> <p id=cp>©2017 Baidu <a href=http://www.baidu.com/duty/>浣跨敤鐧惧害鍓嶅繀璇?/a> <a href=http://jianyi.baidu.com/ class=cp-feedback>鎰忚鍙嶉</a> 浜琁CP璇?30173鍙?nbsp; <img src=//www.baidu.com/img/gs.gif> </p> </div> </div> </div> </body> </html>复制代码
Análisis HTTP
Para entender HTTP
lo más importante es estar familiarizado con HTTP
el HTTP Header
, que controla la transmisión de datos. Lo más importante, controla el comportamiento de representación del navegador y la lógica de ejecución del servidor. Por ejemplo, cuando el servidor no tiene los datos solicitados por el usuario, devolverá un código de estado 404, diciéndole al navegador que no hay datos para solicitar, generalmente el navegador mostrará un mensaje de error muy poco dispuesto a ver "Esta página no existe".
Encabezados de solicitud HTTP comunes
Encabezado de solicitud | Explicación |
---|---|
Aceptar-Charset | Especifique el juego de caracteres recibido por el cliente |
Aceptar-Codificación | Especifique una codificación aceptable (por ejemplo, Accept-Encoding: gzip.deflate) |
Aceptar lenguaje | Especifique un lenguaje natural (por ejemplo, Accept-Language: zh-cn) |
Anfitrión | Especifique el host y el número de puerto del recurso solicitado (por ejemplo, Host: www.baidu.com) |
Agente de usuario | El cliente le dice al servidor el sistema operativo, el navegador y otros atributos. |
Conexión | Especifica si se mantiene la conexión actual (por ejemplo, Conexión: Keep-Alive) |
Encabezados de respuesta HTTP comunes
Encabezado de respuesta | Explicación |
---|---|
Servidor | Nombre del servidor (por ejemplo, Servidor: nginx / 1.17.6) |
Tipo de contenido | El tipo de entidad enviada al destinatario (por ejemplo, Tipo de contenido: texto / html; charset = GBK) |
Codificación de contenido | Correspondiente a Accept-Encoding, la codificación adoptada por el servidor |
Lenguaje de contenido | Correspondiente a Accept-Language, el lenguaje natural utilizado por el recurso |
Largancia de contenido | Longitud del cuerpo |
Mantener viva | El tiempo para mantener la conexión (como Keep-Alive: timeout = 5) |
Códigos de estado HTTP comunes
Código de estado | Explicación |
---|---|
200 | Solicitud exitosa |
302 | Salto temporal |
400 | La solicitud del cliente tiene un error de sintaxis que el servidor no puede reconocer |
403 | El servidor recibe la solicitud, pero se niega a proporcionar el servicio, es decir, no tiene autorización. |
404 | El recurso solicitado no existe |
500 | Se produjo un error inesperado en el servidor |
Ver información HTTP
Miran una HTTP
petición de los encabezados de solicitud y los encabezados de respuesta pueden abrir un navegador a través de tecla de acceso directo F12 herramienta para la depuración de vista, por ejemplo, estamos visitando www.baidu.com, pulse F12 y abrir la Network
barra de depuración para ver este HTTP Header
contenido
Mecanismo de almacenamiento en caché del navegador
Al ver una página Web se encuentran, por lo general a considerar es que el navegador no se almacena en caché, por lo que la práctica general es pulsar Ctrl + F5
la combinación de teclas, una vez más solicitar esta página, así que asegúrese de que la solicitud es la última página. Porque la prensa Ctrl + F5
combinaciones de teclas directamente en el destino URL
envía una solicitud, en lugar de utilizar los datos de la caché del navegador.
Como se muestra en la figura, esta solicitud no llegó al servidor, utilizando los datos en caché del navegador
Pulse la Ctrl + F5
combinación de teclas para actualizar la página, se encuentra en HTTP
el encabezado de la solicitud es por lo general más de dos parámetros, a saber, Cache-Control:no-cache
y Pragma:no-cache
los parámetros de la función del contenido solicitado no está almacenado en caché
Resolución de nombre de dominio DNS
Internet es publicar por URL (Uniform Resource Locator) y solicitar recursos, y URL
la necesidad de resolver el nombre de dominio en IP
una dirección para establecer una conexión con el host remoto, cómo resolver un nombre de dominio en una dirección IP pertenece al ámbito de trabajo de la resolución de DNS.
Cuando el usuario ingresa a www.baidu.com en el navegador, los pasos de trabajo de la resolución DNS son los siguientes
- Primero, el navegador verificará si hay una dirección IP resuelta correspondiente a este nombre de dominio en el caché. Si hay en el caché, este proceso de análisis finalizará. Caché de nombres de dominio límite de tiempo puede
TTL
ser propiedades del conjunto. - Si la memoria caché del navegador no lo hace, se comprueba el sistema operativo si existe el nombre de dominio correspondiente
DNS
los resultados analíticos, en Windows puedeC:\Windows\System32\drivers\etc\hosts
ser establecido archivo, en Linux este perfil es/etc/hosts
, para modificar este archivo también puede configurar los resultados IP de resolución de nombres. - Si los pasos anteriores no pueden completar la resolución del nombre de dominio, realmente solicitará al servidor de nombres de dominio que resuelva el nombre de dominio. El sistema operativo primero enviará
Local DNS Server
el nombre de dominio al servidor de nombres de dominio en la región. Por ejemplo, se accede a la red del campus de la escuela, a continuación, el servidor de nombres de dominio local es, sin duda, en su escuela, si usted está en un acceso comunitario a Internet, entonces esteLocal DNS Server
es el proveedor de la aplicación para proporcionar acceso a Internet (Telecom, China Mobile y China Unicom), Por lo general, en un rincón de la ciudad, no muy lejos. - Si
Local DNS Server
todavía no ha golpeado directamente aROOT DNS Server
(dominio raíz del servidor de nombres) solicitud de resolución. - El servidor de nombres de dominio raíz devolverá al servidor de nombres de dominio local una
gLTD Server
dirección del nombre de dominio consultado (servidor de nombres de dominio primario), quegLTD
es un servidor de nombres de dominio de nivel superior internacional, como.com
,.cn
etc. Local DNS Server
(Servidor de nombres de dominio local) de nuevo se acaba de regresar degTLD Server
envío de una solicitud.- Aceptado la solicitud
gTLD Server
para encontrar y devolver el nombre de dominio que corresponde a laName Server
dirección del servidor DNS, estoName Server
es por lo general el nombre de dominio del servicio de registro (como Ali nube - millones netos). Name Server
Y a continuación, consulta los nombres de dominio de almacenamiento y tabla de asignación de IP, en circunstancias normales, para obtener los registros de nombres de dominio IP, junto con unaTTL
vuelta al valorLocal DNS Server
(servidor de nombres local).Local DNS Server
Caches correspondencia entre el nombre de dominio y IP, caché por el tiempoTTL
de control de valor, el resultado final del análisis se devuelve al usuario.
Resolución de nombre de dominio
Los registros de resolución de nombres de dominio se dividen principalmente en registros A, registros MX, registros CNAME, registros NS y registros TXT.
- Un registro: especifique la dirección IP correspondiente al nombre de dominio (varios nombres de dominio se pueden resolver a la misma IP, y una IP solo puede apuntar a un nombre de dominio).
- Registro MX: apunte el servidor de correo bajo otro nombre de dominio a su propio servidor de correo.
- Registro CNAME: apunte un nombre de dominio a otro nombre de dominio.
- Registro NS: especifique el servidor de resolución DNS.
- Registro TXT: establezca una descripción para un nombre de host o nombre de dominio.
Mecanismo de trabajo CDN
CDN
Es decir, la red de distribución de contenido, principalmente almacena en caché los datos estáticos en el sitio web, como CSS, JS, IMG y otros datos. Después de una petición de usuario para iniciar el contenido dinámico servidor maestro, entonces la CDN
descarga de datos estática, lo que acelera la velocidad de datos de la página web de contenido descargado.
En general, CDN
para lograr escalabilidad, seguridad, fiabilidad, varios objetivos. Los pasos de trabajo son los siguientes:
- En primer lugar, la
Local DNS Server
solicitud de apertura de un servidor DNS local, por lo general después volver resolución iterativa para el proveedor de servicios de registro de nombres de dominio para resolver. - Generalmente hay un
DNS
análisis del servidor de nombres de dominio volverá aCNAME
resolver a otro nombre de dominio, el nombre de dominio, finalmente, será dirigido aCDN
Global en elDNS
servidor de equilibrio de carga, y luego porGTM
acuerdo con acceder a la dirección de un usuario, recientemente devuelto al usuario del accesoCDN
nodo. - Para obtener
CDN
el resultado del análisis, el usuario directamente alCDN
nodo de acceso a los archivos estáticos, y si este nodo en el archivo solicitado no existe, será volver a la estación de origen para obtener el archivo, y luego devueltos al usuario.
Balanceo de carga
El equilibrio de carga ( Load Balance
) es equilibrar y distribuir tareas de trabajo a múltiples unidades de operación para realizar tareas juntas.
Puede mejorar la velocidad de respuesta del servidor y la eficiencia de utilización, evitar un solo punto de falla del software y resolver problemas de congestión de la red.
Generalmente hay tres arquitecturas de equilibrio de carga:
- Balanceo de carga de enlace: las ventajas son: no es necesario pasar por otros servidores proxy, por lo general, la velocidad de acceso será rápida, la desventaja es que hay un caché, es difícil actualizar la estructura de resolución de nombres de dominio a tiempo.
- Cluster de equilibrio de carga
- Equilibrio de carga de hardware: la ventaja es que el rendimiento es muy bueno y la desventaja es que es muy costoso y no se puede expandir dinámicamente.
- Equilibrio de carga de software: la ventaja es que el costo es muy bajo, y la desventaja es que una sola solicitud de acceso generalmente pasa por varios servidores proxy, lo que aumenta el retraso de la red.
- Equilibrio de carga del sistema operativo: utilice interrupciones suaves o duras a nivel del sistema operativo para lograr el equilibrio de carga, como configurar varias tarjetas de red.
CDN aceleración dinámica
Principio técnico: En CDN
el DNS
análisis posterior detección de vínculos dinámicos a la fuente para encontrar el mejor camino, a continuación, todas las peticiones DNS la programación prevista en esta ruta seleccionada volver a la fuente, acelerando así la eficiencia de acceso del usuario.
detección de enlace: En cada CDN
descarga de un determinado tamaño de archivo de la estación desde el nodo de origen para ver que vinculan el tiempo total más corto, por lo que se puede formar una lista de enlaces, y luego unirse a DNS
la resolución, a la actualización Local DNS Server
.
- Autor: Peng Chao
- Este artículo apareció por primera vez en un blog personal: antoniopeng.com/2020/04/07/…
- Aviso de derechos de autor: Todos los artículos en este blog usan el acuerdo de licencia CC BY-NC-SA 4.0 a menos que se indique lo contrario. Reproducido por favor, especifique de Chao Peng | Blog !