$30 off During Our Annual Pro Sale. View Details »

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
    Дикобраз на страже порядка
    Дмитрий Кораблинов
    ведущий разработчик, Kiwitaxi

    View Slide

  2. Fault Tolerance (Отказоустойчивость)
    2
    Свойство технической системы сохранять свою
    работоспособность после отказа одного или нескольких
    составных компонентов
    ● Компонентная архитектура
    ● Резервирование
    ● Graceful degradation
    ● Изоляция сбоя
    ● etc

    View Slide

  3. Graceful degradation
    3
    Application
    Comp1
    Comp2
    Comp3

    View Slide

  4. “Не изящная” деградация времени отклика
    4
    Application
    Comp1
    Comp2
    Comp3

    View Slide

  5. Изоляция сбоя: Circuit Breaker
    5
    Application
    Comp1
    Comp2
    Comp3
    X

    View Slide

  6. Паттерн Circuit Breaker
    6
    https://martinfowler.com/bliki/CircuitBreaker.html

    View Slide

  7. Реализация
    7
    Hystrix
    https://github.com/Netflix/Hystrix
    Phystrix
    https://github.com/upwork/phystrix

    View Slide

  8. 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

    View Slide

  9. 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

    View Slide

  10. 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

    View Slide

  11. Hystrix Dashboard
    11

    View Slide

  12. Спасибо! Ваши вопросы?
    12
    Дмитрий Кораблинов
    ведущий разработчик, Kiwitaxi
    Email: [email protected]
    Skype: dmitriy_korablinov

    View Slide