Serverless
Il modello di calcolo serverless è il servizio cloud completamente gestito in cui il provider cloud gestisce l'infrastruttura sottostante e alloca e disalloca automaticamente le risorse per eseguire e ridimensionare la richiesta immediata dell'applicazione. Ciò significa che gli sviluppatori non devono preoccuparsi di come viene eseguito il provisioning dell'infrastruttura di computazione di base. Possono invece concentrarsi sull'implementazione di funzioni e funzionalità aziendali nell'applicazione. In breve, gli sviluppatori devono concentrarsi sulla scrittura di codice per la logica dell'applicazione, che verrà distribuita sulle funzioni ed eseguita sugli eventi attivati dall'applicazione o dall'utente. Il modello di calcolo serverless viene fatturato in base all'uso e viene fatturato di conseguenza, rendendolo una scelta più conveniente quando si verificano spesso modifiche impreviste nel carico dell'applicazione.
Il serverless computing è un recente sviluppo nel cloud computing, che ha guadagnato una notevole popolarità negli ultimi anni. È popolare per il concetto di base di esecuzione del codice senza gestire o eseguire il provisioning dei server. Le funzioni Oracle Cloud Infrastructure (OCI) per l'implementazione di piattaforme serverless si basano su Fn Project open source, open source, container native e serverless, con la possibilità di essere eseguito in qualsiasi cloud e on-premise.
Vantaggi
Serverless offre molteplici vantaggi rispetto ad altri servizi disponibili nel cloud e ha un vantaggio a causa di:
- Costo comune operativo ridotto: l'elaborazione serverless ha rimosso il carico di lavoro della gestione di infrastruttura, server e rete e mantiene i team di sviluppo concentrati sulla scrittura di codice e sullo sviluppo di nuove funzionalità aziendali.
- Time-to-market più rapido: il serverless computing consente un time-to-market più rapido in quanto le applicazioni possono essere distribuite più velocemente rispetto ad altri servizi di computazione offerti nel cloud.
- Maggiore scalabilità: l'elaborazione serverless si ridimensiona automaticamente in base alle richieste dei carichi di lavoro per lo scale-up e lo scale-down. Qualsiasi picco di carico si prende cura di se stesso.
- Conveniente: la computazione serverless è conveniente perché devi pagare solo per il tempo in cui il codice dell'applicazione è in esecuzione, con conseguente risparmio sui costi rispetto ai modelli di computazione tradizionali.
- Migliore affidabilità: l'elaborazione serverless dispone di meccanismi di ridondanza e failover integrati, che migliorano l'affidabilità delle applicazioni.
- Flessibilità più elevata: l'elaborazione serverless supporta vari linguaggi di programmazione popolari per offrire flessibilità agli sviluppatori. Supporta anche modelli di distribuzione come i container e la scrittura del codice distribuito nel computing serverless.
Funzionamento
L'elaborazione serverless, spesso indicata come funzione come servizio, consente agli sviluppatori di concentrarsi sulla scrittura di codice e sull'implementazione del codice senza preoccuparsi dell'infrastruttura sottostante necessaria per eseguire il codice dell'applicazione. Attenersi alla procedura riportata di seguito per eseguire il codice su implementazioni serverless come le funzioni OCI.
- Scrivi il tuo codice nel linguaggio di programmazione preferito e inseriscilo in un'immagine contenitore dalla funzione.
- Fornire la definizione della funzione in func.yaml, inclusi il tempo massimo di esecuzione e il consumo di memoria.
- Eseguire il push dell'immagine del contenitore nel registro del contenitore da cui estrarre prima dell'esecuzione.
- Caricare i metadati delle funzioni (limitazioni di memoria e tempo) nel server Fn.
- Aggiungere la funzione alla lista di funzioni nella console.
- Attiva dal comando CLI o dal trigger esterno come richiesta HTTP, pianificazione e servizio evento
- Nella funzione di trigger, identificare l'immagine del contenitore e estrarla dal registro del contenitore.
- Esegue la logica definita nell'immagine del contenitore su un'istanza in una subnet associata all'applicazione a cui appartiene la funzione.
- Dopo l'esecuzione o il periodo di inattività, l'immagine del contenitore viene rimossa e le risorse vengono rilasciate.
Piattaforme
OCI supporta serverless come function as a service, note come OCI Functions e OCI Container Instances.
- Funzioni: Funzioni è una piattaforma completamente gestita, multi-tenant, altamente scalabile, on-demand, funzionante come servizio basata su un'infrastruttura di livello Enterprise e basata sul motore open source Fn Project. Con le funzioni puoi scrivere codice in Java, Python, Node, Go, Ruby e C#.
- Istanze container: Istanze container è un servizio di computazione serverless che consente di eseguire i container in modo rapido e semplice senza gestire alcun server. Fornisce lo stesso livello di isolamento delle macchine virtuali.
Procedure ottimali
Serverless è progettato per soddisfare picchi imprevedibili nella domanda di risorse del carico di lavoro, ma deve essere progettato e implementato con le best practice consigliate per sfruttare un utilizzo efficiente.
- Veloce e ottimizzato: dovrebbe essere implementato per eseguire rapidamente, utilizzare le risorse in modo efficiente ed evitare dipendenze non necessarie.
- Evento guidato: Serverless è adatto all'architettura basata sugli eventi per avviare l'elaborazione dall'attivazione dell'evento per ridurre i costi e migliorare la scalabilità.
- Implementazione con servizi gestiti: l'integrazione di serverless con servizi gestiti riduce le esigenze di complessità e scalabilità. I servizi gestiti come database, storage e messaggistica interagiscono in genere con i servizi serverless.
- Monitoraggio: Monitora le prestazioni e i costi per il serverless da ottimizzare per funzionalità lente e costose. Sfrutta l'implementazione del monitoraggio consigliata da OCI.
- Sicurezza: i dati in archivio e in transito devono essere cifrati con l'accesso al controllo per ridurre al minimo i rischi e gli attacchi alla sicurezza.
Casi d'uso
Serverless ha diversi casi d'uso per esigenze aziendali e funzionali individuali. I casi d'uso comuni sono:
- OdL batch: processo attivato in base alla schedulazione e alla frequenza predefinite.
- Applicazione basata su eventi: processo avviato da un evento esterno, ad esempio un messaggio o una richiesta HTTP.
- Microservizi: un'implementazione di servizi indipendenti sottile.
- Modello di machine learning: implementa modelli su endpoint API scalabili e a costi contenuti.
Spostamento del carico di lavoro in serverless
Lo spostamento del carico di lavoro esistente su serverless può aiutarti a ridurre i costi, aumentare la resilienza e migliorare la scalabilità. Le informazioni riportate di seguito descrivono i passi per lo spostamento del carico di lavoro da on premise a serverless.
- Identifica il carico di lavoro che desideri spostare su serverless e identifica dimensioni, complessità e dipendenze.
- Valuta la piattaforma serverless se una funzione è più adatta o se un'istanza del contenitore è più appropriata.
- Determina le dipendenze dei servizi esterni, ad esempio database, storage e messaggistica per il carico di lavoro.
- Refactoring del codice dell'applicazione per l'ottimizzazione delle prestazioni e containerizzato, se necessario.
- Eseguire il test della funzionalità prevista nell'ambiente serverless dell'applicazione. Utilizzare l'ambiente di test consigliato o simile.
- Distribuisci l'applicazione sulla piattaforma serverless per l'esecuzione.
- Monitora le metriche delle prestazioni dell'applicazione e l'utilizzo delle risorse.
- Ottimizza l'applicazione, se necessario, per migliorare le prestazioni in futuro in base alle metriche acquisite dal monitoraggio.
- Automatizza tutto il possibile utilizzando la pipeline DevOps per la build e l'implementazione.
Sfide e limitazioni
Serverless offre vantaggi, ma considera i seguenti elementi per la distribuzione del carico di lavoro.
- Avvio a freddo: i serverless sono progettati per essere attivati in base all'evento, quindi non sono prontamente disponibili per iniziare l'elaborazione. Anche se richiedono tempi di avvio significativamente trascurabili, considera le richieste di latenza ultra bassa.
- Timeout di esecuzione: Serverless è progettato per ottenere funzionalità e rilascio rapidi delle risorse. Di conseguenza, c'è un timeout associato per serverless per gestire scenari imprevisti per dead lock o infiniti loop e terminazioni. Questi scenari possono portare a perdita di dati e scenari di stato instabili.
- Accesso limitato all'infrastruttura: l'elaborazione serverless ha accesso minimo all'infrastruttura su cui è in esecuzione, quindi deve fare affidamento sulla gestione dello stato esterno o sui servizi di storage per rendere persistenti le informazioni.
- Complessità: l'architettura tradizionale con flussi di lavoro e dipendenze complessi può aumentare la gestione della complessità con serverless per il debug e la risoluzione dei problemi.
Il futuro del serverless
Il futuro del serverless comporta l'eliminazione della necessità di gestire infrastrutture complesse e di scalare manualmente le sfide. Comprende anche la gestione di picchi imprevisti nel carico dell'applicazione pagando solo per l'utilizzo. Esistono diversi framework e soluzioni in fase di sviluppo e di evoluzione su serverless per ridurre al minimo gli sforzi degli sviluppatori per gestire scenari aziendali pronti all'uso. Esamina lo scenario CNCF per trovare più strumenti, framework e piattaforme installabili su serverless.