¿Cómo construir un sistema de sitio web grande?
La arquitectura del sistema de un sitio web maduro a gran escala (como Taobao, JD.COM, etc.). ) no tiene características completas de alto rendimiento, alta disponibilidad y seguridad desde el principio. Siempre está evolucionando y mejorando con el aumento de usuarios y la expansión de las funciones comerciales. Durante este proceso, el modelo de desarrollo, la arquitectura técnica y las ideas de diseño también han sufrido grandes cambios. Incluso el personal técnico ha pasado de unas pocas personas a un departamento o incluso una línea de productos. Por lo tanto, una arquitectura de sistema madura se mejora con la expansión del negocio y no sucede de la noche a la mañana; los sistemas con diferentes características comerciales tendrán su propio enfoque, como Taobao que resuelve la búsqueda, pedido y pago de información masiva de productos, y Tencent que resuelve la solución. Cientos de millones de usuarios envían mensajes en tiempo real y Baidu procesa solicitudes de búsqueda masivas. Todos tienen sus propias características comerciales y diferentes arquitecturas de sistemas. No obstante, también podemos identificar las tecnologías utilizadas en estos diferentes contextos de sitios web, que pueden usarse ampliamente en la arquitectura de sistemas de sitios web a gran escala. Primero introduzcamos el proceso de evolución de los sistemas de sitios web a gran escala para comprender estas tecnologías y métodos.
Primero, la arquitectura inicial del sitio web
En la arquitectura inicial, la aplicación, la base de datos y los archivos se implementan en un servidor, como se muestra en la siguiente figura:
? En segundo lugar, la separación de aplicaciones, datos y archivos
Con la expansión del negocio, un servidor ya no puede cumplir con los requisitos de rendimiento, por lo que las aplicaciones, bases de datos y archivos se implementan en servidores independientes para configurar diferentes hardware. para lograr los mejores resultados de rendimiento.
? En tercer lugar, utilice el almacenamiento en caché para mejorar el rendimiento del sitio web
Mientras optimizamos el rendimiento del hardware, también optimizamos el rendimiento del software. En la mayoría de los sistemas de sitios web, la tecnología de almacenamiento en caché se utiliza para mejorar el rendimiento del sistema. El uso de caché proviene principalmente de la existencia de datos activos. La mayoría de las visitas a sitios web siguen el principio 28 (es decir, el 80% de las solicitudes de acceso terminan en el 20% de los datos), por lo que podemos almacenar en caché los datos del punto de acceso, reducir las rutas de acceso a estos datos y mejorar la experiencia del usuario.
Los métodos de implementación de caché comunes incluyen el caché local y el caché distribuido. Por supuesto, también existen CDN, proxies inversos, etc., que se analizarán más adelante. El almacenamiento en caché local, como su nombre indica, almacena en caché los datos localmente en el servidor de aplicaciones. Puede almacenarse en la memoria o en un archivo. La caché de Oscar es un componente de caché local común. El caché local se caracteriza por su alta velocidad, pero debido al espacio local limitado, la cantidad de datos almacenados en caché es limitada. La característica del caché distribuido es que puede almacenar en caché datos masivos y es muy fácil de expandir. Comúnmente utilizado en sitios web de portales, la velocidad no es tan rápida como la del almacenamiento en caché local. Los cachés distribuidos de uso común incluyen Memcached y Redis.
Cuarto, utilice clústeres para mejorar el rendimiento del servidor de aplicaciones.
Como entrada al sitio web, el servidor de aplicaciones soportará una gran cantidad de solicitudes. A menudo utilizamos clústeres de servidores de aplicaciones. para compartir el número de solicitudes. Implemente un servidor de equilibrio de carga frente al servidor de aplicaciones para programar las solicitudes de los usuarios y distribuirlas a múltiples nodos del servidor de aplicaciones de acuerdo con la política de distribución.
? El hardware comúnmente utilizado para la tecnología de equilibrio de carga es F5, que es relativamente costoso, y el software es LVS, Nginx y HAProxy. LVS es un equilibrio de carga de cuatro capas que selecciona servidores internos en función de la dirección y el puerto de destino. Nginx es un equilibrio de carga de siete capas, HAProxy admite el equilibrio de carga de cuatro y siete capas y puede seleccionar un servidor interno según el contenido del mensaje. Por lo tanto, la ruta de distribución LVS es mejor y tiene mayor rendimiento que Nginx y HAProxy, mientras que Nginx y HAProxy son más configurables, como la separación estática y dinámica (seleccione un servidor de recursos estático o un servidor de aplicaciones según las características del mensaje de solicitud) .
5. Separación de lectura-escritura de bases de datos y tablas de bases de datos.
A medida que aumenta el número de usuarios, la base de datos se convierte en el mayor cuello de botella. Los medios comunes para mejorar el rendimiento de la base de datos son la separación de lectura y escritura y la separación de tablas. Como sugiere el nombre, la separación de lectura y escritura consiste en dividir la base de datos en bibliotecas de lectura y escritura y lograr la sincronización de datos a través de funciones primarias y de respaldo. Las subbases de datos y las subtablas se dividen en división horizontal y división vertical. El cambio horizontal consiste en dividir una tabla muy grande en una base de datos, como una tabla de usuario. La segmentación vertical consiste en cambiar en función de diferentes negocios, como tablas relacionadas con el negocio de usuarios y el negocio de productos en diferentes bases de datos.
? En sexto lugar, utilice CDN y proxy inverso para mejorar el rendimiento del sitio web.
Si nuestros servidores se implementan en la sala de ordenadores de Chengdu, los usuarios de Sichuan accederán más rápido y los usuarios de Beijing accederán más lentamente. Esto se debe a que Sichuan y Beijing pertenecen a diferentes regiones desarrolladas para las telecomunicaciones y los usuarios de China Unicom, respectivamente, deben recorrer un largo camino para acceder a los servidores en Chengdu a través de enrutadores de Internet. La ruta de regreso es la misma, por lo que el tiempo de transmisión de datos es más largo. . En este caso, se suele utilizar una CDN para resolver el problema. CDN almacena en caché el contenido de los datos en la sala de computadoras del operador. Cuando los usuarios acceden a él, primero obtienen los datos del operador más cercano, lo que reduce en gran medida la ruta de acceso a la red. Los operadores de CDN más profesionales incluyen Lanxun, Internet Room, etc.
El proxy inverso implementado en la sala de computadoras del sitio web accede primero al servidor proxy inverso cuando llega la solicitud del usuario, y el servidor proxy inverso devuelve los datos almacenados en caché al usuario. Si no hay datos almacenados en caché, se seguirán obteniendo del servidor de aplicaciones, lo que también reduce el coste de obtención de datos. Entre los proxies inversos se encuentran Squid y Nginx.
? 7. Uso de sistemas de archivos distribuidos
El número de usuarios aumenta día a día, el volumen de negocio es cada vez mayor y cada vez se generan más archivos. Un único servidor de archivos ya no puede satisfacer la demanda. Requiere soporte para el sistema de archivos distribuido. Un sistema de archivos distribuido comúnmente utilizado es NFS.
? 8. Utilice NoSQL y motores de búsqueda
Para consultas de datos masivos, el uso de bases de datos NoSQL y motores de búsqueda puede lograr un mejor rendimiento. No todos los datos deben colocarse en datos relacionales. Los NOSQL de uso común incluyen mongodb y redis, y los motores de búsqueda incluyen lucene.
? 9. Divida los servicios del servidor de aplicaciones.
A medida que el negocio se expande aún más, la aplicación se vuelve muy inflada. En este momento, la aplicación debe dividirse en noticias, páginas web, imágenes y otros servicios. Cada aplicación empresarial es responsable de operaciones comerciales relativamente independientes. Las empresas pueden comunicarse entre sí a través de mensajes o bases de datos compartidas.
? 10. Establecer servicios distribuidos
En este momento descubrimos que todas las aplicaciones comerciales utilizarán algunos servicios comerciales básicos, como servicios de usuario, servicios de pedidos, servicios de pago y servicios de seguridad, que admiten todas las aplicaciones comerciales básicas. elementos. Extraemos estos servicios y construimos servicios distribuidos utilizando un marco de servicio parcial. Dubbo en Taobao es una buena opción.
? La arquitectura de los sitios web a gran escala se mejora continuamente en función de las necesidades comerciales, y se realizan diseños y consideraciones específicos en función de diferentes características comerciales. Este artículo solo describe algunas de las tecnologías y métodos involucrados en un sitio web convencional a gran escala.
Si todavía tienes estas preguntas, ¿qué habilidades básicas deben aprender los arquitectos de sitios web maduros? ¿Cómo se puede ascender a un programador de Java a arquitecto de Internet? ¿Qué papel juega el lenguaje Java en la construcción de arquitectura? ¿Cómo convertirse en arquitecto ganando cientos de miles al año? Bienvenido a llamar y visitar el entrenamiento de Java Changping Beida Jade Bird.