Cálculo del reverso del sobre: diseño del sistema 04

diseño-de-sistema-diseño-de-sistema04-contraportada-cálculo-reverso-del-sobre-hogantech-hoganblab

Prefacio

El reverso del sobre, también conocido como cálculo del reverso del sobre, es un método para calcular valores aproximados de problemas complejos utilizando estimaciones simples.Repasemos también aquí. Un sistema descentralizado consta de nodos informáticos conectados a través de una red. Estos nodos pueden ser varios tipos de servidores, como servidores web, servidores de aplicaciones y servidores de almacenamiento.

Al diseñar un sistema descentralizado, es importante comprender la cantidad de solicitudes que puede manejar cada nodo. Al mismo tiempo, también podemos determinar la cantidad requerida de nodos y tráfico, por lo que usaremos el reverso del sobre para calcular nuestra estimación aproximada y, finalmente, diseñaremos el sistema que necesitamos.

Reverso del sobre

En realidad, los sistemas distribuidos están compuestos por nodos informáticos conectados a través de la red. También existen varios nodos informáticos en los sistemas de software del mercado, y están conectados de muchas formas diferentes. El reverso del sobre puede ayudarnos a ignorar los detalles del sistema y centrarnos en aspectos más importantes, como los conceptos abstractos mencionados en el artículo anterior.

A continuación se muestra un ejemplo de reverso del sobre:

  • El número de conexiones TCP simultáneas que el servidor puede aceptar.
  • El número de solicitudes por segundo (RPS) que puede manejar una página web, una base de datos o un servidor de caché.
  • Necesidades de almacenamiento del servicio.

En estos casos, pueden producirse fallos en el diseño del software si se calculan cifras irrazonables. Por lo tanto, al diseñar el sistema, debemos utilizar el reverso del sobre para hacer estimaciones aproximadas y luego optimizar y expandir nuestro sistema.

Tipo de servidor del centro de datos

Los centros de datos no solo tienen un tipo de servidor. Las soluciones empresariales utilizan hardware básico para reducir costos y encontrar soluciones para desarrollar sistemas escalables. Los siguientes se usan comúnmente en los centros de datos para manejar diferentes cargas de trabajo (Workload) Tipo de servidor:

Servidor web

Por motivos de escalabilidad, los servidores web están separados de los servidores de aplicaciones. El servidor web es el primer nodo después del equilibrador de carga (Work Balancer). El servidor web también es el servidor que maneja las llamadas API desde el lado del cliente. Por lo general, los recursos de memoria y almacenamiento varían según las necesidades. Por supuesto, normalmente cuanto mayor sea la memoria y la capacidad de almacenamiento, mejores recursos tendrá el servidor para procesar. Por ejemplo: Meta utiliza un servidor con 32 GB de RAM y 500 GB de capacidad para realizar una gran cantidad de cálculos.

Servidor de aplicaciones

Los servidores de aplicaciones se utilizan para manejar la lógica empresarial y de aplicaciones. Sin embargo, suele ser difícil distinguir entre servidores web y servidores de aplicaciones. Las siguientes son las diferencias entre ellos. Los servidores de aplicaciones proporcionan contenido dinámico, mientras que los servidores web proporcionan principalmente contenido estático a los navegadores de los clientes.

Servidor de almacenamiento

A medida que Internet se desarrolle cada vez más, la cantidad de datos que cualquier servicio de red necesita almacenar también aumentará explosivamente debido al tráfico y la escala. Por lo tanto, necesitamos un servidor de almacenamiento (que puede entenderse como un servidor de base de datos dedicado) para manejar. enormes cantidades de datos. También necesitamos seleccionar bases de datos apropiadas basadas en diferentes tipos de datos. Por ejemplo: Youtube utiliza las siguientes bases de datos:

  • Utilice Blob Storage para almacenar datos de vídeo compilados.
  • Utilice Bigtable específicamente para almacenar grandes cantidades de miniaturas de vídeos.
  • Utilice RDBMS para almacenar datos de usuarios y vídeos, como comentarios y datos de me gusta.
  • Utilice SQL y NoSQL para almacenar varios tipos de datos para el análisis de datos.

Estándares comunes

