Pensavo di essere intelligente - progettare eccessivamente un'app mobile (solo per il mio apprendimento) che viene ridimensionata utilizzando solo tecnologie distribuite (AWS Lambda, S3 e Dynamo DB in questo caso). Voglio consentire alle app di registrarsi nel database, ma sto cercando di limitare le query e le scritture del database che devo eseguire nel caso in cui qualcuno cerchi di aumentare i miei costi spammandomi con l'attività del database. Ho sperimentato uno schema di prova di lavoro in cui un gestore di chiamate api / servizio genera un'assegnazione firmata (tutto in memoria, nessun database) che l'applicazione mobile deve eseguire, che viene successivamente verificata da un'altra chiamata API prima di scrivere la nuova registrazione al database. Bene, farò il lavoro, ma devono fare più lavoro che non è un grosso problema per il cliente che collabora, ma che potrebbe essere un deterrente per un client malevolo.
Ma poi mi sono reso conto che senza tenere traccia degli invii, il client malintenzionato può fare il lavoro per davvero una volta, ma poi mi spammare per il resto della finestra di validità dell'assegnazione (prima che scada) e richiedere ancora le mie ricerche nel database. La finestra prima della scadenza dovrebbe essere almeno il caso peggiore del mio hardware client con prestazioni peggiori, che lascerebbe un sacco di tempo per i problemi.
Inoltre, poiché il mio database è solo alla fine coerente, non so come evitare le richieste doppie per i nodi di replica isolati in ogni caso.
Non esiste uno stato condiviso o addirittura un'affinità di host tra l'elaborazione dell'API lambda guidata dagli eventi. Dynamo DB è (credo) solo alla fine coerente. MemCache o Redis (offerti da ElastiCache).
Questi sono rilevanti:
C'è qualche vantaggio nell'aggiungere un proof-of-work? Oppure qualsiasi ulteriore complessità si limita a rimandare il 100% del problema che è inevitabile (introducendo anche nuovi punti di errore)?
Esistono schemi di registrazione anonimi compatibili con la coerenza finale e che richiedono più membri del registro rispetto al registro?