Estoy tratando de descubrir algo para lo que simplemente no puedo encontrar una buena respuesta.
Si he dicho un caché REDIS (o algún caché externo en memoria) ubicado en un centro de datos, y un servidor de aplicaciones ubicado en el mismo centro de datos, ¿cuál será la velocidad de la conexión de red (latencia, rendimiento) para leer datos entre estas dos máquinas?
¿La "velocidad" de la red, por ejemplo, seguirá siendo al menos un orden de magnitud mayor que la velocidad de la RAM que busca mis datos fuera de la caché en REDIS?
Mi última pregunta es: ¿tener todo esto en memoria en REDIS realmente proporciona alguna utilidad? En contraste con si REDIS estaba almacenando todo esto en un SSD? La memoria es cara. Si la red no es un cuello de botella DENTRO del centro de datos, entonces la memoria tiene valor. De lo contrario, no lo hace.
Supongo que mi pregunta general es a pesar de las grandes incógnitas en los centros de datos y la incapacidad de generalizar, así como las variaciones, ¿estamos hablando de órdenes de magnitud suficientes entre la latencia de la memoria en un sistema informático e incluso las mejores redes internas de un DC que la memoria ¿Las latencias reducidas no proporcionan una mejora significativa del rendimiento? Entiendo que hay muchas variables, pero ¿qué tan cerca está? ¿Está tan cerca que estas variables son importantes? Por ejemplo, adopte una postura hiperbólica, una unidad de cinta es MUCHO más lenta que la red, por lo que la cinta no es ideal para un caché.
Respuestas:
Hay varias versiones de los "gráficos de latencia que todos deberían conocer", tales como:
La cuestión es que, en realidad, hay más que solo latencia. Es una combinación de factores.
Entonces, ¿cuál es la latencia de red dentro de un centro de datos? Latencia, bueno yo diría que es "siempre" por debajo de 1 ms. ¿Es más rápido que la RAM? No. ¿Está cerca de la RAM? No lo creo.
Pero la pregunta sigue siendo relevante. ¿Es ese el dato que necesitas saber? Tu pregunta tiene sentido para mí. Como todo tiene un costo, debe obtener más RAM para que todos los datos puedan permanecer en la RAM o está bien leer de disco de vez en cuando.
Su "suposición" es que si la latencia de la red es mayor (más lenta) que la velocidad de la SSD, no obtendrá ganancias al tener todos los datos en la RAM, ya que tendrá la lentitud en la red.
Y parece que sí. Pero también debes tener en cuenta la concurrencia. Si recibe 1,000 solicitudes de datos a la vez, ¿puede el disco hacer 1,000 solicitudes concurrentes? Por supuesto que no, entonces, ¿cuánto tiempo tomará atender esas 1,000 solicitudes? En comparación con la RAM?
Es difícil reducirlo a un solo factor, como cargas pesadas. Pero sí, si tuviera una sola operación, la latencia de la red es tal que probablemente no notará la diferencia de SSD frente a RAM.
Al igual que hasta que apareció un disco de 12 Gbps en el mercado, un enlace de red de 10 Gbps no se sobrecargaría con una sola transmisión, ya que el disco era el cuello de botella.
Pero recuerde que su disco está haciendo muchas otras cosas, su proceso no es el único proceso en la máquina, su red puede transportar cosas diferentes, etc.
Además, no toda la actividad del disco significa tráfico de red. La consulta de la base de datos que proviene de una aplicación al servidor de la base de datos es solo un tráfico de red muy mínimo. La respuesta del servidor de la base de datos puede ser muy pequeña (un solo número) o muy grande (miles de filas con múltiples campos). Para realizar la operación, un servidor (servidor de base de datos o no) puede necesitar realizar múltiples búsquedas, lecturas y escrituras en el disco, pero solo enviar un pequeño bit de regreso a través de la red. Definitivamente no es uno-por-uno-red-disco-RAM.
Hasta ahora evité algunos detalles de su pregunta, específicamente, la parte de Redis.
OK, eso significa que todo está en la memoria. Lo sentimos, este disco SSD rápido no te ayudará aquí. Redis puede conservar los datos en el disco, por lo que puede cargarse en la RAM después de un reinicio. Eso es solo para no "perder" datos o tener que repoblar un caché en frío después de un reinicio. Entonces, en este caso, tendrá que usar la RAM, pase lo que pase. Tendrá que tener suficiente RAM para contener su conjunto de datos. No hay suficiente RAM y supongo que su sistema operativo usará
swap
, probablemente no sea una buena idea.fuente
Hay muchas capas de caché en los sistemas informáticos. Insertar uno en la capa de aplicación puede ser beneficioso, almacenando en caché las consultas de la base de datos y la API. Y posiblemente datos temporales como sesiones de usuario.
Los almacenes de datos como Redis proporcionan dicho servicio a través de una red (rápida) o un socket UNIX (incluso más rápido), de forma muy similar a como usaría una base de datos.
Debe medir el rendimiento de su aplicación, pero inventemos un ejemplo. Digamos que una solicitud de usuario común realiza 5 consultas API que toman 50 ms cada una. 250 ms es latencia detectable por el usuario. Contraste al almacenamiento en caché de los resultados. Incluso si el caché está en una zona de disponibilidad diferente en la ciudad (no es óptima), los hits son probablemente de 10 ms como máximo. Lo que sería una aceleración de 5x.
En realidad, la base de datos y los sistemas de almacenamiento también tienen sus propios cachés. Sin embargo, por lo general, es más rápido obtener un resultado previamente obtenido que volver a pasar por el motor de la base de datos y las capas del sistema de almacenamiento. Además, la capa de almacenamiento en caché puede quitar una carga significativa de la base de datos detrás de ella.
Para ver un ejemplo de este tipo de caché en producción, no busque más que el blog de infraestructura Stack Overflow sobre arquitectura . Cientos de miles de solicitudes HTTP que generan miles de millones de visitas de Redis son bastante significativas.
La DRAM a tiempos de acceso de 100 ns es aproximadamente 100 veces más rápida que el almacenamiento permanente en estado sólido. Es relativamente barato para este rendimiento. Para muchas aplicaciones, un poco más de RAM compra una velocidad y un tiempo de respuesta valiosos.
fuente