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.
- ¿Cuál es la mejor manera de desarrollar una aplicación web en .NET?
- ¿Qué hay de nuevo en Node.js 6?
- Cómo crear una miniatura con una descripción en la lista desplegable en HTML CSS
- ¿Qué tipo de sitios web debe hacer un principiante para practicar su HTML y CSS?
- ¿La demanda de AngularJS es mucho mayor en el desarrollo web?
- 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”.
- Existen, por supuesto, versiones Java y Objective C para dispositivos móviles.
- Hay versiones renderizadas del lado del servidor (supongo) para dispositivos más antiguos.
- 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.
- Hay versiones del front-end para web móvil.
- 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:
- Hay firewalls frontales y sistemas de filtrado de seguridad para detectar y matar ataques DDos.
- Hay equilibradores de carga que distribuyen la carga en múltiples servidores API front-end.
- Existe un sistema de seguridad masivo para almacenar y administrar la identidad y los derechos de los usuarios.
- 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.
- 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.
- 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. .
- 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.
- 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.
- Obviamente, tenemos una enorme cantidad de sistemas monstruosos para aceptar / enrutar correos electrónicos.
- Existen sistemas de aprendizaje automático para detectar ataques y filtrar spam.
- 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.