2009-09-17 16 views
23

Cosa modelli di progettazione o tecniche avete utilizzati che sono specificamente orientati verso scalabilità?Design (o tecniche) per la scalabilità

Modelli come il modello Flyweight mi sembrano una versione specializzata di Factory Pattern, per promuovere un'elevata scalabilità o quando si lavora all'interno di limiti di memoria o di memoria.

Che altro hai usato? (Denormalization of Databases, ecc.) Trovi che le regole cambino quando l'alta disponibilità o la scalabilità sono il tuo obiettivo principale?

situazioni possibili sono:

  • I dispositivi mobili con la memoria più limitata, potenza di elaborazione e connettività di un desktop o laptop
  • Alta ° utenti su hardware limitata (strategie di caching, ecc)
  • Ottimizzazione dello schema del database per l'efficienza al posto di un progetto normalizzato (ad es. Wrapping di colonne SharePoint per l'archiviazione)
+13

Singleton! Haha, sto scherzando –

+1

Puoi definire la scalabilità nella tua domanda. Scalabile sotto quale aspetto, e possibilmente da quanto. – NomeN

+0

La tua domanda non ha senso ho paura, modelli di risolvere i problemi (al massimo) e si havent menzionati alcun problema nel tuo post. Non hai nemmeno menzionato quel tipo di applicazione di cui stai parlando - è basato sul web? – Justin

risposta

10

Rendere l'applicazione come apolida come possibile ble. Sarà più facile adattarsi a una server farm.

+0

+1 scalabilità all'interno di server farm è un problema che ho avuto spesso a che fare con. –

+0

... e localizzare stato il più possibile: più facile il debug. – jldupont

+0

Una buona "pattern" sarebbe quella di utilizzare un linguaggio funzionale che promuovono disaccoppiamento stato il più possibile dalle funzioni di lavoro sugli stati. – jldupont

6

Niente è gratuito: si tratta di compromessi accettabili per raggiungere gli obiettivi aziendali. Le variabili principali sono:

  • Costo
  • disponibilità
  • Coerenza
  • di sopravvivenza (per esempio, Partition Tolleranza)

Un ottimo paper a leggere sull'argomento.

ritengo una buona metrica sarebbe esaminare "/ utente cost" curva e cercare mantenerla alla progressione lineare (supponendo che il costo accettabile per utente è un parametro noto :-)

design pattern fanno gioco un ruolo ma è l'architettura dominante che conta di più. Uno potrebbe essere stato molto approfondito a livello di modulo, ma di conseguenza mancano i vincoli a livello di rete e la scalabilità.

Alla fine della giornata, credo che uno si debba chiedere da sé: per il tipo di errore X, quanti "utenti" possono essere interessati e per quanto tempo?

Ci sarà sempre un SPOF (Single Point Of Failure) da qualche parte ma si può progettare un sistema in modo tale che SPOF venga spostato più vicino ai punti finali (ad esempio utenti). In molti casi, tuttavia, SPOF è fuori dal controllo dell'applicazione ad es. POP di rete non disponibile.

In ogni caso, potrei passare ore sull'argomento ...

2

Il POS I libri A (Patterns-Oriented Software Architecture) sono una grande fonte per tali modelli.

POSA 4, in particolare, riguarda il calcolo distribuito, ma tutti i volumi sono pieni di modelli di scalabilità.

1

Quello che ho osservato con la logica di applicazione Stateless è che introduce molti altri requisiti come il blocco su DB che alla fine funziona contro la scalabilità.

Diciamo che la logica dell'applicazione distribuita è stateless attraverso una server farm, quindi per una richiesta che sta colpendo due nodi di un cluster allo stesso tempo dobbiamo introdurre concetti come il blocco DB per assicurarsi che solo una richiesta verrà elaborata.

Sto affrontando tali situazioni ora e mi chiedevo come tutti gli altri si occupano di tali comportamenti apolidi.