es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Conceptos básicos sobre cómo un sistema distribuido y consistente de almacenamiento clave-valor devuelve la clave más reciente al tratar con solicitudes concurrentes.

Estoy poniéndome al día en sistemas distribuidos (estudiando para una próxima entrevista) y específicamente en los fundamentos de cómo funciona un sistema distribuido para un sistema de almacenamiento clave-valor distribuido y consistente administrado en memoria.

Tengo preguntas específicas en las que estoy atascado y me encantaría tener una respuesta de alto nivel si no es molestia:

#1
Digamos que tenemos 5 servidores que son responsables de actuar como lectores, y tengo un escritor. Cuando escribo el valor ‘foo’ en la clave ‘k1’, entiendo que tiene que propagarse a todos esos servidores para que todos almacenen el valor ‘foo’ para la clave k1. ¿Es esto correcto, o el escritor solo escribe en la mayoría (quórum) para que funcione?

#2
Después de que ocurra #1, supongamos que concurrentemente llega una lectura para k1 y una escritura para reemplazar ‘foo’ por ‘bar’, sin embargo, no todos los servidores se actualizan con ‘bar’. Esto significa que algunos son ‘foo’ y algunos son ‘bar’. Si tuviera muchas lecturas concurrentes, es concebible que algunas devuelvan ‘foo’ y otras ‘bar’ ya que aún no está actualizado en todos lados.

Cuando hablamos de consistencia eventual, esto es esperado, pero si estamos hablando de consistencia fuerte, ¿cómo se evita lo mencionado en #2? Sigo viendo contenido sobre quórum y marcas de tiempo, pero a alto nivel, ¿hay alguna especie de intermediario que resuelva cuál es el valor correcto? Solo quería tener una idea básica antes de profundizar más.

¡Muchas gracias por cualquier ayuda!

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    #1

    En un sistema distribuido, el escritor escribiría el valor ‘foo’ en la clave ‘k1’ en su propio almacenamiento local, así como en un subconjunto de servidores (quórum) responsables de manejar las escrituras. Una vez que el quórum reconoce la escritura, el escritor consideraría que la escritura fue exitosa y devolvería una respuesta al cliente. El subconjunto de servidores luego coordinaría entre sí para propagar la escritura al resto de los servidores responsables de la lectura, asegurando que todos los servidores eventualmente tengan el mismo valor para la clave ‘k1’.

    #2

    Para garantizar una consistencia fuerte, el sistema debería asegurarse de que todos los servidores responsables de la lectura tengan el mismo valor para la clave ‘k1’ antes de cumplir una solicitud de lectura. Esto se puede lograr utilizando una técnica llamada ‘consenso’, que garantiza que todos los servidores estén de acuerdo sobre el valor correcto para una clave al requerir que cierto número de servidores acuerden (quórum) antes de considerar que el valor es válido. El quórum puede determinarse en función del número de servidores en el sistema y la cantidad de tolerancia a fallas deseada. También se pueden utilizar marcas de tiempo para asegurar que siempre se devuelva el valor más reciente para una clave. Si llega una solicitud de lectura y no todos los servidores tienen el mismo valor para la clave, el sistema esperará hasta que se alcance el consenso antes de cumplir la solicitud.

Comments are closed.