¿Cómo se hace una aplicación web compleja?

Uf. Ok, una respuesta completa a esta pregunta tomaría literalmente varios libros.

Piense en la cantidad de información que GMail tiene que almacenar: millones de personas almacenan miles de gigabytes de datos y todos esperan que todo sea instantáneo. Con mucha seguridad. Y miles de personas se unen todos los días.

Los sitios como GMail consisten en cientos de servicios repartidos en cientos de miles (sí, 100,000) de máquinas. Déjame desglosar algunos de los componentes para ti.

  1. Hay múltiples sistemas front-end, típicamente. Habrá un sistema front-end escrito en JavaScript / HTML / CSS que está dirigido a los navegadores modernos “perennes”.
  2. Existen, por supuesto, versiones Java y Objective C para dispositivos móviles.
  3. Hay versiones renderizadas del lado del servidor (supongo) para dispositivos más antiguos.
  4. Incluso hay versiones más simples para dispositivos más antiguos, como teléfonos celulares viejos con un ancho de banda muy limitado. Se ha realizado un trabajo muy complejo para reducir el ancho de banda y hacer que sistemas como GMail puedan utilizarse en estos dispositivos, que se encuentran en los países del segundo y tercer mundo.
  5. Hay versiones del front-end para web móvil.
  6. También hay un CDN para distribuir los diversos artefactos compartidos que componen los componentes del sistema basado en la web.

Ok, ese es el frente. Estos se comunican con los servicios de fondo utilizando API y estas API atraviesan una gran cantidad de sistemas. No puedo enumerarlos a todos, pero aquí hay algunos subsistemas probables:

  1. Hay firewalls frontales y sistemas de filtrado de seguridad para detectar y matar ataques DDos.
  2. Hay equilibradores de carga que distribuyen la carga en múltiples servidores API front-end.
  3. Existe un sistema de seguridad masivo para almacenar y administrar la identidad y los derechos de los usuarios.
  4. Hay un sistema de búsqueda masivo para realizar una indexación de correos electrónicos casi en tiempo real que le permite buscar en su bandeja de entrada.
  5. Existe un sistema masivo de recolección de basura para limpiar la basura, hacer compactación y almacenamiento de datos antiguos, manejar la replicación y las copias de seguridad.
  6. Existe un sistema de coordinación, por ejemplo, algo así como Borg, para manejar el aprovisionamiento de nuevas “máquinas” y la detección, curación y reemplazo automático de máquinas que mueren, lo que a esta escala probablemente ocurra al menos unas docenas de veces al día. .
  7. Hay un monstruoso sistema de almacenamiento al que se agrega constantemente capacidad para almacenar archivos adjuntos y archivos, probablemente también para indexar los tipos de archivos que se pueden indexar.
  8. Hay una monstruosa base de datos estilo BigTable para almacenar configuraciones de usuario, etiquetas de correo electrónico y carpetas, y otros datos de tipo clave-valor.
  9. Obviamente, tenemos una enorme cantidad de sistemas monstruosos para aceptar / enrutar correos electrónicos.
  10. Existen sistemas de aprendizaje automático para detectar ataques y filtrar spam.
  11. Hay sistemas que manejan el correo electrónico entrante, probablemente a través de sistemas de colas masivas, y aplican sus diversas reglas de bandeja de entrada / enrutamiento / filtrado.

No dejaré de lado otros sistemas, como administración de anuncios, sistemas de recomendación, registro, monitoreo, meta-monitoreo, análisis, almacenamiento en caché, sistemas de compilación, sistemas de prueba, laboratorios de rendimiento y remojo, etc.

GMail es GRANDE.

HTML y CSS se utilizan principalmente para controlar el diseño y la apariencia de la aplicación.

Javascript se utiliza para hacer que las interacciones sean más dinámicas y para realizar solicitudes sin interrupciones a los módulos del lado del servidor (por ejemplo, cuando hace clic en un mensaje en Gmail, una función de Javascript le pide al servidor de Google el contenido de ese mensaje y luego lo muestra en su pantalla).

La mayoría de los datos residen en bases de datos, también en servidores remotos, y puede usar SQL para hacer preguntas a la base de datos y recuperar datos que coincidan con su pregunta o criterio.

Finalmente, los módulos del lado del servidor están escritos en varios lenguajes como Java, Scala, Erlang, Go, PHP / Hack, Python, Node, etc. Ejemplos como Google o Facebook pueden tener diferentes componentes escritos en diferentes idiomas.

