Pybreaker.

Implementação Python do padrão de disjuntor
Baixe Agora

Pybreaker. Classificação e resumo

Propaganda

  • Rating:
  • Licença:
  • BSD License
  • Nome do editor:
  • Daniel Fernandes Martins
  • Site do editor:

Pybreaker. Tag


Pybreaker. Descrição

Implementação do Python do padrão de disjuntor O Pybreaker é uma implementação do Python do padrão de disjuntor, descrito no livro de Michael T. Nygard, lançá-lo!. "Os disjuntores existem para permitir que um subsistema falhe sem destruir todo o sistema. Isso é feito através de operações perigosas ( Normalmente pontos de integração) com um componente que pode contornar as chamadas quando o sistema não é saudável ".installationrun A seguinte linha de comando para baixar a versão estável mais recente do Pybreaker de Pypi: Easy_Install -U Pybreakerif Você é um usuário git, você pode baixar A versão de desenvolvimento atual: git clone git: //github.com/danielfm/pybreaker.git cd pybreaker python setup.py teste python setup.py primeira etapa é criar uma instância de circuence para cada ponto de integração: Importar pybreakerdb_breaker = pybreaker .Circuitbreaker () Para permitir uma melhor personalização, mantendo o código auto-contido, é recomendável criar subclasses de circuito para cada tipo de integrati No ponto: Import PybreakerClass DBCIRCuitBreaker (pybreaker.circuitbreaker): Def On_State_change (auto, old_state, new_state): "Chamado quando o estado do disjuntor muda". PASS DEF On_Failure (Self, EXP): "Chamado quando uma função invocação gera um erro do sistema." Passe Def On_Success (auto): "Chamado quando uma invocação de função é bem-sucedida." PASSDB_Breaker = DBCIRCuitBreaker () Estes objetos devem viver globalmente dentro do escopo do aplicativo.Note: Pontos de integração para serviços externos (ou seja, bancos de dados, filas, etc) são mais propensos a falhar, portanto, certifique-se de usar os tempos limite ao acessar esses serviços, se houver suporte No nível da API. Diga que você quer usar um disjuntor em uma função que atualiza uma linha na tabela do banco de dados do cliente: @db_breakerdef update_customer (Cust): # fazer coisas aqui ... Pass # irá acionar o disposto no circuitoUpdated_customer = update_customer (my_customer) ou se você não quiser usar a sintaxe do decorador: def update_customer (cust): # fazer coisas aqui ... PASS # irá acionar o disjuberupdated_customer = db_breaker.call (update_customer, my_customer) O que faz um disjuntor Faça? De acordo com os parâmetros padrão, o disjuntor db_breaker automaticamente abrirá o circuito após 5 falhas consecutivas no update_customer.Quando o circuito é aberto, todas as chamadas para Atualizar_Customer falharão? diately (levantando o CIENTEbreakerError) sem qualquer tentativa de executar a operação real. Depois de 60 segundos, o disjuntor permitirá a próxima chamada para Atualizar_Customer passar. Se essa chamada for bem-sucedida, o circuito será fechado; Se falhar, no entanto, o circuito é aberto novamente até que outro timeout termine. Excluindo exceções de exceções, uma chamada com falha é qualquer chamada que gere uma exceção. No entanto, é comum levantar exceções para também indicar exceções de negócios, e essas exceções devem ser ignoradas pelo disjuntor como eles não indicam erros do sistema: # na criação timedb_breaker = dbcircuitbreaker (excluir = (customervalidationError,)) # em um timedb_breaker.Excluded_exceptions + = (customervalidationError,) neste caso, quando qualquer função protegida por esse disjuntor aumenta customervalidationError (ou qualquer exceção derivada de customervalidationError), essa chamada não será considerada uma falha do sistema. O objeto Cirevobreaker de Monitoring e ManagementA fornece propriedades Você pode usar para monitorar e alterar seu estado atual: # Obtenha o número atual de falhas consecutivasprint db_breaker.fail_counter # get / set o número máximo de falhas consecutivasprint db_breaker.fail_maxdb_breaker.fail_max = 10 # Obter / definir o período de tempo limite de redefinição atual (em segundos) Imprimir db_breaker.reset_timeoutdb_breaker.reset_timeout = 60 # Obter o estado atual, ou seja, 'aberto', 'meio aberto' 'FECHADO'Print db_breaker.current_state # fecha o circuitodb_breaker.close () # meio abre o circuitodb_breaker.half_open () # abre o circuitodb_breaker.open () Então, se você tiver um aplicativo da web usando disjuntores em torno de pontos de integração, você Pode facilmente escrever uma simples API repousante para expor essas funções à equipe de operações.


Pybreaker. Software Relacionado

lib mio.

Bibliotecas e ferramentas para entrada e saída de mídia de armazenamento ...

169

Download

tw2.devtools.

Web Widget Creation Toolkit baseado em Widgets de Turboogears - Ferramentas de desenvolvimento ...

128

Download