Alta escalabilidade menciona sinalizadores de recursos aqui:
5 coisas tóxicas para a escalabilidade , "5. Falta de sinalizadores de recursos"
O que exatamente são sinalizadores de recursos?
architecture
scalability
GurdeepS
fonte
fonte
Respostas:
Um 'sinalizador de recurso' (ou Alternância de recurso ) é a capacidade de ativar / desativar recursos (subseções) de seu aplicativo facilmente:
Acho que o exemplo foi que é útil ter o controle para reduzir um pouco o conjunto de recursos se você precisar, digamos, reduzir as consultas de banco de dados se a carga estiver muito alta.
Existem muitos outros motivos pelos quais você gostaria de usar isso - um dos principais é habilitar a Entrega Contínua : colocar coisas em produção / ao vivo, mas com o recurso desabilitado / alternado até que seja concluído. Freqüentemente usamos o que chamamos de 'cookie de desenvolvimento' para mostrar recursos incompletos apenas para a equipe de desenvolvimento. Dessa forma, podemos testar o trabalho parcialmente concluído na produção (oh yeh! Existe uma integração melhor?) Em várias versões / implantações antes de 'desmarcá-lo' (concluí-lo) e se tornar visível para o público.
Aqui está um pacote simples que ajuda você a fazer isso no terreno da ASP.NET MVC: https://github.com/cottsak/DevCookie (divulgação completa: eu sou o autor)
Fowler também tem um artigo muito mais longo do que o link acima, com muito mais detalhes .
Esta postagem (também no site de Fowler) explica os vários tipos de estratégias de alternância . O DevCookie suporta a estratégia baseada em linha principal / tronco e é chamado de " Release Toggle " no artigo.
A resposta de Adil destaca que há muitos termos e motivos pelos quais você pode querer uma parte dessa infraestrutura. Lembre-se de que você só precisa de algumas dessas coisas. Por exemplo, posso querer apenas habilitar um fluxo de trabalho de implantação / entrega simples e ágil e, portanto, uma infraestrutura simples será suficiente. Se você decidir que deseja passar para a experimentação #leanstartup completa com A / B, testes de coorte e coisas como implementação controlada, você deve considerar uma ferramenta de análise (por exemplo, Heap ) que facilita essas metodologias de desenvolvimento baseadas em dados como uma solução distinta . Uma infraestrutura alternada que faz todos os itens acima resultará em inchaço e complexidade desnecessária.
Se você chegou até aqui, talvez queira dar uma olhada em algumas de minhas outras idéias sobre desenvolvimento de linha principal, alternância de recursos e outras ideias tolas como TEST, QA, SIT, STAND, CROUCH .
fonte
Feature Flag é uma técnica para desligar alguma funcionalidade de seu aplicativo, via configuração, sem implantar novo código.
Os sinalizadores de recursos desempenham um papel fundamental no esquema de CI, em que os recursos são implantados constantemente, mas não necessariamente "liberados" na produção.
Mais informações aqui:
- EDITAR:
Implementação de sinalizadores de recurso java .
fonte
Sinalizadores de recursos, alternadores de recursos, experimentos e implementações controladas são sinônimos para uma ideia simples, mas poderosa: implementações de código separadas de implementações de recursos. Falando francamente, é a capacidade de enviar os compromissos de seu recurso para a produção enquanto escolhe quem entre seus clientes - se houver alguém - pode ver esse recurso.
Eles foram popularizados em parte pelo Gatekeeper do Facebook . O LiX do LinkedIn é outro bom exemplo.
Abraçar esta ideia simples estabelece a base para muitas práticas recomendadas, incluindo:
Implantação / entrega contínua - vários envios de código para produção em um dia.
Desenvolvimento de tronco / linha principal - ramificações de recursos devem ser criadas apenas para solicitações pull, não para desenvolvimento de recursos de longa duração.
Não há mais trens de liberação para atolar as coisas.
Teste de QA / Perf na produção - o teste real de QA e desempenho é feito na infraestrutura de produção com tráfego de produção. Não perca tempo construindo laboratórios de desempenho extensos e ambientes de preparação.
Experimentação - saiba como um novo recurso move a agulha em seus KPIs.
Evitando hotfixes ou reversões de código quando problemas acontecem - ambos os hotfixes e reversões de código são estressantes, demoram muito e levam a mais problemas do que o necessário. Em vez disso, desative o recurso ou reduza-o.
Outros mencionaram bibliotecas de código aberto. Um bom exemplo de uma solução completa - como Gatekeeper e LiX - é Split . Eu trabalho para Split.
fonte
Há muitas respostas excelentes aqui, todas direcionadas à importante definição básica popularizada na postagem de Martin Fowler :
São trechos de código que "permitem que as equipes modifiquem o comportamento do sistema sem alterar o código".
Portanto, historicamente pensamos neles como representados pelo pseudocódigo:
Essa é uma maneira totalmente precisa de pensar nisso, e Matt e Adil a expandem muito bem com uma variedade de casos de uso tático para o sinalizador de recurso.
Mas eu gostaria de oferecer uma definição revisada que reflete como a realidade evoluiu nos seis anos e mudou desde que o dotnetdev fez a pergunta original. Eu trabalho para Rollout.io , uma plataforma de bandeira de recursos, então eu tive um assento na primeira fila para esta evolução.
Simplificando, os sinalizadores de recursos não são mais apenas uma forma de ativar e desativar partes da funcionalidade em seu aplicativo. É como responder "o que é um item de linha de fatura" dizendo "é uma descrição e um valor monetário". É verdade, mas não leva ao ponto mais amplo da própria fatura.
Sinalizadores de recursos são as partes táticas de uma solução estratégica abrangente em software moderno. Eles são os meios pelos quais você adia a lógica de decisão importante em seu código até o tempo de execução, quando você tem mais informações. E, talvez o mais importante, eles não ocorrem mais isoladamente, com uma única verificação para ver se o número da versão é maior que 2.7 ou não; as organizações que os usam geralmente os incluem como parte de uma abordagem de produto abrangente e abrangente.
Como outros já mencionaram, o Facebook e o LinkedIn foram os pioneiros nisso, mas em 2018, muitas organizações estão fazendo isso. Eles estão adiando perguntas de lógica de decisão para o tempo de execução como parte da estratégia de desenvolvimento, estratégia de operações (ou estratégia DevOps, se você quiser) e estratégia de produto. Aqui estão alguns exemplos de tais questões.
Para ter um aplicativo que adia um número significativo de tais decisões até o tempo de execução, você não pode lançar sinalizadores de recursos em seu aplicativo de forma ad-hoc ou vai se enterrar em dívidas técnicas. Você precisa, atualmente, ter uma estratégia abrangente de gerenciamento de sinalizadores de recursos, que inclui alguns componentes diferentes.
Então, no final das contas, o que são sinalizadores de recursos?
Bem, eles são uma parte importante de uma estratégia mais ampla para ter um aplicativo que se adapta às necessidades técnicas e de mercado.
fonte
Um sinalizador de recurso (também conhecido como inversão de recurso ou alternância de recurso ) é uma chave para habilitar ou desabilitar um recurso potencialmente caro conforme necessário (como, digamos, quando um site está sendo atacado com tráfego inesperado). Isso vai lhe dar um pouco de tempo até aumentar a escala ou até que o pico de carga vá embora.
Aqui está um exemplo da documentação SWIG .
fonte
Na minha empresa tínhamos uma solução própria para isso. Criamos um serviço que fornece um
.json
arquivo config ( ) para download para todos os aplicativos. Nessa configuração, armazenamos os sinalizadores para os recursos. Com base nessa configuração, o aplicativo pode mostrar ou ocultar o recurso atual. (Por exemplo, mostrar ou ocultar um item de menu na barra lateral).Também criamos uma página de administração interna onde podemos configurar os sinalizadores de recurso. Funcionou muito bem por um tempo, mas depois disso gostaríamos de fazer a segmentação do usuário e os testes A / B. Para desenvolver por conta própria Parecia muito esforço, então escolhemos uma solução de terceiros. Como já mencionado aqui, existem muitas soluções para isso.
Escolhemos o ConfigCat porque ele oferece suporte a grupos-alvo personalizados e distribuição baseada em porcentagem de uma só vez. Você pode verificar os sdks de código aberto compatíveis no github .
fonte
Sinalizadores de recursos (ou alternadores de recursos) permitem que você habilite recursos remotamente em um aplicativo sem a necessidade de reconstruir / reimplantar o aplicativo. Isso permite que você implante o código para produção, mas não libere o recurso até que esteja pronto. Você é capaz de atingir usuários específicos, então você pode habilitar um novo recurso para seus usuários beta testarem.
Em nossa empresa, usamos anteriormente o LaunchDarkly e outras sugestões do FeatureFlags.io . Também tentamos usar a configuração remota do Firebase para tentar fazer isso funcionar, mas descobrimos que não era adequado para esse propósito.
Acabamos desenvolvendo nossa própria versão chamada Bullet Train , cujo código-fonte foi aberto. Ele combina sinalizadores / alternadores de recursos e configuração remota.
fonte
Sinalizadores de recurso são usados para diversos fins. A ideia geral é delegar o controle sobre qual usuário vê qual recurso para algum painel remoto ou back-office de algum tipo.
Depois que um recurso é sinalizado no código, você pode usar vários métodos para determinar qual usuário o vê em seu aplicativo: 1. Ativado / Desativado - mostra o recurso para todos ou nenhum dos seus usuários. 2. Liberação gradual - mostre o recurso apenas para uma porcentagem de seus usuários e, em seguida, mostre-o gradualmente para todos os usuários. 3. Direcionamento - mostra o recurso para usuários específicos com base nas propriedades ou características desse usuário.
As ferramentas que ajudam no controle de sinalizadores de recursos (booleanos) e configurações de recursos (strings, números, etc.) são geralmente chamadas de Plataformas de gerenciamento de recursos. Há um ótimo serviço para gerenciamento de recursos chamado Configz.io
fonte
Do ponto de vista da codificação, um sinalizador de recurso pode ser tão simples quanto uma
if
instrução que envolve um novo trecho de código que você está escrevendo. Quando aif
instrução for avaliada como verdadeira (o sinalizador de recurso está ativado), o novo código será executado.Em um exemplo real de entrega de software, a
if
declaração descrita acima seria avaliada de maneira diferente dependendo do ambiente em que o software está sendo executado. Por exemplo, se o aplicativo estiver sendo executado em seu servidor de QA, o sinalizador de recurso retornará verdadeiro e o novo recurso será visto. Se estiver sendo executado em seu servidor de produção, o sinalizador de recurso retornará falso e o recurso ficará oculto.De minha experiência pessoal durante minha carreira, usei sinalizadores de recursos das seguintes maneiras:
Desacoplamento das implantações de código da liberação de recursos para os clientes. Este foi meu primeiro uso inicial de sinalizadores de recursos em nosso processo de desenvolvimento. Nós o usamos para remover a dependência entre nossa equipe de marketing e produto e a equipe de engenharia que fazia o desenvolvimento e os lançamentos. Sinalizadores de recursos nos permitiram implantar nosso código semanas antes de um lançamento, ao passo que, anteriormente, estávamos implantando código na noite anterior ao lançamento!
Teste em produção. Antes de usarmos sinalizadores de recurso quando lançamos nosso código, era um evento tudo ou nada, ou todos os nossos clientes tinham o recurso ou nenhum deles. Usamos sinalizadores de recursos para nos permitir lançar um novo recurso para uma pequena porcentagem dos usuários de cada vez. Isso nos permitiu coletar feedback e dados valiosos sobre um novo recurso sem arriscar quaisquer problemas potenciais para toda a base de clientes.
Ativando / desativando um recurso por ambiente no ciclo de vida de desenvolvimento. Usamos isso extensivamente no desenvolvimento para permitir um processo de implantação muito mais suave - temos um pipeline de CI / CD no qual o uso de sinalizadores de recursos é vital.
Criando um interruptor kill. Encapsulamos certos recursos de nosso aplicativo com um sinalizador de recurso que nos permite 'eliminar' esse recurso no caso de qualquer problema que estivermos tendo com o aplicativo no momento. Por exemplo, se nos encontrarmos sob uma carga pesada, podemos desligar alguns recursos não essenciais do site para ajudar com o problema.
Você pode ler mais sobre sinalizadores de recursos aqui.
Você pode adicionar sinalizadores de recurso ao seu código de várias maneiras.
Escrever sua própria biblioteca pode parecer uma boa ideia no início e geralmente pode começar dessa forma. No entanto, você logo terá problemas quando quiser implementar os casos de uso mais avançados de sinalizadores de recursos, como a distribuição para uma porcentagem de usuários ou a segmentação de grupos de usuários específicos. Outro problema com a criação de sua própria implementação de sinalizador de recurso é se você estiver usando vários idiomas, precisará implementar seu código várias vezes.
A maneira melhor e mais fácil de usar sinalizadores de recurso é usar um serviço de gerenciamento de sinalizador de recurso online, como o Floodgate . Dessa forma, você pode alavancar na plataforma todo o trabalho pesado, o que permite que você se concentre na criação do recurso para sua aplicação.
Aqui está um exemplo de como adicionar um sinalizador de recurso do Floodgate a um aplicativo usando o .NET SDK.
Se você estiver trabalhando em uma equipe de desenvolvimento e não estiver usando sinalizadores de recursos e estiver tendo problemas em implantações e gerenciamento de código dentro da equipe. Usar sinalizadores de recursos pode ser uma ótima maneira de resolver esses problemas. Há também um bom efeito colateral de sinalizadores de recursos que aceleram a velocidade de desenvolvimento de suas equipes.
Martin Fowler fornece uma descrição detalhada dos sinalizadores de recursos aqui, que recomendo que você leia.
fonte
Meu entendimento é que os sinalizadores de recurso ajudam a bloquear a funcionalidade ao decidir quais usuários receberão determinados recursos.
Por exemplo, digamos que você só deseja que seus usuários beta vejam um novo recurso. Você "ativaria" esse recurso para usuários beta e o restante de seus usuários não o veria.
Estou testando os sinalizadores de recursos do LaunchDarkly para alguns testes JS A / B de front-end - parece estar funcionando bem. Você também pode verificar este site para alternar entre recursos e bibliotecas de sinalizadores de recursos .
fonte
Sinalizadores de recurso basicamente oferecem a capacidade de ativar e desativar um recurso sem fazer nenhuma alteração no código ou lançar uma nova versão. É uma solução importante especialmente para desenvolvedores de aplicativos móveis, uma vez que eles não têm controle sobre os usuários para atualizar seus aplicativos para uma nova versão.
Existem várias empresas que oferecem este serviço para desenvolvedores de aplicativos móveis.
fonte
Na minha empresa, usamos sinalizadores de recurso para cada novo recurso que apresentamos em nosso aplicativo SaaS. Além dos benefícios de desempenho, também nos permite lançar novos recursos gradualmente - introduzindo novos recursos para usuários avançados primeiro, obtendo feedback deles e improvisando antes que possamos distribuí-los para todos os usuários.
Também nos permite personalizar a oferta para usuários individuais - usuários avançados desejam todos os recursos; usuários simples podem querer apenas o material básico e podem ficar confusos com todos os recursos complexos e poderosos. Também permite que nossa equipe de vendas faça vendas adicionais.
E, claro, como outros apontaram, se descobrirmos que um recurso está causando uma degradação do desempenho, podemos simplesmente desligar esse recurso (para todos os clientes ou para o cliente que está causando o problema).
fonte