Progettazione del sistema di notifica su app mobili che utilizzano AWS SNS

2

Per semplificare il caso d'uso, supponiamo di avere un'app mobile disponibile per Android e iOS, simile a Instagram, in cui gli utenti possono caricare foto che possono essere commentate, apprezzate o non gradite da altri utenti. Quando un utente commenta, gradisce o non gradisce una foto che hai caricato, riceverai una notifica in tempo reale sul tuo telefono che ti dice del tipo di azione, del nome dell'utente e della foto.
Gli utenti possono seguirsi l'un l'altro, i follower riceveranno anche una notifica quando un utente che seguono caricherà una nuova foto.

Userò AWS SNS, quindi ho bisogno di decidere come organizzare e utilizzare gli argomenti. Per impostazione predefinita, SNS offre 10 milioni di iscrizioni per argomento e 100.000 argomenti per account. La mia app ha meno di 100.000 utenti e non è previsto che raggiunga presto 1 milione di utenti. Immagino che il design sarebbe molto simile con Microsoft Azure o Google Cloud (ma con diversi vincoli).

Vedo finora 4 opzioni:

  1. Creo solo 1 argomento, pubblico tutte le notifiche in esso contenute con i dettagli su che tipo di azione è avvenuta: tutti gli utenti si iscrivono a quell'argomento e vengono informati di tutto ciò che accade. L'app mobile deve filtrare le notifiche pertinenti (in base ad alcuni dati memorizzati localmente come gli ID degli utenti che l'utente segue, gli ID delle sue foto, ecc.). Sono nuovo nello sviluppo di dispositivi mobili, forse sbaglio, ma ritengo che sia un cattivo progetto elaborare tutte le notifiche e interrogare la memoria locale per tutto il tempo.
  2. Creo 1 argomento per azione: foto pubblicata, foto commentata, foto piaciuta, foto non gradite e gli utenti selezionano gli argomenti a cui desiderano iscriversi. Tuttavia, l'app deve filtrare tutte le notifiche per ciascun argomento selezionato.
  3. Creo 1 argomento per utente in cui le sue azioni saranno pubblicate e "follower" verrebbe abbonato agli argomenti appropriati (gli utenti che seguono). Ora è fattibile, ma il limite di AWS è di 100.000 suppongo che ci sia una ragione e forse non è il modo in cui le grandi aziende lo fanno. Anche questo funziona solo tra utenti che si seguono l'un l'altro, idealmente voglio che anche gli utenti vengano avvisati quando gli utenti casuali commentano / piacciono / non apprezzano le loro foto.
  4. Analogamente al punto 3, creo 1 argomento per utente, ma questa volta pubblico ciò che gli altri utenti fanno con la sua roba (commento, ecc.) in tale argomento (+ i suoi follower che pubblicano nuove foto per esempio), quindi sarebbe l'unico iscritto a quell'argomento e otterrebbe solo le notifiche rilevanti. C'è ancora il problema del limite di 100.000 argomenti.

Che cosa ne pensate voi ragazzi o come avete progettato / implementato tale sistema?

    
posta Maxime Laval 08.10.2016 - 23:19
fonte

2 risposte

1

Quindi, dal momento che non è possibile iscriversi direttamente a un argomento SNS da un dispositivo, ho utilizzato Google Firebase e il modo in cui funziona è assegnare ai dispositivi un token univoco che mappo agli endpoint della piattaforma SNS (ovvero devo utilizzare un database) . Quindi 1 dispositivo = 1 punto finale attivo (= 1 token attivo) alla volta. Il mio backend decide quindi quali endpoint inviare notifiche in base all'azione e alla fine i dispositivi / utenti ricevono solo notifiche pertinenti.

    
risposta data 08.12.2016 - 17:20
fonte
0

In realtà gratta l'ultima risposta. Non è nemmeno necessario eseguire alcuna delle operazioni precedenti, è possibile archiviare l'ARN endpoint della piattaforma sul server per ogni utente e inviare semplicemente notifiche a tale ARN quando si dispone di una notifica per tale utente.

    
risposta data 08.10.2016 - 23:57
fonte

Leggi altre domande sui tag