El diseño, planificación e implementación de servicios del sistema requieren una gran inversión de dinero, tiempo y mano de obra. Si no conocemos los tipos de cargas de trabajo que la máquina puede manejar, es difícil seguir diseñando. La latencia es algo muy importante que nos permite juzgar qué máquinas son adecuadas para qué cargas de trabajo. Recursos encontrados en Github, y convertido en una tabla para referencia de los lectores.

Demora

 

proyectoTiempo (nanosegundos)
Ejecutar una instrucción1/1.000.000.000 segundos = 1 nanosegundo
Obtener de la caché L10,5 nanosegundos
error de predicción de rama5 nanosegundos
Obtener de la caché L27 nanosegundos
Bloqueo/desbloqueo mutex25 nanosegundos
Recuperar de la memoria principal100 nanosegundos
Envíe 2K bytes a través de una red de 1Gbps20.000 nanosegundos
Leer 1 MB secuencialmente de la memoria250.000 nanosegundos
Extraer de la nueva ubicación del disco (buscar)8.000.000 nanosegundos
Leer 1 MB secuencialmente desde el disco20.000.000 nanosegundos
Envía paquetes de datos a Estados Unidos y viceversa.150 milisegundos = 150.000.000 nanosegundos

QPS

Además de las latencias enumeradas anteriormente, también existen consultas por segundo (QPS), que mide el volumen de consultas de la base de datos.

tasa importante Consultas por segundo (QPS)
QPS procesado por MySQL 1000
QPS de procesamiento de bases de datos de valores clave 10,000
QPS procesado por caché 100.000 – 1 millón

Cantidad unitaria

índice aproximación nombre completo abreviatura
10 Mil Kilobyte KB
20 Millón Megabyte MEGABYTE
30 mil millones gigabytes ES
40 Billón Terabyte tuberculosis

Calcular el volumen de solicitudes

A continuación, expliquemos, ¿cuál es la cantidad de solicitudes que el servidor puede manejar por segundo, Solicitudes por segundo (RPS)?

Dentro del servidor, los recursos son limitados y, según el tipo de solicitud del cliente, pueden producirse cuellos de botella en el sistema.

Principalmente podemos dividirlo en dos tipos de solicitudes:

  • Solicitudes vinculadas a la CPU: El factor limitante para este tipo de solicitudes es la CPU.
  • Solicitudes vinculadas a la memoria: Estas solicitudes están sujetas a limitaciones de memoria.

Solicitudes vinculadas a la CPU

Una fórmula común para calcular el RPS para solicitudes con uso intensivo de CPU es:

				
					RPS-CPU = Núm.-CPU x 1 / Tiempo-tarea
				
			

Entre ellos, el significado de cada variable es el siguiente:

  • RPS-CPU: RPS con uso intensivo de CPU
  • Num-CPU: Número de subprocesos de CPU
  • Tiempo de tarea: el tiempo necesario para completar cada tarea.

Solicitudes vinculadas a la memoria

Para solicitudes que consumen mucha memoria, utilizamos la siguiente fórmula:

				
					Memoria-RPS = Memoria-Trabajador / Tamaño RAM x 1 / Tiempo-Tarea
				
			

Entre ellos, el significado de cada variable es el siguiente:

  • RPS-Memory: RPS con uso intensivo de memoria
  • Tamaño de RAM: tamaño de RAM
  • Worker-Memory: el trabajador utilizado por la memoria para administrar la memoria.

El servicio recibe solicitudes que consumen mucha memoria y CPU. Suponiendo que la mitad de las solicitudes consumen mucha CPU y la otra mitad consumen mucha memoria, el RPS total que podemos manejar es:

				
					RPS = (RPS-CPU + RPS-Memoria) / 2
				
			

Los cálculos anteriores son sólo para comprender la aproximación de la estimación de RPS. En realidad, puede haber muchos otros factores que afecten a RPS. Por ejemplo: si los datos no están en la RAM, o se realiza una solicitud al servidor de la base de datos, se requiere una búsqueda de disco (Seek), lo que genera un retraso. Otros factores incluyen: fallas, errores en el código del programa, fallas de nodos, cortes de energía, interrupciones de la red, etc., todos los cuales son factores inevitables.

Tipos de informática en entrevistas de diseño de sistemas

