Las aplicaciones dinámicas, en contraste con el contenido estático de un sitio web, se refieren a software de aplicaciones web desarrollado con lenguajes de servidor como C/C++, PHP, Java, Perl, .NET, etc., como foros, álbumes de fotos en línea, redes de amistad, blogs y otras aplicaciones comunes. Los sistemas de aplicaciones dinámicas suelen estar estrechamente vinculados con sistemas de bases de datos, sistemas de caché, sistemas de almacenamiento distribuido, etc.

La plataforma de sistemas de aplicaciones dinámicas a gran escala es principalmente una arquitectura de sistema subyacente establecida para sitios web de alto tráfico y alta concurrencia. El funcionamiento de un sitio web grande requiere un sistema de aplicaciones confiable, seguro, escalable y fácil de mantener como soporte para garantizar el funcionamiento estable de las aplicaciones del sitio web.

Los sistemas de aplicaciones dinámicas a gran escala se pueden dividir a su vez en varios subsistemas:

  • 1) Sistema front-end web
  • 2) Sistema de balanceo de carga
  • 3) Sistema de clúster de bases de datos
  • 4) Sistema de caché
  • 5) Sistema de almacenamiento distribuido
  • 6) Sistema de gestión distribuida de servidores
  • 7) Sistema de distribución de código

Sistema front-end web

Diagrama de estructura:

Con el fin de lograr el uso compartido de servidores entre diferentes aplicaciones, evitar puntos únicos de fallo, gestión centralizada, configuración unificada, etc., los servidores no se dividen por aplicación, sino que todos los servidores se utilizan de manera unificada; cada servidor puede proporcionar servicios a múltiples aplicaciones. Cuando el volumen de acceso de algunas aplicaciones aumenta, se mejora el rendimiento de todo el clúster de servidores agregando nodos de servidor, y otras aplicaciones también se benefician. Este sistema front-end web se basa en una plataforma de hosting virtual como Apache/Lighttpd/Eginx, y proporciona un entorno de ejecución para programas PHP. Los servidores son transparentes para los desarrolladores, no necesitan intervenir en la administración de servidores.

Sistema de balanceo de carga

Los sistemas de balanceo de carga se dividen en dos tipos: hardware y software. El balanceo de carga por hardware es eficiente, pero costoso, como F5, etc. Los sistemas de balanceo de carga por software son de menor costo o gratuitos, menos eficientes que los de hardware, pero son suficientes para sitios web de tráfico normal o ligeramente alto, como LVS, nginx. La mayoría de los sitios web utilizan tanto balanceo de carga por hardware como por software.

Sistema de clúster de bases de datos

Diagrama de estructura:

Dado que el front-end web adopta una estructura de clúster con balanceo de carga para mejorar la disponibilidad y escalabilidad del servicio, la base de datos también debe ser altamente confiable para garantizar la alta confiabilidad de todo el sistema de servicios. ¿Cómo construir un sistema de base de datos altamente confiable que pueda manejar procesamiento concurrente a gran escala?

Podemos adoptar el esquema que se muestra en la figura anterior:

1) Utilizar la base de datos MySQL. Dado que las aplicaciones web tienen la característica de más lecturas que escrituras, optimizamos principalmente la base de datos de lectura, proporcionando bases de datos de lectura y escritura dedicadas, y en la aplicación implementamos que las operaciones de lectura y escritura accedan a bases de datos diferentes.

2) Utilizar el mecanismo MySQL Replication para replicar rápidamente los datos de la base de datos principal (base de escritura) a la base de datos secundaria (base de lectura). Una base de datos principal corresponde a varias bases de datos secundarias, y los datos de la base principal se sincronizan en tiempo real con las secundarias.

3) Hay múltiples bases de datos de escritura, y cada una puede ser utilizada por varias aplicaciones. Esto resuelve los problemas de cuello de botella de rendimiento y de punto único de fallo de la base de datos de escritura.

4) Hay múltiples bases de datos de lectura, y el balanceo de carga se implementa mediante dispositivos de balanceo de carga, logrando así un alto rendimiento, alta confiabilidad y alta escalabilidad de la base de datos de lectura.

5) Separar los servidores de base de datos de los servidores de aplicaciones.

6) Usar BigIP para el balanceo de carga de las bases de datos secundarias.

Sistema de caché

