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