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?