Domanda

Ho pubblicato una domanda simile su quanto sia lineare Linq. C'erano così tante opinioni diverse su cosa significasse effettivamente scalabilità in alcune conversazioni recenti, quindi mi ha spinto a porre anche questa domanda. Che cosa significa scalabilità per te?

È stato utile?

Soluzione

Guardo la scalabilità da due punti di vista:

Ridimensionamento

Se aggiungo più RAM alla scatola su cui è in esecuzione qualcosa, quante prestazioni e capacità aggiuntive ottengo? Se un'applicazione in mio possesso è in grado di gestire 300 connessioni in più e viene eseguito il 15% più veloce quando aggiungo 2 GB di RAM al mio server e un'altra applicazione può gestire solo 100 connessioni in più e viene eseguito il 5% più veloce, l'applicazione A è chiaramente più scalabile.

Ridimensionamento

Ora, se aggiungo più caselle alla mia configurazione, quante prestazioni e capacità aggiuntive ottengo? Posso configurare front-end Web per gestire più traffico client? In tal caso, c'è un aumento lineare? Se aggiungo 3 caselle, posso ottenere 3 volte più utenti che accedono al mio sito? Posso aggiungere più database per distribuire il carico di dati? Posso aumentare il multithreading? Se posso aggiungere facilmente una macchina alla mia rete per aggiungere capacità alla mia applicazione, è scalabile.

A proposito, questa è una delle unità principali di n-tier.

Altri suggerimenti

Scalabilità indica la capacità di gestire la crescita in una di queste 2 aree:

1) Facilità di aggiunta di nuove funzionalità, correzione di bug. Per rendere il codice fare queste nuove cose, quanto è difficile da fare? Sebbene ciò possa essere in qualche modo manutenibilità, si tratta anche di stabilire se è possibile creare il codice per gestire facilmente una scala più ampia.

2) Capacità di gestire carichi sempre maggiori che possono essere più richieste contemporaneamente nello sviluppo Web o set di dati più grandi per un semplice sito Web basato su database, ad es. potresti creare un'applicazione che gestisce le tabelle con centinaia di migliaia di righe che è ancora visualizzato come "rapido"?

Generalmente per me la scalabilità significa la capacità di crescere.

Non credo che la scalabilità abbia un senso di senso senza contesto.

Quando mi viene chiesto della scalabilità di un sistema, la prima cosa che devo sapere sono i modi in cui si prevede che il suo utilizzo cresca. Avrà più utenti? Gli utenti esistenti ne faranno un uso maggiore? Le sue funzionalità aumenteranno? Il mix di transazioni che sta attualmente supportando cambierà? L'esperienza utente dovrà cambiare?

(OK, quindi la risposta a tutte queste domande è di solito "Sì", quindi anteporre la parola "Come" a quelle domande.)

Per scegliere un esempio non del tutto fittizio: un sistema che attualmente supporta pochissimi utenti e la cui base di utenti dovrebbe crescere rapidamente, presenta un grave problema di ridimensionamento se il DBA deve passare due ore a eseguire manualmente query dalle informazioni raccolte da messaggi di posta elettronica ogni volta che deve creare un nuovo account. Questo non è un problema che può essere risolto aggiungendo più risorse, a meno che tu non includa DBA nell'elenco delle risorse che intendi aggiungere (e ci sono molti motivi che non si ridimensioneranno bene).

O immagina un sito di social network che implementa l'eccitante nuova funzionalità che puoi vedere se i tuoi amici sono online e chattare con loro attraverso una bella interfaccia utente Ajax-y. Improvvisamente, senza aumentare la base di utenti, il numero di richieste HTTP che i tuoi server gestiscono i salti giornalieri di venti volte e le tue preoccupazioni sulla scalabilità del tuo database ricadono in secondo piano. (A meno che, ovviamente, tu non abbia coinvolto il database nella tua applicazione di chat. Buona idea!)

Certo, rendendo le tue app Web senza stato in modo da poter aggiungere server Web, rendere le pagine Web idempotenti in modo da poter aggiungere proxy, progettare la tua applicazione in modo da poter partizionare il tuo database su più server, questi faranno tutti la tua applicazione scalabile in varie dimensioni. Vale davvero la pena pensare a quella roba. Ma è molto più importante capire qual è il tuo vero nemico prima di iniziare a combattere.

Ho risposto a quella domanda come se volessi dire velocemente, ma è perché non volevo essere un coglione :) - il che significa che non volevo iniziare una discussione su cosa significa scalabile. Penso che sia scalabile come: l'aggiunta di risorse al sistema aumenta le sue prestazioni.

In questo senso, PLINQ è scalabile, perché l'aggiunta di più core lo farà funzionare più velocemente.

Solo per aggiungere al post di @Lou Franco.

PLINQ ha persino "super lineare" strano " Prestazioni in alcuni scenari con sovraccarico limitato (secondo alcune delle loro demo). Provalo.

Se sei un tipo C ++, Microsoft sta anche cercando di rilasciare funzionalità di concorrenza che apparentemente non hanno costi di runtime associati a loro e strumenti di concorrenza aggiuntivi basati su attività per aiutarti a chiamare meglio.

Penso alla scalabilità come una misura della scorrevolezza della curva costi-prestazioni.

Cioè, se puoi spendere un po 'in risorse informatiche e ottenere un sistema a basse prestazioni, e gradualmente aggiungendo risorse puoi ottenere un sistema proporzionalmente migliore, è scalabile. Se devi aggiungere risorse in blocchi costosi, per ottenere miglioramenti non lineari, non è scalabile.

Scalabilità: la capacità di un sistema di utilizzare risorse aggiuntive per ottenere capacità o throughput maggiori. Risorse aggiuntive come unità, memoria, schede di rete, processori o macchine.

Non associo direttamente la scalabilità alla crescita delle funzionalità, anche se potrebbe non essere possibile aggiungere funzionalità a un sistema al suo limite di scala.

In questi giorni e specialmente per le webapp, ma in alcuni casi anche per le app aziendali, la scalabilità orizzontale è ciò che desideri avere,

Posso gestire di più (traffico, dati, elaborazione) aggiungendo più hardware delle materie prime? anche usando " server cloud " Amazon ec2, motore di app di Google e simili?

Scalabile significa che posso stipare n risorse in un sistema e crescerà nello spazio e nel tempo tra O (log (n)) e O (n log n). È un po 'irrealistico, ma è così che penso a "quotabile".

Woh !, grande parola ....

Lo definisco nuovo ogni progetto, perché dipende da ciò che il cliente vuole.

La scalabilità non riguarda sempre l'aggiunta di capacità di elaborazione / archiviazione, ma può includere anche il supporto di molti input e molti output.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top