Flag delle funzioni
Come esporre progressivamente le funzioni con i flag delle funzioni.

Ian Buchanan
Principal Solutions Engineer
Se prevedi di implementare la continuous integration delle funzioni nell'applicazione durante lo sviluppo, potresti prendere in considerazione l'uso dei flag delle funzioni. Dopotutto, è consigliabile attivare o disattivare le funzioni e nasconderle, disabilitarle o abilitarle. È inoltre consigliabile presentare le diverse varianti delle funzioni agli utenti per scoprire qual è la migliore. I flag delle funzioni, noti anche come "toggle", "bit", "flipper" o "switch", consentono di fare questo e molto altro.
Cosa sono i flag delle funzioni?
I flag delle funzioni (noti anche come "toggle") sono una tecnica di ingegneria software che attiva e disattiva una determinata funzionalità durante il runtime, senza distribuire nuovo codice. Ciò consente ai team di apportare modifiche senza eseguire il push di codice aggiuntivo e garantisce una sperimentazione più controllata durante il ciclo di vita delle funzioni. Per questo motivo, i flag delle funzioni consentono molti nuovi flussi di lavoro che sono incredibilmente utili per uno stile di gestione Agile e ambienti di CI/CD.
Durante lo sviluppo, i progettisti del software racchiudono i percorsi di codice desiderati in un flag delle funzioni. Quello che segue è un esempio di un flag delle funzioni di base scritto in Javascript:
if(featureFlags[‘new-cool-feature’] == true){
renderNewCoolFeature();
}
Questo codice rappresenta una semplice istruzione per verificare se è stata abilitata una "nuova funzione interessante". Anche con framework e strumenti avanzati che aiutano a gestire i dati dei flag o l'aggiunta e la rimozione del nuovo percorso logico, i flag delle funzioni sono essenzialmente delle "istruzioni IF". Pertanto, questo switch binario è ciò che accomuna tutti i sinonimi.
Scopri la soluzione
Creare e gestire software con Open DevOps
Materiale correlato
Informazioni sullo sviluppo basato su trunk
Vantaggi dei flag delle funzioni

Di base, i flag delle funzioni consentono di eseguire il commit e la distribuzione del codice nell'ambiente di produzione in uno stato inattivo e quindi di attivarlo in un secondo momento. In questo modo, i team godono di maggiore controllo sull'esperienza utente con il prodotto finale. I team di sviluppo possono scegliere quando e a quali utenti distribuire il nuovo codice.
Funzionalità di convalida delle funzioni
Gli sviluppatori possono sfruttare i flag delle funzioni per eseguire "implementazioni graduali" delle nuove funzioni del prodotto. Le nuove funzioni possono essere compilate con l'integrazione immediata dei feature toggle come parte del rilascio previsto. Il flag delle funzioni può essere disattivato per impostazione predefinita in modo che, una volta distribuito, il codice rimanga inattivo durante la fase di produzione e per disabilitare la nuova funzione finché il feature toggle non viene attivato in modo esplicito. I team scelgono quindi quando attivare il flag delle funzioni, che a sua volta attiva il codice, ed eseguire pertanto il controllo di qualità verificando che il codice si comporti come previsto. Se il team rileva un problema durante questo processo, può disattivare immediatamente il flag delle funzioni per disabilitare il nuovo codice e ridurre al minimo l'esposizione degli utenti al problema.
Riduci al minimo il rischio
Partendo dall'idea delle implementazioni graduali descritta sopra, i team più solerti possono sfruttare i flag delle funzioni in combinazione con il monitoraggio e le metriche del sistema per rispondere ai problemi intermittenti osservabili. Ad esempio, se un'applicazione registra un picco di traffico e il sistema di monitoraggio segnala un aumento dei ticket, il team può utilizzare i flag delle funzioni per disabilitare le funzioni con prestazioni scadenti.
Cambia il comportamento del sistema senza modifiche distruttive
I flag delle funzioni possono essere utilizzati per ridurre al minimo gli scenari complessi di integrazione e distribuzione del codice. Può essere difficile integrare nel branch di produzione principale di un repository le nuove funzionalità complesse o le attività sensibili di refactoring. Ciò risulta ulteriormente complicato se più sviluppatori lavorano su parti sovrapposte della base di codice.
I flag delle funzioni possono essere usati per isolare le nuove modifiche finché il codice noto e stabile rimane in vigore. In questo modo gli sviluppatori possono evitare branch di funzioni a esecuzione prolungata eseguendo frequentemente il commit nel branch principale di un repository dietro il feature toggle. Quando il nuovo codice è pronto, non è necessario uno scenario di merge e distribuzione collaborativo distruttivo; il team può attivare il flag delle funzioni per abilitare il nuovo sistema.
Casi d'uso dei flag delle funzioni

