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.

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