Quali tipi di sistemi devono "ridimensionare" anziché "ridimensionare"?


12

Mi chiedo da molto tempo se ci sono sistemi che devono "scalare" (su un server più potente e più costoso) piuttosto che "ridimensionare" essendo divisi su molti server più piccoli.

Esistono tali sistemi e, in tal caso, esiste qualcosa in particolare che tende a far sì che i sistemi debbano essere ingranditi anziché ridimensionati? (Ad esempio, forse le transazioni del database dei reclami ACID o altri requisiti di integrità dei dati forti creano questa necessità.)

Poiché il ridimensionamento sembra comportare costi hardware molto più elevati rispetto al ridimensionamento, sembra qualcosa che vorresti evitare, se possibile, ma non sono sicuro che sia sempre evitabile o meno.

Quindi, ci sono sistemi che non possono essere ridimensionati e devono invece essere ridimensionati? Cosa può causare questo e come identificheresti un tale sistema? (In genere condividono alcune caratteristiche in comune che potrebbero renderle più facilmente identificabili?)



7
Il ridimensionamento è spesso molto più semplice se il software non è stato progettato per ridimensionare. La riprogettazione del software è costosa o impossibile se non si possiede la fonte o si ha influenza sugli sviluppatori.
Zoredache,

Scrivere tali sistemi è un problema molto difficile. Soprattutto i progetti master / master che possono andare e venire dove più master scrivono negli stessi record contemporaneamente. Chi scrive vince?
Matt,

3
Potresti essere interessato Teorema della PAC . Fondamentalmente, un servizio che richiede sia coerenza che disponibilità come definito nel teorema non tollererà il partizionamento. La maggior parte dei requisiti del mondo reale può sacrificare una certa coerenza per l'eventuale coerenza (gestire manualmente o automaticamente le incoerenze dopo il fatto) o sacrificare la disponibilità rifiutando di elaborare una richiesta quando alcuni dei partecipanti non sono disponibili. Pertanto, i sistemi che richiedono sia coerenza assoluta sia disponibilità assoluta sono essenzialmente costretti a crescere.
Lie Ryan,

1
Se per "LAN affidabile" intendi "non ha mai un fallimento", allora non stai progettando per il mondo reale.
mfinni,

Risposte:


18

Io principalmente lavoro con un programma che ha lo zero potenziale scala orizzontale . Anche se funziona su Linux, l'applicazione, le strutture dati e i requisiti di I / O mi costringono a "scalare" su sistemi progressivamente più grandi al fine di far fronte a maggiori carichi di lavoro degli utenti.

Molte applicazioni line-of-business e transazionali hanno questo tipo di vincoli. È uno dei motivi per cui sottolineo che il settore focalizzato su soluzioni cloud e architetture su scala Web basate su DevOps ignora una buona percentuale del mondo dell'informatica.

Sfortunatamente, i sistemi di scale-up che descrivo sono davvero poco raccomandabili , quindi l'industria tende a ignorare il loro valore o a delimitare le competenze necessarie per affrontare sistemi di grandi dimensioni e critici (ad esempio bestiame contro animali domestici ).


1
"la cosa più semplice da fare è lanciare l'hardware al problema". Per favore, legge di Moore, non smettere di lavorare!
cjc,

2
@Demetri - Microsoft SQL Server è il prodotto più "di alto profilo" che mi viene in mente che è un tipico "ridimensionamento" anziché "ridimensionamento". Scalarlo è quasi impossibile a meno che non si soddisfi un insieme molto specifico di criteri per la replica di tipo merge.
Mark Henderson

3
O se è possibile scomporre la soluzione in più problemi. Ad esempio, non eseguire rapporti sul database delle transazioni; colpito una replica che gira su altro hardware. \
mfinni

1
-1. Penso che ti sia mancato colpire il nocciolo del problema. Il problema non viene forzato se viene ridimensionato il sistema per un sistema di ridimensionamento. Questa domanda sui sistemi il cui dominio problematico è tale da rendere impossibile una scalatura anche se progettato da zero.
Lie Ryan,

1
@LieRyan Comprehension. Sto affermando che l'applicazione che supporto non può essere ridotta (è un sistema simile a un database) ... anche se riprogettata, a causa di vincoli architetturali.
ewwhite,

8

Dal punto di vista dello sviluppatore, posso dire che quasi tutti i tradizionali motori di database tradizionali possono solo scalare e ridimensionare è un pensiero secondario.