La nuova utilità dei flag delle funzioni apre le porte a una varietà di casi d'uso creativi per i team più operosi. Gli esempi seguenti evidenziano alcune applicazioni più diffuse dei flag delle funzioni negli ambienti Agile.
Test dei prodotti
I flag delle funzioni possono essere utilizzati per rilasciare gradualmente nuove funzioni del prodotto. Può non essere subito chiaro se una nuova funzione proposta verrà adottata dagli utenti e se valga il ritorno sull'investimento. I team possono rilasciare una nuova funzione del prodotto o un'idea parziale della funzione in un flag delle funzioni e distribuirlo presso un sottoinsieme di utenti per raccoglierne il feedback. Il sottoinsieme di utenti può essere costituito da utenti esperti lieti di eseguire test beta e lasciare recensioni. Se la nuova idea di prodotto si rivela vincente, il team di sviluppo può distribuire il flag delle funzioni a una base di utenti più ampia. Se invece la nuova idea di prodotto si rivela un flop, il team di sviluppo può facilmente disabilitare il flag delle funzioni e successivamente rimuoverlo dalla base di codice.
Condurre esperimenti
Gli esperimenti o i test A/B sono un esempio base dei flag delle funzioni. Nella loro forma più semplice, i flag delle funzioni fungono da toggle dello stato di attivazione/disattivazione di una funzione. I flag delle funzioni avanzati utilizzano più flag contemporaneamente per attivare esperienze diverse per sottoinsiemi di utenti. Ad esempio, immagina di dividere la tua base di utenti in terzi. Ogni terzo riceve il suo flag e la sua esperienza utente unici. Puoi quindi mettere a confronto le prestazioni di questi tre flag per determinare la versione definitiva da sottoporre a commit.
Migrazioni
Alcune volte, un'applicazione necessita di una migrazione dei dati che richiede modifiche del codice dipendenti dall'applicazione. Questi scenari sono task di distribuzione sensibili e suddivisi in più fasi. In un database dell'applicazione, è possibile modificare, rimuovere o aggiungere i diversi campi di database. Se il codice dell'applicazione non è pronto per questa modifica del database, si verificano guasti ed errori. Se ciò accade, è necessaria una distribuzione coordinata tra le modifiche del database e il codice dell'applicazione.
I flag delle funzioni aiutano ad alleviare la complessità di questo scenario consentendo ai team di preparare in anticipo le modifiche alle applicazioni in un flag delle funzioni. Una volta apportate le modifiche al database, il team può attivare/disattivare immediatamente il flag delle funzioni in base al codice dell'applicazione. Ciò elimina il rischio e il tempo di attesa per la distribuzione del nuovo codice dell'applicazione e possibilmente anche la mancata riuscita della distribuzione e la desincronizzazione dell'applicazione dal database.
Lanci canary
In questo contesto, con il termine "canary" ci si riferisce a un'antica e macabra pratica in cui i minatori portavano i canarini nelle miniere di carbone per rilevare la presenza di monossido di carbonio. A causa di tassi metabolici più elevati e frequenze respiratorie rapide, gli uccelli soccombevano per il monossido di carbonio prima dei minatori.
I lanci canary nello sviluppo del software avvengono quando una nuova funzione o modifica del codice viene distribuita a un piccolo sottoinsieme di utenti per monitorarne il comportamento prima di rilasciarla a tutti gli utenti. Se la nuova funzione mostra segni di errori o guasti, viene automaticamente ripristinata. I flag delle funzioni sono essenziali per questo processo poiché limitano il pool di destinatari e sono in grado di disattivare facilmente le funzioni.
Interruzione del sistema
I flag delle funzioni possono essere utilizzati anche come strumenti di interruzione del sistema. Un'applicazione Web può utilizzare un flag delle funzioni per "disattivare" l'intero sito Web per svolgere attività di manutenzione o tempo di inattività. Il flag delle funzioni può essere instrumentato in tutta la base di codice per inviare le transazioni sensibili e mostrare i contenuti delle interruzioni agli utenti finali. Ciò può essere incredibilmente utile quando si eseguono distribuzioni delicate o se viene rilevato un problema imprevisto che deve essere risolto con urgenza. Tramite questo processo, i team possono gestire in tutta sicurezza un'interruzione controllata, se necessario.
Continuous deployment
I flag delle funzioni possono essere usati come componente integrale per creare un vero e proprio sistema di continuous deployment. La continuous deployment è una pipeline automatizzata che prende nuovo codice dagli sviluppatori e lo distribuisce automaticamente agli utenti finali di produzione. La continuous deployment dipende da livelli di test automatizzati che verificano che il nuovo codice si comporti come previsto rispetto a una specifica corrispondente mentre si muove attraverso la pipeline.
Con i flag delle funzioni, la continuous delivery è più sicura poiché le modifiche al codice sono separate dalla divulgazione delle funzioni agli utenti. Il nuovo codice può essere sottoposto a merge e distribuito automaticamente nell'ambiente di produzione e poi attendere dietro un flag delle funzioni. Il sistema di continuous deployment può monitorare il comportamento e il traffico degli utenti e attivare quindi automaticamente il flag delle funzioni. Al contrario, il sistema di continuous deployment è in grado di monitorare il codice del nuovo flag delle funzioni per vedere se si comporta come previsto e ripristinarlo in caso contrario.
Branch di funzioni e flag delle funzioni a confronto
Sebbene abbiano un nome simile, i branch di funzioni e i flag delle funzioni sono molto diversi. I branch di funzioni sono un pattern di flusso di lavoro attinente ai repository di controllo del codice sorgente Git. Quando gli sviluppatori iniziano a lavorare a una nuova funzione del prodotto, creano un nuovo branch Git corrispondente che si discosta dal branch principale e che conterrà tutto il codice relativo alla nuova funzione. Quando completano la nuova funzione, gli sviluppatori eseguono nuovamente il merge del branch di funzioni nel branch principale e procedono alla distribuzione. I branch di funzioni sono distinti e indipendenti dai flag delle funzioni.
I flag delle funzioni possono essere utilizzati con i branch di funzioni. Per creare un flag delle funzioni, gli sviluppatori creano un branch di funzioni ed eseguono il commit del codice del nuovo flag delle funzioni nel branch di funzioni. Una volta instrumentato, il branch di funzioni viene sottoposto a merge e distribuito e il flag delle funzioni diventa quindi accessibile nell'ambiente di produzione.
Durante lo sviluppo di un branch di funzioni, un progetto può diventare di lunga durata o deviare dal branch principale e contenere numerosi commit. Gli sviluppatori devono assicurarsi che il branch di funzioni sia continuamente aggiornato in modo che quando è pronto per il merge ci siano conflitti minimi e, per riuscirci, devono lavorare di più. I flag delle funzioni possono essere utilizzati come rimedi a questo scenario. Invece di creare un branch di funzioni di lunga durata ed eseguire un merge di grandi dimensioni quando la nuova funzione è pronta, è possibile creare un flag delle funzioni e sottoporlo immediatamente a merge nel branch principale.
Come implementare i flag delle funzioni
Per implementare i flag delle funzioni esistono molti percorsi che presentano considerazioni logistiche e ritorno sull'investimento diversi. Il percorso da intraprendere dipende dalle esigenze e dagli obiettivi organizzativi del team.
Per garantire il corretto funzionamento dei flag delle funzioni, occorre tenere presenti alcune dipendenze dall'infrastruttura. Man mano che i team usano sempre più i flag delle funzioni e la loro attivazione o disattivazione diventa una decisione aziendale, è fondamentale disporre di un archivio dati attendibili e di un meccanismo di gestione dei flag. Molti servizi di flag delle funzioni di terze parti forniscono questa dipendenza dall'archivio dati.
I servizi di flag delle funzioni ospitati da terze parti sono spesso la soluzione migliore. Tali servizi gestiscono infatti la pesante logistica e offrono librerie facili da integrare che accelerano il processo di installazione. In questo modo i team possono concentrarsi sulle attività aziendali principali anziché sulla gestione dell'infrastruttura. Tuttavia, se il tuo team nutre preoccupazioni sulla sicurezza delle terze parti, potrebbe essere meglio implementare un proprio backend dei flag di sicurezza.
Separatamente, gli ingegneri devono instrumentare una nuova logica del codice che recuperi lo stato del flag dal servizio per attivare i contenuti con flag. Ciò rende necessari merge del codice e distribuzioni del codice del flag prima della sua attivazione. Poiché molti flag delle funzioni sono temporanei, non dimenticare di rimuovere quelli non più necessari.
In conclusione...
I flag delle funzioni sono una potente aggiunta all'arsenale di sviluppo Agile e ci sono molti modi creativi per utilizzarli. I flag delle funzioni sono complementari alla continuous deployment e al controllo delle versioni di Git. Nel complesso, i flag delle funzioni offrono ai team un maggiore controllo della base di codice, della distribuzione e dell'esperienza dell'utente finale.
Dai un'occhiata ai nostri tutorial sui flag delle funzioni DevOps, che illustrano le best practice in una toolchain Open DevOps.
Condividi l'articolo
Argomento successivo
Letture consigliate
Aggiungi ai preferiti queste risorse per ricevere informazioni sui tipi di team DevOps e aggiornamenti continui su DevOps in Atlassian.

Community DevOps

Leggi il blog
