architettura per l'applicazione

0

Sto implementando una specie di applicazione web che ha basic social network functionality and browser text game . Lo faccio fondamentalmente per me stesso solo per imparare un paio di cose. (come usare websockets e sviluppo full-stack)

Quindi l'architettura che ho trovato sembra così

Generalmente le mie pagine web sono costituite da

  1. risorse statiche fornite con l'unità di implementazione (all'interno di war ad esempio)
  2. risorse esterne che ho deciso di non archiviare all'interno della guerra (per avere dimensioni ridotte) come musica, immagini, fogli di calcolo. Li tengo su cloud storage come google drive e mega
  3. risorse statiche come i dati di gioco - informazioni sulle missioni, descrizioni delle abilità ecc. che ho memorizzato in document database .

Breve descrizione dei servizi

  • Applicazione principale è l'endpoint principale in cui l'utente ha accesso e trascorre la maggior parte del suo tempo
  • Servizio di autenticazione (al momento disegno questo) è solo un servizio che dovrebbe fornire token di autorizzazione (perché in genere voglio supportare l'autenticazione - dopotutto è un sito Web - da Google o Facebook ecc.) . Utilizza il database relazionale per archiviare login, ruoli, permessi utente.
  • Servizio di gestione risorse è un singolo punto di accesso per tutti i servizi per accedere alle risorse, in pratica ho voluto centralizzare l'accesso a tutte le risorse
  • Il servizio del giocatore accumula le statistiche del giocatore (nel database relazionale) e la relazione tra giocatori (quindi database grafico)
  • Servizio motore regole è responsabile della valutazione dei dati del giocatore rispetto a un foglio di calcolo che contiene regole di gioco (come il giocatore sta livellando ecc.).

Sto pensando di introdurre un modulo di comunicazione che permetta ai giocatori di chattare, ma c'è ancora molta strada da fare fino ad allora.

Poiché ho la tendenza a sovra-ingegnerizzare, ho deciso di porre una domanda: Ho fatto l'over-engineer o no? Inoltre non sono sicuro se ho bisogno di middleware come AMQP o JMS. Presumo che sia un must per tali applicazioni.

Il mio problema è che voglio usare tutto gratuitamente perché non ha una grande scala - quindi devo inventare soluzioni alternative per la memorizzazione di risorse e ambiente. Io uso heroku per distribuire la mia applicazione e quindi uso add-on per esso come grapheneDB o coralogix . (forse passerò a aws un giorno)

Quindi qualcuno potrebbe valutare la mia architettura?

    
posta lapots 30.10.2017 - 11:37
fonte

2 risposte

1

Se questa architettura tecnica è la soluzione più semplice possibile per risolvere il tuo problema aziendale, allora è fantastico, non l'hai sovradimensionato. Ma la tua descrizione non è sufficiente per capire se questo è il caso.

Prima di tutto, quali sono i miei criteri personali se l'architettura è ok? In altre parole, quali sono le caratteristiche che dovrebbero avere i miei servizi?

  • Prima di tutto, è un accoppiamento basso. Non voglio che tutto il mio sistema si arresti in modo anomalo a causa di un servizio non disponibile.
  • Voglio che i miei servizi siano estremamente coesi. Se avessi bisogno di un po 'di funzionalità, voglio farlo in un unico posto.
  • Non voglio che il mio servizio sia loquace. Quindi voglio che abbiano una granularità corretta.
  • Voglio che siano autonomi, quindi comunicano principalmente tramite eventi e hanno dati decentralizzati.

Per fare ciò è necessario identificare prima la propria architettura aziendale. In altre parole, è necessario identificare le parti logiche del sistema, il loro modo di comprendere e il modo in cui comunicano tra loro. Uso la tecnica chiamata Mappatura delle capacità aziendali . Si riduce a quanto segue:

  • Identifica le tue capacità di business di livello superiore. Pensa a quali passaggi il tuo sistema dovrebbe seguire per raggiungere i suoi obiettivi.
  • Esamina più a fondo all'interno di ciascun servizio.
  • Accanto a due punti precedenti pensiamo al modo in cui i servizi dovrebbero comunicare.

Ciò che mi aiuta è immaginare come funzionava un sistema, o avrebbe funzionato un centinaio di anni fa. Le parti logiche di base rimangono le stesse, i percorsi di comunicazione di base sono entrambi.

Questa è l'attività principale, quella da cui iniziare. Le altre cose come mongo, database di grafici e simili vanno dopo.

Ecco un esempio di un approccio I delineato.

    
risposta data 30.10.2017 - 18:30
fonte
1

Did I over-engineer or not?

Dipende, in un certo senso, da cosa intendiamo con over-engineering.

Stai visualizzando 3-4 diverse tecnologie di archiviazione, SQL, Graph, MongoDB e Resource Manager. È difficile sapere se questo è o non è eccessivo senza approfondire gli altri aspetti dell'architettura, ma fa una domanda.

Tuttavia, ci sono altri aspetti dell'ingegneria, come la raccolta dei requisiti, i casi d'uso, le specifiche non funzionali (ad esempio, i requisiti di rendimento al carico previsto), l'architettura concettuale, ecc.

Potresti prendere in considerazione l'utilizzo di una metodologia o di una struttura di progettazione nell'ingegnerizzazione di una soluzione. Qualcosa come DDD e / o altro. Formale o più informale. Essere più formale potrebbe anche essere considerato eccessivamente ingegneristico, specialmente in contrasto con le metodologie popolari di Agile.

Stai utilizzando il colore per distinguere determinate classi di entità e relazioni, quindi è un buon inizio. Potresti definire quei colori usando una legenda di qualche tipo. Anche le frecce di etichettatura sono generalmente una buona cosa quando si comunica l'architettura tramite diagrammi.

Ti sei concentrato principalmente sulle scelte tecnologiche per l'implementazione, che potremmo considerare parte dell'architettura logica e / o fisica.

C'è un'architettura di livello superiore che può essere descritta, se vuoi, che potrebbe andare all'architettura contestuale o concettuale.

Ad esempio, potresti documentare le tue strutture dati persistenti a livello concettuale o logico da una parte e, dall'altra parte, i comportamenti e le responsabilità del sistema e dei suoi componenti. Vari flussi di lavoro attraverso l'applicazione e i componenti.

Ad esempio, non c'è molta chiarezza su quale sia l'output del motore Regole, quando / come viene utilizzato; ha una relazione con l'applicazione principale ma non con le statistiche del giocatore, il che sembra possibilmente incoerente con la descrizione testuale.

In sintesi, i diversi database, senza razionalizzazione che li giustificano architettonicamente, potrebbero essere considerati di tipo ingegneristico (nel senso di un over building). D'altra parte, la quantità di dettagli trasmessa nel diagramma dell'architettura potrebbe essere considerata in ingegneria, senza alcuna documentazione aggiuntiva che accompagna il diagramma.

    
risposta data 30.10.2017 - 18:26
fonte

Leggi altre domande sui tag