Se devo progettare l'architettura del sistema per un sito scalabile come Amazon / BestBuy, quale può essere un'architettura di sistema di alto livello. cercato su Google ma non ha ottenuto molti dati.
Di seguito è riportato il diagramma di sistema di alto livello basato sulla comprensione delle mine
Per illustrare la mia comprensione prenderò due casi d'uso
- Aggiunta dell'inventario al sistema dal venditore
- Ricerca prodotto per utente
Aggiunta dell'inventario al sistema dal venditore: - il venditore può caricare singoli prodotti o può eseguire il caricamento collettivo con qualsiasi formato concordato, ad esempio Excel, CSV ecc.
- Una volta effettuato il caricamento del venditore, la chiamata passerà al server web (attraverso il servizio di bilanciamento del carico)
- Esisteranno alcuni servizi aziendali in quel server web. Ad esempio, se utilizzo Tomcat (server Web basato su Java), i servizi basati su Java possono trovarsi in tomcat. alcuni altri servizi in altri / stessa lingua possono esistere come processi separati con in macchina stessa / diversa in base alla configurazione hardware. Il server web
- eseguirà il servizio di caricamento dei venditori che segnerà i prodotti in base alla categoria e li caricherà in un cluster memcached. Questo assicurerà al venditore il tempo di risposta veloce. Saranno separati più server memcached per ogni categoria (verranno replicati per gestire il crash del server)
- I lavori batch di Asynch in background leggeranno i dati da questi cluster memcached e li archivieranno in DB (Mongo DB). Una volta memorizzato, aggiornerà la voce memcached con productId
Ricerca prodotto per utente: - l'utente può digitare qualsiasi nome prodotto e ricerca. Questo mi sembra un trucco dal punto di vista del ridimensionamento. Posso pensare a due approcci qui
Approccio basato sulla cache
-
Tieni l'elenco dei prodotti in memcache per telefono. Questo elenco telefonico può contenere una mappa in cui la chiave può essere brandName e può essere nuovamente mappata. Questa mappa nidificata conterrà modello come chiave e dettaglio del prodotto come chiave. I dettagli del prodotto possono inoltre contenere un elenco di venditori ecc.
-
Ora il servizio di ricerca eseguirà richieste multi-get (probabilmente la riduzione delle mappe può essere sfruttata qui) a tutti i prodotti cache lusters archiviati
siccome il sistema non sa quale sia la categoria a cui appartiene quel nome
Scarica dal DB
-
Come abbiamo il DB sharked. il carico è già distribuito sul server DB. Quindi possiamo colpire il DB, utilizzare l'indice DB e recuperare i dettagli
-
Questo punto sarà uguale al punto 2 nell'approccio sopra.
Non sei sicuro di quale sia più appropriato e utilizzato da una delle principali app di e-commerce?
Inoltre questa architettura sembra scalabile? Qualche punto di miglioramento?