¿Algún beneficio para la prueba de trabajo para evitar búsquedas en la base de datos?

1

Pensé que estaba siendo inteligente: estaba diseñando demasiado una aplicación móvil (solo para mi aprendizaje) que se amplía utilizando solo tecnologías distribuidas (AWS Lambda, S3 y Dynamo DB en este caso). Quiero permitir que las aplicaciones se registren en la base de datos, pero estoy tratando de limitar las consultas y escrituras de la base de datos que debo realizar en caso de que alguien intente aumentar mis costos al enviar correo basura con la actividad de la base de datos. Experimenté con un esquema de prueba de trabajo en el que un manejador de llamadas de api / service genera una asignación firmada (todo en la memoria, no en una base de datos) que la aplicación móvil debe realizar, que luego es verificada por otra llamada de API antes de escribir el nuevo registro. a la base de datos. Bien, haré el trabajo, pero tienen que hacer más , que no es una carga para el cliente que coopera, pero que podría ser un impedimento para un cliente malicioso.

Pero luego me di cuenta de que sin rastrear las presentaciones, el cliente malintencionado puede hacer el trabajo de verdad por una vez, pero luego simplemente enviarme un correo no deseado por el resto de la ventana de validez de la asignación (antes de que caduque) y aún así requerir mis búsquedas en la base de datos. La ventana antes del vencimiento tendría que ser al menos el peor de los casos de hardware cliente compatible con peor rendimiento, lo que dejaría mucho tiempo para problemas.

Además, debido a que mi base de datos simplemente es consistente, no sé cómo evitar las solicitudes de doble emisión a los nodos de replicación aislados en cualquier caso.

No hay un estado compartido ni una afinidad de host entre el procesamiento de lambda api controlado por eventos. Dynamo DB es (creo) solo eventualmente consistente. MemCache o Redis (ofrecido por ElastiCache).

Estos son relevantes:

¿Hay algún beneficio en absoluto al agregar una prueba de trabajo? ¿O es que alguna complejidad adicional simplemente aplaza el 100% del problema que es inevitable (al tiempo que introduce nuevos puntos de falla)?

¿Hay algún esquema de registro anónimo que sea compatible con la eventualidad de la consistencia y que requiera más registro que el registro?

    
pregunta Jason Kleban 10.01.2016 - 01:52
fuente

1 respuesta

1

Estás haciendo varias preguntas muy diferentes.

  

Estoy tratando de limitar las consultas de la base de datos y las escrituras que debo realizar en caso de que alguien intente hacer que mis costos sean muy altos

Deberías tener una puerta de enlace (por ejemplo, Amazon Lambda) que admita la limitación de velocidad. Con este juguete en tus manos, podrás configurar el número de solicitudes permitidas. Hay puertas de enlace genéricas disponibles si las cosas estándar no son adecuadas o no están disponibles, por ejemplo. Umbrella .

  

... cómo evitar solicitudes de doble emisión a nodos de replicación aislados

Usted hace esto configurando el quórum de escritura. Más nodos en el quórum: mejor consistencia pero velocidad de escritura más lenta (esto se conoce como teorema de CAP).

  

No hay estado compartido ...

Esto es por diseño, el estado compartido es un factor que mata el rendimiento, especialmente en entornos distribuidos.

    
respondido por el oleksii 10.01.2016 - 22:23
fuente

Lea otras preguntas en las etiquetas