Piarrea

Implementación de Python del patrón de disyuntor
Descargar ahora

Piarrea Clasificación y resumen

Anuncio publicitario

  • Rating:
  • Licencia:
  • BSD License
  • Nombre del editor:
  • Daniel Fernandes Martins
  • Sitio web del editor:

Piarrea Etiquetas


Piarrea Descripción

Implementación de Python del patrón de disyuntor. PITABEBERS es una implementación de Python del patrón de interruptor de circuito, descrito en el libro de Michael T. Nygard ¡Libere la liberación! En palabras de Nygard, "existen los interruptores de circuito para permitir que un subsistema falle sin destruir todo el sistema. Esto se hace envolviendo operaciones peligrosas ( Típicamente puntos de integración) con un componente que puede evitar las llamadas cuando el sistema no está sano ".instalationRun la siguiente línea de comando para descargar la última versión estable de Pybreabreamer desde PyPI: Easy_Install -u Pybreakerif, usted es un usuario de Git, es posible que desee descargar La versión de desarrollo actual: git clone git: //github.com/danielfm/pybreaker.git cd pybreaker python setup.py test python setup.py installusagethe el primer paso es crear una instancia de motocicletas para cada punto de integración: import pybreakerdb_breaker = pybreaker .Circuitotebreaker () Para permitir una mejor personalización mientras mantiene el código independiente, se recomienda crear subclases de motocicletas para cada tipo de integración En Punto: Importar Pybreakersclass Dbcircubrebreaker (Pybreaker.circuitebreaker): def On_State_Change (Self, Old_State, New_State): "Llamado cuando el estado del interruptor de circuito cambia". Pase DEF ON_FAILURE (Self, Exc): "Llamado cuando una invocación de función plantea un error del sistema". Pase Def On_Success (yo): "Llamado cuando una invocación de función tiene éxito". passdb_breaker = dbcircubrebreaker () Estos objetos deben vivir a nivel mundial dentro del ámbito de la aplicación. Nota: los puntos de integración a los servicios externos (es decir, las bases de datos, las colas, etc.) son más propensas a fallar, así que asegúrese de usar siempre los tiempos de espera al acceder a dichos servicios si hay soporte En el nivel de API. Digüe que desea usar un interruptor de circuito en una función que actualiza una fila en la tabla de la base de datos de clientes: @db_breakerdef update_customer (CUST): # HAY CLASE AQUÍ ... PASS # activará el circuito BreakerUpdated_Customer = Update_Customer_Customer = Update_Customer (My_Customer) o si no desea usar la sintaxis de Decorator: def DEF Update_Customer (CUST): # hacer cosas aquí ... PASS # activará el circuito BreakerUpdated_Customer = db_breaker.call (Update_Customer, My_Customer) ¿Qué hace un disyuntor? ¿De acuerdo con los parámetros predeterminados, el interruptor DB_Breaker abrirá automáticamente el circuito después de 5 fallas consecutivas en Update_Customer.cuando el circuito está abierto, todas las llamadas a Update_Customer fallarán Immé Diately (recaudación de circuitos) sin ningún intento de ejecutar la operación real. Después de 60 segundos, el interruptor del circuito permitirá que la próxima llamada se actualice. Si esa llamada tiene éxito, el circuito está cerrado; Sin embargo, si falla, el circuito se abre nuevamente hasta que ocurra otro tiempo de espera. Exclusión de excepcionalmente por defecto, una llamada fallida es cualquier llamada que aumente una excepción. Sin embargo, es común aumentar las excepciones para indicar también las excepciones comerciales, y las excepciones deben ser ignoradas por el interruptor de circuito, ya que no indican errores del sistema: # en la creación timedb_breaker = dbcircuitbreaker (excluir = (personalibilidationerror,)) # en un momento posterior timedb_breaker.excluuded_exceptions + = (personalervalidationerror,) En este caso, cuando cualquier función protegida por ese interruptor de circuito aumenta personalervidationerror (o cualquier excepción derivada de personalervidationerror), esa llamada no se considerará un error de error. Puede usar para monitorear y cambiar su estado actual: # Obtenga el número actual de fallas consecutivasPrint db_breaker.fail_counter # Obten / configure / establece el número máximo de fallas consecutivas de db_breaker.fail_maxdb_breaker.fail_max = 10 # Obtener / configurar el período de tiempo de espera de reinicio actual (en segundos) Imprima db_breaker.reset_timeutdb_breaker.reset_timeut = 60 # Obtenga el estado actual, es decir, 'Abierto', 'medio abierto' , 'cerrado'print db_breaker.current_state # cierra el circuitodb_breaker.close () # medio abre el circuitodb_breaker.half_open () # Abre el circuitoDB_Breaker.Open () Por lo tanto, si tiene una aplicación web utilizando interruptores de circuitos alrededor de los puntos de integración, Puede escribir fácilmente una simple API de descanso para exponer estas funciones al personal de operaciones.


Piarrea Software relacionado

tw2.devtools

Kit de herramientas de creación de widgets web basado en widgets TurboGEARS - Herramientas de desarrollo ...

128

Descargar