Qualunque vantaggio di proof-of-work per evitare ricerche nel database?

1

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?

    
posta Jason Kleban 10.01.2016 - 01:52
fonte

1 risposta

1

Stai facendo molte domande molto diverse.

I'm trying to limit the database queries and writes that I need to perform in case someone tries to make my costs very high

Dovresti avere un gateway (ad esempio Amazon Lambda) che supporti la limitazione della velocità. Con questo giocattolo nelle tue mani saresti in grado di configurare il numero di richieste consentite. Sono disponibili gateway generici se le cose standard non sono adatte o disponibili, ad es. Ombrello .

... how to avoid double-issued requests to isolated replication nodes

Lo fai configurando il quorum di scrittura. Più nodi nel quorum: migliore coerenza ma velocità di scrittura più lenta (questo è noto come teorema CAP).

There's no shared state ...

Questo è in base alla progettazione, lo stato condiviso è un killer delle prestazioni, specialmente negli ambienti distribuiti.

    
risposta data 10.01.2016 - 22:23
fonte

Leggi altre domande sui tag