Com'era questo contenuto?
Build/test veloci, affidabili ed economici su larga scala con la soluzione remota di EngFlow su AWS
Anche se le moderne organizzazioni di ingegneria adottano architetture di microservizi e scompongono le loro applicazioni monolitiche, le basi di codice ampie e complesse sono comuni. Una maggiore quantità di codici comporta cicli di build e test più lunghi, con conseguente riduzione della produttività degli sviluppatori e aumento dei costi. Inoltre, i budget di calcolo finiti per l'integrazione continua (CI) causano code di esecuzione, che riducono ulteriormente la produttività degli ingegneri.
EngFlow aiuta le organizzazioni moderne a migliorare i cicli di build e test per massimizzare la produttività dei team di sviluppo software attraverso l'esecuzione e la cache remote.
Per fornire una soluzione performante, affidabile ed economica ai propri clienti, EngFlow ha seguito le migliori pratiche del Framework AWS Well-Architected. In questo post, ci concentreremo sulle pratiche che hanno contribuito a migliorare il rapporto prezzo/prestazioni e a migliorare la disponibilità.
Architettura del servizio di esecuzione remota di EngFlow
I clienti EngFlow interagiscono con il servizio di esecuzione remota su un canale sicuro e privato, protetto su diversi livelli utilizzando diverse tecnologie di rete come Network Load Balancer e endpoint, sottoreti e gruppi di sicurezza del cloud privato virtuale (VPC) (vedi la Figura 1).
Gli scheduler, eseguiti su istanze Amazon Elastic Compute Cloud (Amazon EC2) con volumi Amazon Elastic Block Store (Amazon EBS), dividono ogni richiesta di build/test in parti indipendenti e posizionano i singoli lavori di build/test su istanze Worker esistenti, che soddisfano i requisiti di computazione/memoria del processo di build/test. Il Dimensionamento automatico AWS viene utilizzato per fornire funzionalità di autoguarigione mantenendo un numero fisso di istanze scheduler in esecuzione. Le istanze di pianificazione Amazon EC2 guaste vengono sostituite automaticamente senza la necessità dell'intervento umano.
Il software di esecuzione remota di EngFlow distribuisce le azioni di creazione/test su centinaia o addirittura migliaia di istanze Worker, tutte eseguite su istanze EC2 con volumi EBS montati. Qui, EngFlow utilizza il Dimensionamento automatico AWS per dimensionare la capacità di elaborazione richiesta in entrata e in uscita in base alla domanda, riducendo al minimo gli sprechi e massimizzando l'utilizzo. Per supportare le diverse esigenze dei clienti e offrire una soluzione conveniente, le istanze Worker possono essere eseguite su istanze on demand EC2 o istanze spot. EngFlow offre la possibilità di ricorrere alle istanze on demand per una maggiore affidabilità.
La soluzione di esecuzione remota si abbina alla soluzione di cache remota di EngFlow per prevenire la duplicazione del lavoro. Memorizzando nella cache tutti gli artefatti di build/test sullo storage locale eseguito da un'organizzazione, EngFlow consente ai team di scaricare gli artefatti di build/test precedenti anziché rieseguire autonomamente le attività di build/test. Ciò riduce i tempi e i costi di build e test. Mentre le istanze nel cloud vanno e vengono, gli artefatti di build/test vengono sincronizzati in modo duraturo ed economico su Amazon Simple Storage Service (Amazon S3) per un accesso persistente.
Per supportare le operazioni quando implementata in un account cliente, la soluzione di esecuzione remota di EngFlow utilizza servizi standard AWS come file di log, metriche e allarmi Amazon CloudWatch.
Diamo un'occhiata più approfondita a come EngFlow consente di realizzare build veloci, affidabili ed economiche su AWS e a come ha identificato le aree di miglioramento della soluzione di esecuzione remota durante la revisione di Well-Architected.
Prestazioni
Molti clienti di EngFlow considerano la velocità di building/testing una delle principali proposte di valore di EngFlow. Ciò si traduce in una maggiore produttività degli sviluppatori, un time to market più rapido e la capacità di eseguire più esperimenti contemporaneamente, solo per citare alcuni dei vantaggi. L'esecuzione di un build/test CI nel cloud e l'utilizzo di nodi di elaborazione distribuiti dell'ultima e più potente generazione di CPU, anziché una workstation locale, hanno aiutato clienti come Blue River Technology a ottenere prestazioni 9 volte superiori per il loro build/test CI.
Gli ingegneri di EngFlow aiutano i clienti a selezionare l'istanza EC2 più performante ed economica che meglio si adatta alle loro esigenze specifiche, come i processori AWS Graviton3 di ultima generazione. Utilizzano i più recenti volumi EBS gp3, che forniscono ai clienti la più recente generazione di volumi SSD per uso generico per garantire che le build e i test siano il più veloci possibile. Questo è stato possibile analizzando il carico di lavoro unico del cliente e sfruttando le metriche CloudWatch standard e personalizzate.
Inoltre, la capacità di ottimizzare la configurazione del Dimensionamento automatico AWS per le istanze Worker aiuta EngFlow a trovare l'equilibrio ottimale tra capacità e costi, in modo che i clienti abbiano sempre abbastanza capacità di calcolo e storage per avviare immediatamente una nuova attività di build/test pianificata, senza sprecare denaro in risorse inattive.
Affidabilità
EngFlow ha seguito le best practice di AWS per fornire un servizio affidabile fin dall'inizio per eseguire build/test urgenti per migliaia di sviluppatori.
La sua configurazione Dimensionamento automatico AWS si estende su tre zone di disponibilità AWS nella regione AWS selezionata per scalare in base alla domanda del cliente, resistere a un'interruzione del servizio locale e fornire funzionalità di autoguarigione sostituendo automaticamente le istanze Amazon EC2 guaste. Amazon S3 completa la soluzione come servizio di storage durevole e ad alta disponibilità per gli artefatti di build/test.
Durante la revisione di Well-Architected, EngFlow ha scoperto un'area per migliorare l'affidabilità del proprio servizio. Dimensionamento automatico Amazon EC2 utilizza politiche di terminazione per determinare quali istanze terminare per prime durante gli eventi di scale-in. Le politiche di terminazione definiscono i criteri di terminazione utilizzati dal simensionamento automatico nella scelta delle istanze da terminare.
Per impostazione predefinita, la politica di terminazione seleziona la zona di disponibilità con il maggior numero di istanze. Termina l'istanza che è stata avviata dal modello di avvio o dalla configurazione di avvio meno recenti. Se le istanze sono state avviate dallo stesso modello di avvio o configurazione di avvio, Dimensionamento automatico Amazon EC2 seleziona l'istanza più vicina all'ora di fatturazione successiva e la termina.
EngFlow ha osservato che questa politica di terminazione predefinita a volte chiudeva le istanze EC2 durante l'esecuzione di un lavoro prezioso per i nostri clienti. Sebbene l'esecuzione remota di EngFlow provasse automaticamente a ripetere il lavoro, ciò comportava esecuzioni di build/test più lunghe, costi più elevati e domande da parte dei clienti. Creando una propria politica di terminazione personalizzata in combinazione con l'utilizzo della protezione scalabile delle istanze, EngFlow è stata in grado di aumentare la propria affidabilità e migliorare l'efficienza.
Efficienza dei costi
I clienti EngFlow eseguono build/test CI su larga scala, utilizzando centinaia o addirittura migliaia di istanze EC2 contemporaneamente nelle ore di punta. Questo carico di lavoro rappresenta un'occasione per cercare opportunità di ottimizzazione dei costi per conto dei nostri clienti.
Per risparmiare fino al 90% sui costi di elaborazione rispetto all'on-demand, nella nostra revisione di Well-Architected abbiamo discusso con EngFlow sulla possibilità di abilitare le istanze spot per la loro esecuzione remota, sulla base della serie di istanze spot Amazon EC2.
"Eseguita in AWS, questa funzionalità è un'enorme opportunità, per noi e per i nostri clienti, per diventare più efficienti in termini di costi. Ci è piaciuto molto implementarla. In base alla progettazione, le nostre istanze Worker sono prive di stato e gestiscono le terminazioni spontanee con un robusto meccanismo di ripetizione dei tentativi. Le istanze spot AWS si sono rivelate perfette, in quanto hanno consentito a EngFlow e ai nostri clienti di risparmiare in media il 70% sui costi di elaborazione", ha spiegato Yannic Bonenberger, ingegnere di EngFlow.
Mentre lavorava all'integrazione delle istanze spot, EngFlow ha anche migliorato l'utilizzo complessivo delle risorse delle istanze EC2 migliorando il nostro algoritmo di pianificazione delle istanze Worker, con conseguente ulteriore risparmio sui costi per i nostri clienti.
Dopo aver integrato le istanze spot, EngFlow ha ascoltato gli avvisi di interruzione delle istanze spot, che vengono emessi due minuti prima che Amazon EC2 interrompa o chiuda l'istanza spot. In questo modo, potrebbero evitare di pianificare nuovi lavori di build/test su istanze che verranno recuperate presto. Analogamente, i Solution Architect AWS hanno anche consigliato di ascoltare i consigli di ribilanciamento delle istanze EC2 per evitare di pianificare nuovi processi di build/test su istanze con un'alta probabilità di essere recuperate presto. Dopo aver implementato questi consigli, i clienti di EngFlow hanno riscontrato un minor numero di tentativi di build/test a causa della chiusura prematura delle istanze EC2.
Un approccio promettente alle build e ai test moderni
Grandi e agili organizzazioni tecnologiche come piattaforme di social media, marketplace di viaggi a breve termine e case automobilistiche si affidano alla piattaforma di EngFlow per mantenere gli ingegneri operativi e garantire l'agilità necessaria per lo sviluppo di software moderni. AWS è alla base del successo di EngFlow, assicurando un'architettura flessibile ed efficienza in termini di costi, il che si traduce direttamente in un vantaggio competitivo per i clienti finali.
"È incredibile la quantità di potenza che puoi avere a disposizione. È la prima volta nella storia che puoi ottenere 1.000 macchine come singolo sviluppatore e provare qualcosa su larga scala", afferma Ulf Adams, CTO di EngFlow.
Christian Mueller
Nel suo ruolo di Principal Solutions Architect per un cliente strategico nel settore automobilistico, presso Amazon Web Services (AWS) Christian contribuisce a massimizzare il potenziale del cloud AWS per garantire al cliente un successo ancora maggiore. La sua passione per l'approccio serverless si sposa perfettamente con la sua partecipazione alla vasta trasformazione in atto nell'industria automobilistica, che spazia dai veicoli connessi e autonomi a quelli definiti dal software.
Luis Pino
Luis è Software Engineer presso EngFlow ed è responsabile di assicurarsi che la configurazione dell'infrastruttura di EngFlow funzioni nel modo più fluido possibile. Precedentemente, durante i suoi cinque anni in Google, Luis ha contribuito a sviluppare Bazel concentrandosi sulle API esterne e sul supporto per macOS. Inoltre, ha conseguito un dottorato di ricerca in Informatica presso l'École Polytechnique, con specializzazione nella verifica formale del software.
Com'era questo contenuto?