|
|
Pubblicato su 25/09/2019 16:11:58
|
|
|
|

Tradizionalmente, un sistema che gestisce un miliardo di transazioni al giorno potrebbe richiedere centinaia di VM, PayPal fa tutto con solo 8 VM e offre una risposta rapida al 90% dell'utilizzo della CPU, una densità di transazioni mai raggiunta PayPal prima, e il processo richiede un decimo del tempo per essere realizzato, aiutando l'organizzazione a tenere il passo con la crescita senza dover ampliare l'infrastruttura informatica riducendo i costi. Come si fa?
PayPal ha migrato il suo sistema in modalità Actor basata su Akka. Nell'articolo Squbs: PayPal adotta un nuovo approccio reattivo alla creazione di app (Il login del link ipertestuale è visibile.PayPal spiega i dettagli del processo. Ora hanno reso Squbs open source e lo hanno pubblicato su GitHub (Il login del link ipertestuale è visibile.)。
Quando un progetto deve adottare un approccio pratico, il modello di servizio con stato non riceve comunque sufficiente attenzione. Per saperne di più sui servizi stateful, consigliamo di leggere le ragioni per continuare a costruire servizi stateful scalabili ora (Il login del link ipertestuale è visibile.), questo articolo si basa su un discorso di Caitie McCaffrey. Se questo articolo non ti convince, c'è anche WhatsApp che utilizza il concorrente di Akka, Erlang, per un throughput estremamente elevato: l'architettura WhatsApp di Facebook da 19 miliardi di dollari (Il login del link ipertestuale è visibile.)。
Il motivo per cui si raccomanda l'articolo sopra è che PayPal non fornisce un'introduzione dettagliata all'architettura, ma dedica più tempo ai motivi per cui hanno scelto Akka e ai vantaggi della migrazione verso Akka. Ma questo articolo offre comunque prezioso incoraggiamento e dimostrazione per la pratica di "uscire dai sentieri battuti".
Cosa c'è di male nell'usare un gran numero di macchine virtuali per un servizio?
- Esegui il servizio con macchine virtuali a bassissimo debito ed estremamente piccole. Il vantaggio maggiore dei sistemi reattivi basati su attori è che possono utilizzare in modo più efficiente le risorse di calcolo, riducendo notevolmente la dimensione del sistema ed evitando l'autoscaling "semplice e rozzo" delle pratiche tradizionali.
- Questo mette molta pressione sulla rete e sull'infrastruttura di instradamento. Poiché i servizi tendono a essere più interconnessi, le richieste potrebbero dover passare attraverso un gran numero di salti di rete, aumentando la latenza e degradando l'esperienza utente.
- Più è grande, più costoso. I servizi con centinaia di macchine virtuali hanno elevati costi intrinseci in termini di gestione, monitoraggio e cache inefficace.
- Più è piccolo, più agile è. Distribuire servizi a centinaia di macchine virtuali è un processo che richiede molto tempo.
- Ottieni di più da più CPU su ogni macchina virtuale. Poiché le CPU non possono essere ulteriormente accelerate, l'infrastruttura deve essere in grado di utilizzare in modo più efficiente un maggior numero di CPU su ogni macchina virtuale.
- I microservizi devono essere costruiti con NanoServices debolmente accoppiati, facili da mantenere e veloci da realizzare. Nessuno vuole affrontare un sistema complesso con molti livelli, e serve più visibilità sul ruolo dei diversi servizi senza dover entrare in profondità nei livelli di codice.
Tenendo conto di questi fattori, PayPal voleva costruire un sistema che:
- Scalabile, non solo per scalare orizzontalmente a centinaia di nodi, ma anche per scalare su più processori e raggiungere l'obiettivo di elaborare miliardi di richieste al giorno.
- Bassa latenza e può essere controllato con granularità estremamente fine.
- Sii resiliente di fronte ai fallimenti.
- Adattamento flessibile dei confini del servizio.
- Promuovi scalabilità e semplicità attraverso modelli di programmazione e cultura, oltre a meccanismi più semplici di gestione di errori e guasti.
Non c'è dubbio che PayPal voglia usare uno stack più "sottile" e non vogliono che il loro stack contenga molta tecnologia e parti mobili a diversi livelli. In generale, Akka e i sistemi basati su stati sono ben adatti a questa esigenza, il che permette di "scomporre" la pila di grandi componenti in un'unica tecnologia. PayPal ha scelto Akka invece di Erlang perché ha più esperienza con Java, che funziona sopra Java. Per molte persone, imparare l'Erlang da zero non è realistico.
Con Akka possono:
- Scrivi codice più facile da spiegare
- Scrivi codice più facile da testare
- Gli scenari di errore e guasto sono gestiti in modo più naturale rispetto alle modalità tradizionali che utilizzano la JVM
- Scrivere codice più veloce, resiliente e semplice per gestire gli errori in modo più fluido e ridurre il numero di bug
PayPal ha immediatamente scritto un proprio framework basato su Akka, chiamato Squbs, usato per rimare con "Cubes". Questo permette di creare uno strato tecnologico modulare per la costruzione di un NanoService chiamato "Cubo". I cubi sono simmetrici e le dipendenze tra i diversi cubi sono anch'esse simmetriche e vaghe, esponendo solo le interfacce dei messaggi che Akka già fornisce.
Descrive anche le difficoltà che i programmatori possono incontrare nell'adottare codice AKKA, poiché potresti anche dover assumere qualcuno formato in Akka/Scala.
Poiché la maggior parte dei servizi ha scopi simili: ricevere richieste, chiamare e leggere e scrivere database, chiamare altri servizi, chiamare motori di regole, ottenere dati dalle cache, scrivere nelle cache... Di conseguenza, i servizi possono essere astratti tramite pattern come Orchestrator Pattern e Perpetual Stream.
Squbs è diventato una pratica standard per PayPal per costruire applicazioni reattive basate su Akka. Se il tuo team non ha ancora considerato sistemi con stato, probabilmente vale la pena provarlo, dato che funziona bene su PayPal, Facebook, Uber e Microsoft.
|
Precedente:Tre fattori che mi fanno sminuire ChromeProssimo:vs crea una cartella, e quando generi la soluzione, non c'è nessuno sotto il file bin
|