La caché se divide en caché de archivos, caché de memoria y caché de base de datos. En aplicaciones web a gran escala, la más utilizada y eficiente es la caché de memoria. La herramienta de caché de memoria más común es Memcached. Utilizar el sistema de caché correcto puede lograr los siguientes objetivos:

1. El uso de un sistema de caché puede mejorar la eficiencia de acceso, aumentar el rendimiento del servidor y mejorar la experiencia del usuario.

2. Aliviar la presión de acceso a la base de datos y a los servidores de almacenamiento.

3. Hay varios servidores Memcached para evitar puntos únicos de fallo, proporcionar alta confiabilidad y escalabilidad, y mejorar el rendimiento.

Sistema de almacenamiento distribuido

Diagrama de estructura:

Los requisitos de almacenamiento en la plataforma de sistemas web tienen las siguientes dos características:

1) El volumen de almacenamiento es muy grande, a menudo alcanza una escala que un solo servidor no puede proporcionar, como en aplicaciones de álbumes de fotos, videos, etc. Por lo tanto, se necesita un sistema de almacenamiento profesional a gran escala.

2) Cada nodo en el clúster de balanceo de carga puede acceder a cualquier objeto de datos, y el procesamiento de datos de cada nodo también puede ser compartido por otros nodos. Por lo tanto, los datos que estos nodos necesitan operar solo pueden ser, desde un punto de vista lógico, un todo único, no recursos de datos independientes entre sí.

Por lo tanto, un sistema de almacenamiento distribuido de alto rendimiento es un componente muy importante para aplicaciones de sitios web a gran escala. (Aquí se necesita agregar una breve introducción a algún sistema de almacenamiento distribuido.)

Sistema de gestión distribuida de servidores

Diagrama de estructura:

A medida que el tráfico de acceso del sitio web continúa aumentando, la mayoría de los servicios web se ofrecen al exterior mediante clústeres de balanceo de carga. Con la expansión de la escala del clúster, el modelo de administración de servidores basado en una sola máquina ya no puede satisfacer nuestras necesidades. Los nuevos requisitos deben poder administrar servidores de manera centralizada, agrupada, por lotes y automatizada, y poder ejecutar tareas programadas por lotes.

Entre los software de sistemas de gestión distribuida de servidores hay algunos muy buenos; uno de los más ideales es Cfengine. Puede agrupar servidores, y diferentes grupos pueden personalizar archivos de configuración del sistema, tareas programadas y otras configuraciones. Está basado en una arquitectura C/S. Todos los scripts de configuración y administración del servidor se almacenan en el servidor Cfengine, mientras que los servidores administrados ejecutan el programa cliente Cfengine. El cliente Cfengine envía solicitudes periódicamente al servidor a través de una conexión cifrada SSL para obtener los archivos de configuración más recientes y tareas como comandos de administración, scripts, instalación de parches, etc.

Con una herramienta de administración de servidores centralizada como Cfengine, podemos lograr eficientemente la administración de clústeres de servidores a gran escala. Los servidores administrados y el servidor Cfengine pueden distribuirse en cualquier ubicación; siempre que la red esté conectada, se puede lograr una administración rápida y automatizada.

Sistema de publicación de código

Diagrama de estructura:

A medida que el tráfico de acceso del sitio web continúa aumentando, la mayoría de los servicios web se ofrecen al exterior mediante clústeres de balanceo de carga. Con la expansión de la escala del clúster, para satisfacer la distribución y actualización por lotes del código de programa en un entorno de clúster, también necesitamos un sistema de publicación de código de programa.

Este sistema de publicación puede ayudarnos a lograr los siguientes objetivos:

1) Los servidores del entorno de producción brindan servicios mediante hosting virtual. No se requiere que los desarrolladores intervengan en el mantenimiento ni operen directamente. Con el sistema de publicación, se puede distribuir el programa a los servidores de destino sin necesidad de iniciar sesión en el servidor.

2) Debemos implementar la gestión de las cuatro etapas de desarrollo: desarrollo interno, pruebas internas, pruebas en entorno de producción y publicación en entorno de producción. El sistema de publicación puede intervenir en la publicación de código de cada etapa.

3) Necesitamos implementar gestión de código fuente y control de versiones; SVN puede cumplir este requisito.

Aquí se puede utilizar la herramienta común Rsync. Mediante el desarrollo de scripts adecuados, se logra la sincronización y distribución del código entre clústeres de servidores.

Fuente: http://blog.csdn.net/dinglang_2009/article/details/6863697