Cloudflare Flagship
(developers.cloudflare.com)- Cloudflare Flagship é o serviço de feature flags da Cloudflare para controlar a exposição de funcionalidades de aplicações sem redistribuir código
- As flags são definidas por regras de segmentação e rollout baseado em porcentagem, podendo ser avaliadas diretamente em bindings nativos do Workers
- É compatível com OpenFeature e permite avaliar flags em Workers, Node.js e navegadores com o SDK @cloudflare/flagship
- A segmentação oferece suporte a atributos de usuário, 11 operadores de comparação, agrupamento com AND/OR, avaliação sequencial e mantém valores com hash consistente
- As variações suportam booleano, string, número e objeto JSON, e podem ser criadas, editadas e excluídas por aplicativo no dashboard da Cloudflare
Principais recursos
-
Bindings do Workers
- Binding reference
- Avalia flags com bindings nativos do Workers
- Oferece métodos type-safe e fallback automático para valores padrão
-
SDK OpenFeature
- View SDK docs
- O provider OpenFeature @cloudflare/flagship permite avaliar flags em Workers, Node.js e navegadores
- Ao migrar de outro provedor de flags, basta alterar uma linha de configuração
-
Regras de segmentação
- Learn about targeting
- Entrega valores de flag diferentes com base nos atributos do usuário
- As regras oferecem suporte a 11 operadores de comparação, agrupamento lógico com AND/OR e avaliação sequencial
-
Rollout baseado em porcentagem
- Learn about rollouts
- Permite lançar funcionalidades gradualmente de acordo com uma porcentagem de usuários
- O hash consistente garante que o mesmo usuário sempre receba o mesmo valor de flag
-
Variações de múltiplos tipos
- Use Multi-type variations
- As variações de flags podem ser booleanas, strings, números ou objetos JSON estruturados
- Com variações de objeto, é possível passar um bloco inteiro de configuração em uma única flag
-
Gerenciamento de flags
- Use Flag management
- É possível criar, atualizar e excluir flags no dashboard da Cloudflare
- As flags são organizadas em apps mapeados para projetos ou serviços
- Sua primeira feature flag pode ser criada no guia de primeiros passos
1 comentários
Comentários no Hacker News
Não dá para subestimar a abstração com 0 idas e voltas de rede. Em cima de
f(feature_name, context), o contexto pode ser ajustado de forma extremamente granular: um estoque específico, um fornecedor específico, um usuário específico de um cliente B2B específico, um subtipo específico de modelo de negócios, até a visibilidade em um horário específicoSe você puder escrever a lógica diretamente e executá-la em um tight loop com velocidade de constante, a agilidade do negócio aumenta muito. Se achar que algum texto pode mudar para certos clientes, basta transformar isso em código configurável, e testes e flags vêm naturalmente junto
Porém, esse tipo de composição 0-hop exige um motor de execução no cliente sofisticado, e não parece ser isso que a Cloudflare implementou aqui. Em Workers com restrições de memória, isso faz sentido, mas em infraestrutura tradicional parece menos convincente
Gosto bastante da abordagem da Statsig: "Server SDKs hold the entire ruleset of your project in memory..."
https://docs.statsig.com/sdks/how-evaluation-works
Também dá para construir isso internamente. Basta sincronizar o conjunto de regras a cada poucos segundos em algumas estruturas de dados a partir de uma thread em segundo plano e trocar a referência de forma atômica. Depois disso, só é preciso uma interface CRUD para a dimensão das regras aplicadas
Dito isso, é indispensável ter governança sobre quem pode mexer em quais candidatos a constantes. Grandes poderes trazem grandes responsabilidades
Vejo feature flags mais como algo usado junto com desenvolvimento trunk-based: ativar recursos em QA, ainda não expor em produção e permitir testes por PO/PM. O trunk-based development permite um DevOps rápido e simples sem estratégias de branching complexas
Já a configuração da aplicação faz parte da própria aplicação e é o espaço para customizá-la de acordo com o contexto de negócio. Não sei se existem frameworks ou ferramentas voltados a isso, mas as duas coisas precisam ser claramente separadas
Foi justamente essa combinação de módulo + aleatoriedade que obrigou ferramentas como LaunchDarkly a oferecer SDKs para várias linguagens, e os SDKs com que lidei simplesmente não se encaixavam bem nessas linguagens. Na minha visão, empurrar a avaliação para a edge tornou o sistema inteiro mais complexo do que precisava ser
Na prática, em geral basta recarregar ocasionalmente a tabela atual de flags “para este cliente”, e isso é muito menos incômodo. Ainda bem que existe o Flipper, porque assim não preciso mais lidar com isso manualmente
https://www.stigg.io/blog-posts/entitlements-untangled-the-m...
Contratualmente, a cobrança por assento é um pouco salgada, mas ainda administrável
Parece um Boolean-as-a-service com verniz
Se simplificar assim, qualquer serviço do mundo pode ser reduzido a bits-as-a-service. Na prática, há valor de negócio legítimo nisso e também complexidade na forma como é entregue
Dá para chamar qualquer ferramenta SaaS de “excel-as-a-service”, e é mais ou menos esse o nível desse tipo de comentário
Na documentação do SDK JS há este aviso: “O provider de cliente precisa de um token de API para buscar os valores das flags. Esse token não é limitado a um único app, então qualquer pessoa com o token pode avaliar as flags de todos os apps da conta. Use com cautela em aplicações públicas”
https://developers.cloudflare.com/flagship/sdk/client-provid...
Fico me perguntando por que um SDK cliente projetado para ser distribuído no navegador exigiria esse tipo de cuidado. Isso significa que qualquer cliente pode enviar requisições com um novo
targetingKeye observar as flags de outros usuários?As flags não deveriam conter informações sensíveis, mas parece uma escolha de design interessante
Não parece plausível que, seis meses atrás, a Cloudflare tenha decidido seriamente criar um concorrente da LaunchDarkly
Isso é bom, mas, ironicamente, ainda estou esperando sair esse recurso que provavelmente será oferecido usando o Flagship
https://blog.cloudflare.com/enterprise-grade-features-for-al...
Ainda não acho que tenha havido um único caso de recurso exclusivo de Enterprise descendo para contas pagas inferiores
O que mais me interessa em particular é isto:
https://developers.cloudflare.com/speed/optimization/content...
A Cloudflare tem mandado bem ultimamente, mas falta controle de permissões granular. Ainda preciso criar uma conta totalmente separada para produção, e como um domínio só pode ficar vinculado a uma única conta, isso bagunça o SSO
Ainda uso AWS para envio de e-mail, então seria bom se a Cloudflare lançasse algo nessa área
Eu não conhecia o OpenFeature, achei muito legal. Alguém aqui tem experiência integrando isso? https://openfeature.dev
Em transparência, sou CTO da Flagsmith. Nos últimos anos vimos uma curva clara de aumento na adoção do OpenFeature. Antes nós incentivávamos os clientes a experimentar; agora são os clientes que chegam exigindo OpenFeature como requisito
O suporte dos vendors já está bem maduro e cobre praticamente todas as linguagens. Se você está integrando feature flags em um serviço novo ou migrando de uma implementação própria para uma solução de terceiros, eu recomendo OpenFeature
Levamos cerca de 2 semanas para construir um backend totalmente customizado. Os SDKs para várias linguagens funcionaram sem problemas. Encontrei um bug, mas reportei e ele foi corrigido no mesmo dia
Eu não entendo muito bem feature flags. Em essência, qual é a diferença para um Boolean no banco de dados?
Equipes que constroem isso por conta própria costumam descobrir que o problema cresce rápido quando produto, marketing e vendas querem fazer targeting com regras cada vez mais complexas
Em termos gerais, não é um problema especialmente difícil, mas é grande. Você precisa de muita funcionalidade invisível no começo
Feature flags são, na prática, mais parecidas com um sistema de permissões. Trata-se de dar acesso a certos recursos apenas a usuários específicos, e quem já lidou com sistemas de permissão sabe como filiação a grupos, grupos hierárquicos, papéis, ACLs etc. ficam complexos. Esses elementos são parecidos com os vários tipos de regras de targeting em um sistema de feature flags
A própria Cloudflare também usa isso internamente para lançar novos recursos ou builds primeiro para clientes gratuitos e, após um período de estabilização, expandir gradualmente para clientes maiores
Feature flags também podem ser ativadas aleatoriamente, quase como um tipo de fuzz testing. Não pense só em “coisa nova”; pode ser também “mudança de comportamento”
Você pode pensar nisso como um Boolean em cima de todos os clientes, mas normalmente não é assim que se implementa
O principal atrativo de feature flags é permitir trabalhar em recursos grandes, que levariam meses e muitos commits, direto na branch principal. Para mim, isso cria um processo de desenvolvimento mais leve e iterativo
Em contraste com manter branches separadas e até alvos de deploy separados para recursos em desenvolvimento grande
Feature flags muitas vezes acabam sendo excessivamente elaboradas
Basta verificar um valor de configuração, valor no banco de dados ou variável de ambiente e seguir dinamicamente por um caminho ou outro
É só isso. Você deve tornar os recursos pequenos ou refatorar o código para conseguir alterná-los facilmente em um nível alto
Se isso não for fácil, uma implementação mais complexa de feature flags pode ajudar a coordenar a ativação do recurso entre microsserviços
Se houver muitos recursos, um dashboard também pode ser útil
Mas eu vejo ambos como sinais fortes de que talvez você devesse evitar feature flags. Elas funcionam melhor para mudanças locais e temporárias; caso contrário, a complexidade vai se acumulando e fica difícil de administrar e manter
Claro que você não vai querer que o usuário perca o recurso só porque passou do limite de receita ou cruzou uma fronteira, então é preciso algum tipo de implementação de rastreamento. Analytics e rastreamento de erros também precisam se comunicar com o serviço de feature flags
Não é ciência de foguete, mas com certeza é mais complexo do que variável de ambiente
Sempre fico animado quando a Cloudflare começa a oferecer algo para o qual antes era preciso usar outro provedor. Passa confiança de que vai ser sólido
Na Function, usamos Statsig. No começo, duas pessoas passaram a usar em um produto, mas em 12 meses uma boa parte do texto do produto e dos rollouts já era movida por Statsig
O Statsig tem avaliação no lado do cliente, então dá para escrever regras e rollouts com base nos conceitos internos sem que os servidores do Statsig precisem processar os dados dos usuários
Espero que a Cloudflare faça aqui um produto sofisticado, para que no futuro não seja mais preciso usar outro produto
Sou só um usuário comum que não conhece bem os detalhes técnicos, mas acho a Cloudflare relativamente fácil de usar. Espero que continue mandando bem