En una entrevista de diseño de sistema, es posible que necesitemos realizar los siguientes tipos de estimaciones:

  1. Estimación de carga: Prediga la cantidad de solicitudes, el volumen de datos o el tráfico de usuarios que su sistema puede esperar por segundo.
  2. Estimación de almacenamiento: Calcule la cantidad de espacio de almacenamiento necesario para procesar los datos generados por su sistema.
  3. Estimación del ancho de banda: Tráfico previsto y ancho de banda de red necesarios para la transferencia de datos.
  4. Estimación de latencia: Arquitectura del sistema y componentes para predecir tiempos de respuesta y latencias.
  5. Estimación de recursos: Calcule la cantidad de servidores, CPU o memoria necesarios para manejar la carga.

Ejemplo práctico de cálculo de contraportada

Estimación de carga

Suponga que desea diseñar una plataforma de redes sociales con 100 millones de usuarios activos diarios (DAU) y cada usuario publica un promedio de 10 publicaciones por día. Para calcular la carga, necesitamos contar el número total de publicaciones generadas por día:

				
					100 millones de DAU * 10 publicaciones/usuario = mil millones de publicaciones/día
				
			

Luego calcule el número de solicitudes por segundo:

				
					Mil millones de publicaciones/día/86.400 segundos/día = 11.574 solicitudes/segundo
				
			

Estimación de almacenamiento

Considere una aplicación para compartir fotografías con 500 millones de usuarios, cada uno de los cuales carga un promedio de 2 fotografías por día. El tamaño medio de cada fotografía es de 2 MB. Para estimar el espacio de almacenamiento necesario para las fotografías de un día, calcule de la siguiente manera:

				
					500 millones de usuarios* 2 fotos/usuario* 2 MB/foto = 2.000.000.000 MB/día
				
			

Estimación del ancho de banda

Para un servicio de transmisión de video con 10 millones de usuarios que transmiten video de 1080p a 4 Mbps, se puede calcular el ancho de banda requerido:

				
					10 millones de usuarios * 4 Mbps = 40.000.000 Mbps
				
			

Estimación de latencia

Suponga que desea diseñar una API que obtenga datos de múltiples fuentes y sabe que la latencia promedio de cada fuente es 50 milisegundos, 100 milisegundos y 200 milisegundos. Calcule la latencia de la siguiente manera:

				
					50 milisegundos + 100 milisegundos + 200 milisegundos = 350 milisegundos
				
			

Si el proceso es paralelo (Parallel), el retraso total será el retraso máximo:

				
					máx(50 ms, 100 ms, 200 ms) = 200 ms
				
			

Estimación de recursos

Si tuviera que diseñar un sistema que recibiera 10.000 solicitudes por segundo, cada solicitud requeriría 10 milisegundos de tiempo de CPU. Para calcular la cantidad de núcleos de CPU necesarios, simplemente calcule el tiempo total de CPU por segundo:

				
					10.000 solicitudes/segundo * 10 milisegundos/solicitud = 100.000 milisegundos/segundo
				
			

En este momento, también podemos suponer que cada núcleo de CPU puede manejar 1000 milisegundos, entonces la cantidad de núcleos necesarios es:

				
					100.000 ms/seg/1.000 ms/núcleo = 100 núcleos
				
			

Conclusión

El reverso del sobre es un método para estimar rápidamente los requisitos del sistema y puede usarse en las primeras etapas del diseño del sistema. Este enfoque permite tomar decisiones de diseño efectivas y evita problemas en etapas posteriores.

A continuación se presentan algunas consideraciones para el diseño de sistemas utilizando el reverso del sobre:

  • El reverso del sobre sólo puede proporcionar una estimación aproximada. Si existe una situación real de diseño del sistema, se requiere un análisis detallado.
  • Al realizar la revisión preliminar, se deben considerar todos los factores principales del sistema, incluidos el hardware, el software y la red.

Cita

Aprenda usted mismo a programar en diez años

Artículos relacionados

Características no funcionales del diseño de software – Diseño de sistemas 03

Aplicación de la abstracción en el diseño de sistemas – Diseño de sistemas 02

Introducción al diseño de sistemas modernos – Diseño de sistemas 01

Experiencia de entrevista de ingeniero de software de Yahoo! 2023

es_ESEspañol