Negli ultimi anni, con la necessità di una maggiore scalabilità e sistemi ad alta disponibilità, sono stati compiuti sforzi per ampliare i database esistenti. Ma poiché i progetti sono ostacolati da un codice legacy, è semplicemente bloccato piuttosto che fondamentale per il design. Incontrerai questo se provi a ridimensionare la maggior parte dei noti motori di database. L'aggiunta di server slave può essere piuttosto difficile da configurare e noterai che presenta limitazioni significative, alcune delle quali potrebbero richiedere il re-jigging delle tabelle del database.

Ad esempio, la maggior parte di essi sono progetti master / (multi-) slave piuttosto che multi-master. In altre parole, potresti avere un intero server semplicemente seduto lì e non in grado di elaborare le query. Alcuni lo fanno, ma con limitazioni ... ad esempio leggere solo il design multi-slave. Quindi potresti avere un server che accetta le scritture e tutti gli altri forniscono dati di sola lettura. Noterai che quando imposti questi sistemi non è sempre un processo semplice e difficile far funzionare bene. In molti casi sembra davvero un fulmine.

D'altra parte, ci sono alcuni motori di database più recenti sviluppati con concorrenza e design multi-master sin dall'inizio. NoSQL e NewSQL sono la nuova classe di progettazione.

Quindi sembrerebbe che il modo migliore per ottenere prestazioni migliori da un server SQL tradizionale sia scalare! Mentre con NOSQL e NewSQL è sia scalare che ridimensionare.

Il motivo per cui i sistemi RDBMS tradizionali sono strettamente accoppiati è perché tutti hanno bisogno di una visione coerente degli stessi dati. Quando hai più server che accettano aggiornamenti sugli stessi dati da client diversi, di quale ti fidi? Qualsiasi metodo che tenti di garantire la coerenza dei dati attraverso una sorta di meccanismo di blocco richiede la cooperazione di altri server che danneggiano le prestazioni o influiscono sulla qualità dei dati in quanto i dati letti da un client potrebbero non essere aggiornati. E i server devono decidere tra loro quali dati sono più recenti quando scrivono nello stesso record. Come puoi vedere, è un problema complesso reso più complesso dal fatto che il carico di lavoro è distribuito su più server e non solo tra processi o thread in cui l'accesso ai dati è ancora piuttosto veloce.


Oracle RAC non fornisce ridimensionamento da 10g?
Dani_l

Esso ha. Ma poi avere un RAC e avere un RAC perfettamente funzionante sono due cose diverse: questo richiede davvero un'attenzione speciale per continuare a correre. È un bel design però. Se ne hai bisogno, probabilmente sei disposto a pagare il prezzo.
TomTom,

E notare il sistema di archiviazione condiviso necessario per Oracle RAC. Ciò potrebbe presentare un problema di ridimensionamento in base alla modalità di implementazione.
Matt,

7

A mio avviso, la demarcazione di scale up / out è determinata da quanto può essere parallelo un flusso di lavoro e da quanto strettamente i thread paralleli devono coordinarsi tra loro.

Singolo
thread Per qualsiasi motivo, questo flusso di lavoro può funzionare solo in un singolo thread.

Un mezzo della discussione uno dei mezzi del sistema scalare fino a farlo andare più veloce.

Parallelismo strettamente accoppiato
Questo è un sistema multi-thread in cui i thread devono essere strettamente accoppiati tra loro. Forse la comunicazione tra processi deve essere molto veloce o tutto deve essere gestito attraverso un singolo gestore di memoria. La maggior parte dei sistemi RDBMS sono questo tipo di elaborazione parallela.

Per la maggior parte, questi sistemi sono quelli che scala fino meglio di fuori anche se ci sono delle eccezioni. Ad esempio, i flussi di lavoro che funzionerebbero su un cluster in stile immagine di sistema singolo, spazio di memoria singolo ma latenza elevata tra i thread, potrebbero semplificare il ridimensionamento. Ma tali sistemi SSI sono molto difficili da lavorare con così molti ingegneri fanno solo una scatola più grande.

Parallelismo debolmente accoppiato
Questo è un sistema multi-thread / di processo in cui i thread sono OK con latenze elevate tra loro. O non è necessario parlarsi affatto. Le web-farm scalate e le render-farm sono esempi classici di questo tipo di sistema. Sistemi come questi sono molto più facili da realizzare rispetto al parallelismo strettamente accoppiato, motivo per cui c'è molto entusiasmo per questo stile di sistema.

Questo è lo stile dove le dimensioni fuori è molto più facile.


Il motivo per cui RDBMS è strettamente accoppiato è perché sono strettamente accoppiati ai dati. vale a dire più server che accedono alla stessa risorsa.
Matt,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.