Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
!sync: асинхронное 
взаимодействие 
Вячеслав Турчанинов
Бессознательное 
• Все знакомы с асинхронным взаимодействием; 
• Планировщик задач ОС — большой асинхронный обработчик; 
•...
Сознательное 
Синхронное Асинхронное
Приёмы / Callback 
• Необходимо явно передать контекст вызова; 
• При падении callback-функции практически невозможно собр...
Приёмы / Coroutine 
• Захватывает контекст выполнения; 
• Передача управления; 
• Линейный код; 
• Контекст ошибки локализ...
Архитектура 
• Микросервисная архитектура; 
• Доля сетевого взаимодействия велика; 
• Task Queue — единая шина взаимодейст...
Возможные ошибки 
• Использование библиотек с блокирующим вызовом; 
• Большое количество задач; 
• Одно соединение — одна ...
Upcoming SlideShare
Loading in …5
×

!sync - асинхронное взаимодействие, Вячеслав Турчанинов (Ratengoods.com)

970 views

Published on

Доклад Вячеслава Турчанинова на HighLoad++ 2014.

Published in: Internet
  • Be the first to comment

  • Be the first to like this

!sync - асинхронное взаимодействие, Вячеслав Турчанинов (Ratengoods.com)

  1. 1. !sync: асинхронное взаимодействие Вячеслав Турчанинов
  2. 2. Бессознательное • Все знакомы с асинхронным взаимодействием; • Планировщик задач ОС — большой асинхронный обработчик; • Системный вызов — передача управления; • Цикл без системных вызовов - «не отпускает».
  3. 3. Сознательное Синхронное Асинхронное
  4. 4. Приёмы / Callback • Необходимо явно передать контекст вызова; • При падении callback-функции практически невозможно собрать «хвосты»; • Каждый асинхронный вызов может как минимум упасть или выполнится (регистрация 2-х callback-функций); • Код запутанный и «размазанный».
  5. 5. Приёмы / Coroutine • Захватывает контекст выполнения; • Передача управления; • Линейный код; • Контекст ошибки локализован.
  6. 6. Архитектура • Микросервисная архитектура; • Доля сетевого взаимодействия велика; • Task Queue — единая шина взаимодействия; • Известный формат сообщений; • Логирование сообщений; • Возможность проиграть сообщения; • Возможность вынести блокирующий код в отдельный сервис; • Генерация событий.
  7. 7. Возможные ошибки • Использование библиотек с блокирующим вызовом; • Большое количество задач; • Одно соединение — одна сессия взаимодействия; • Каждое сообщение должно иметь фиксированную шапку с указание длины payload; • Читать ровно столько, сколько определено протокол; • Все instance'ы одного сервиса должны быть взаимозаменимы и равнозначны; • Клиентский код должен использовать параллельные запросы.

×