No puede escribir ninguna aplicación completamente en HTML. HTML es un lenguaje de marcado. Puede escribir una aplicación en Javascript, que se ejecuta en el navegador del usuario y realiza operaciones que no dependen de la conversión de unidades de datos externas, por ejemplo.

Las aplicaciones complejas generalmente dependen de una base de datos en el servidor. Ciertamente, algo como Gmail que acepta y envía correo debe ejecutarse en el servidor: el correo enviado directamente desde un escritorio generalmente se considera spam, y los navegadores tienen bloqueado el acceso a los protocolos de correo. Una aplicación web podría estar escrita en un lenguaje de secuencias de comandos web como PHP que se ejecuta en el servidor, o en un lenguaje compilado como C. Para un mayor rendimiento, se utilizaría un lenguaje compilado.

OK, mirando cómo hiciste la pregunta, parece que es nueva o quieres ser nuevo en el desarrollo, cuando respondí esto allí, 4 respuestas realmente buenas, así que voy a tratar de hacer algo diferente y lograrlo desde un perspectiva diferente y arquitectura de espectáculos.

OK, como la gente ha dicho y usted ha dicho en su descripción, los sitios web tienen HTML y CSS y también tienen script Java. Todo esto es tu front-end. En general, es su área estándar de interacciones humano-computadora. el HTML pone controles en la pantalla, el CSS los pinta y los posiciona, y el script java les permite ser interactivos hasta cierto punto, pero solo en reacción a lo que el usuario hace … por ejemplo mostrar / ocultar. En realidad no estás quitando o insertando cosas, solo estás cambiando la ‘pintura’. El script Java puede crear objetos … pero son como fantasmas, realmente no existen. para eso tendrías que hacerlos en la parte de atrás …

La segunda capa es el back-end, aquí es donde obtienes el servidor web para hacer cosas. Entonces, en su ejemplo de una aplicación de correo electrónico, el back-end recopilaría todos sus datos de correo electrónico (de la base de datos) y los uniría con sus controles en el front-end. Además, cuando hace clic en el botón Enviar correo electrónico, tomaría todos los datos del correo electrónico y los pasaría al servidor de correo. El back-end puede ser un poco difícil de jugar porque cuando haces clic en un botón en el front-end, se inicia un ciclo de vida completo de la página. Algunas de las cosas más comunes con las que jugaría poeple estarían en la carga de la página, por lo que cada vez que hace clic en un botón, se ejecuta este conjunto de instrucciones. recuerde que dije en la parte frontal que puede hacer fantasmas, bueno, en la carga de la página es donde puede hacer que esos fantasmas tengan sustancia.

La tercera capa es la capa de la base de datos. Aquí es donde se realiza gran parte del trabajo carnoso. Sí, puedes descifrar números y cosas en el frente o en la parte trasera, pero piénsalo de esta manera, imagina que es una planta de fabricación de automóviles. Tienes 3 secciones principales, la carrocería, la electricidad y la pintura. Seguro que podrías hacer trabajo de carrocería donde pintas el auto, pero el área de pintura está configurada para pintar, ¿por qué moverías todas las herramientas de un área a la siguiente? ¿O peor aún, mover el automóvil hacia adelante y hacia atrás a través de los talleres?

Entonces diría que la mayoría de las grandes aplicaciones en línea se pueden poner en este marco simple. El truco es saber qué trabajo se debe hacer, dónde ser más eficiente y no hacer que el usuario vea un ícono de temporizador mientras el sistema procesa las cosas en el entorno incorrecto

No sé sobre más legible, pero los sitios web están hechos con muchas piezas complejas que trabajan juntas. HTML maneja el diseño de una página, pero toda la funcionalidad proviene del software que se está ejecutando en el lado del cliente … en otras palabras, su propia computadora … o el lado del servidor, que es el servidor donde se encuentra la URL (la dirección www) buscando. Este software puede estar escrito en varios idiomas … python, php, Java, etc. La programación web es una industria muy popular, aprende y será una carrera muy lucrativa.

La interfaz básica está escrita en HTML, y luego toda la funcionalidad generalmente está escrita en JavaScript. Cada vez que se realiza un cambio, el JavaScript envía información a un servidor, donde luego se escribe en una base de datos de algún tipo para que pueda almacenarse y recuperarse más tarde.