9. Long-polling
• Не требует немедленного ответа
• Совместим с keepalive
• Моментальное обновление
• Много одновременных подключений
• Требуется переподключение
10. • Постоянное соединение
• Намного быстрее, чем HTTP
• Не везде поддерживаются
• Еще не устоялись как стандарт
17. Хранение
внутреннего состояния
• MySQL — надежно и очень медленно
• Redis/memcached — ненадежно и медленно
• Внутри VM — быстро и опасно
• Репликация
24. Почему Erlang
• Феноменальная для веба производительность
• Феноменальная для веба многоядерность
• Распределенность из коробки
• Отказоустойчивость
• Изоляция данных
26. Основные проблемы
Разные профили нагрузки: есть большие
каналы и много маленьких.
Лаг между HTTP-ответом и коннектом к
комету: нужна история.
Нет времени на сохранение в SQL БД.
28. Первый рабочий pub/sub
• Распределенный
• Автоматический failover
• Написан за 2.5 часа
• Меньше 300 строк кода
• Один race condition
• Один баг-опечатка
30. Тесты
• Выявили race condition
• Очень помогли в дальнейшей разработке
• Отняли несколько часов
• Покрыли примерно 80% кода pub/sub-части
• По размеру сравнимы с кодом
56. Сервер написан
и протестирован
за несколько человеко-дней
57. Неплохая производительность:
WhatsApp - ~11500 rps
DPS - ~4000 rps
Функциональность и железо разные,
но порядок цифр похожий.
58. Важные моменты
• Не следует хранить всю историю в памяти
• Следите, какие процессы перегружаются
• Избегайте избыточных сообщений
• Не делайте запросы слишком часто
• Используйте пользовательские сессии
• Старайтесь не гонять лишние данные
59. Erlang - не серебряная пуля,
но позволяет фокусироваться
на более
высокоуровневых задачах