Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Izhevsk PHP Meetup #2. Fault Tolerance: дикобра...

Izhevsk PHP Meetup #2. Fault Tolerance: дикобраз на страже порядка

Дмитрий Кораблинов, ведущий разработчик, Kiwitaxi
Расскажу о Fault Tolerance - сохранении работоспособности системы при отказе её элементов. Я опишу общие принципы реализации такого подхода к разработке приложений. И обязательно закреплю теорию примерами решений на PHP.

Avatar for Izhevsk PHP Meetup

Izhevsk PHP Meetup

April 27, 2017
Tweet

More Decks by Izhevsk PHP Meetup

Other Decks in Technology

Transcript

  1. Fault Tolerance (Отказоустойчивость) 2 Свойство технической системы сохранять свою работоспособность

    после отказа одного или нескольких составных компонентов • Компонентная архитектура • Резервирование • Graceful degradation • Изоляция сбоя • etc
  2. Phystrix: команда class DetectRuleCommand extends AbstractCommand { private $url; public

    function __construct($url) { $this->url = $url; } protected function run() { $response = \Requests::get($this->url); $splittingRule = json_decode($response->body); return $splittingRule; } protected function getFallback() { return null; } protected function processExecutionEvent($eventName) { // Logging, notifications, etc. } } 8
  3. Phystrix: использование команды $config = new \Zend\Config\Config(...); // Load configuration

    $stateStorage = new ApcStateStorage(); $circuitBreakerFactory = new CircuitBreakerFactory($stateStorage); $commandMetricsFactory = new CommandMetricsFactory($stateStorage); $phystrixFactory = new CommandFactory( $config, new \Zend\Di\ServiceLocator(), $circuitBreakerFactory, $commandMetricsFactory, new RequestCache(), new RequestLog() ); $url = 'https://some-url'; $detectRuleCommand = $phystrixFactory->getCommand(DetectRuleCommand::class, $url); $rule = null; try { $rule = $detectRuleCommand->execute(); } catch (\Exception $ex) { // Log exception } 9
  4. Phystrix: конфигурация phystrix: settings: default: fallback: enabled: true circuitBreaker: enabled:

    true errorThresholdPercentage: 40 forceOpen: false forceClosed: false requestVolumeThreshold: 5 sleepWindowInMilliseconds: 60000 metrics: healthSnapshotIntervalInMilliseconds: 1000 rollingStatisticalWindowInMilliseconds: 2000 rollingStatisticalWindowBuckets: 10 requestCache: enabled: false requestLog: enabled: false 10