SlideShare ist ein Scribd-Unternehmen logo
1 von 71
Downloaden Sie, um offline zu lesen
Как мы отказались от
Skype и пришли к WebRTC
на Janus-Gateway
Сергей Сафонов

Skyeng
Как мы отказались от
Skype и пришли к WebRTC
на Janus-Gateway
Сергей Сафонов

Skyeng
Учим английскому
• Английский учить сложно
• Цель — помочь выучить
• 10000 учеников, 1000 учителей
• 2000 уроков каждый день
Своя платформа
• Интерактивные занятия с учителем
• Домашние задания
• Тесты
• Грамматика
Важно
• Контролировать процесс обучения
• Анализировать что происходило на уроке
• Удобство пользователя
• Аудио-видео связь
Важно для видеосвязи
• Качество
• Удобство
• Процент внедрения
• Записи
• Стоимость
Нам не подходит
• Skype — нет записей
• Hangouts — отдельная вкладка, нужен плагин
• Tokbox
• Всё просто и работает
• Дорого :( 113 руб за урок c записью аудио
2014 — первые попытки
2015 — “Компания X”
✅ Кто и сколько говорил
😒 Записи: только аудио
😒 Стоимость: 20 руб за
урок с записью аудио
❌ Процент внедрения: 40
❌ Долгая и сложная
интеграция
❌ Только через udp
2016 — клиент из Швеции
• Много учеников
2016 — клиент из Швеции
• Много учеников
2016 — клиент из Швеции
• Много учеников
• Связь только через браузер
2016 — клиент из Швеции
• Много учеников
• Связь только через браузер
• Открыты только http & https
• “Компания X” не согласна 

делать для нас tcp
Что же делать
Что же делать
• Срочно интегрируем Tokbox
Что же делать
• Срочно интегрируем Tokbox
• “Компания X” делает нам tcp
Мы пробовали
• 2012 — Skype
• 2014 — Tokbox
• 2015 — “Компания X”, временно включали Tokbox
2016 — Время поисков
• Open source?
• WebRTC?
• Kurento?
• Red5?
Что такое WebRTC?
• WebRTC = Web Real-Time Communication
• Коллекция протоколов передачи данных и апи
• Стандартизированы W3C & IETF
• Для видео-конференций, передачи данных, чатов,
шаринга экрана
• Развивают крупные компании: Google, Mozilla, Cisco
Только WebRTC достаточно
• Большинство наших пользователей на Chrome
• WebRTC быстро развивается
• Другие браузеры добавят поддержку
Только WebRTC достаточно
• Большинство наших пользователей на Chrome
• WebRTC быстро развивается
• Другие браузеры добавят поддержку, рано или
поздно
Как готовить WebRTC?
• Что-то готовое? SimpleWebRTC? EasyRTC?
• Писать поток прямо из браузера?
Janus WebRTC Gateway
Janus & WebRTC
Janus & WebRTC
Нужные нам функции
• Режим конференций (N участников)
• Записи по tcp & udp (но “сырые”, нужно обработать)
• Эхо-тест из коробки
• Легко горизонтально масштабируется
• Нет fallback до rtmp (flash)
Используется в slack
Берём!
Первая версия
Как мы себе это представляли?
Как мы себе это представляли?
• Тысячи уроков онлайн
Как мы себе это представляли?
• Тысячи уроков онлайн
• Десятки серверов
Как мы себе это представляли?
• Тысячи уроков онлайн
• Десятки серверов
• Автоматическое
масштабирование
Выделили MVP
Выделили MVP
• 100 уроков
Выделили MVP
• 100 уроков
• Один сервер
Архитектура!
Запустили
Проблемы
Спустя пару месяцев
Спустя год
• Школа выросла в 3 раза
• Через год вырастет ещё в 3 раза
• Нагрузка выросла пропорционально
• Сервер нагружен в пики почти на 100%
• Сложное вертикальное масштабирование
Делаем всё
правильно и красиво
Наша архитектура
Наша архитектура
В продакшене
• 2 сервера
• 8 core 3.4GHz, 32GB
• 16 core 2.4Ghz, 16GB
• ~ 300 уроков в пике(по 150 на сервер)
Incoming network traffic Outgoing network traffic
CPU idle time CPU user time CPU system time
CPU utilization
2015 — Janus
✅ Процент внедрения: 80
✅ Записи: аудио и видео
(даже через tcp!)
✅ Стоимость: 2 руб за
урок (было 113 и 20)
😒 Информация о том
кто и сколько говорил
❌ Нужно поддерживать
и понимать как работает
Наши планы
• Автоматическое масштабирование
• Видеозаписи
• Интерфейс с индикацией проблем
• Групповые звонки (3-4 участника)
• Снова внедрить callstats.io или аналог
Спасибо!
https://www.facebook.com/se.safonov
Подарок!
Промокод на +4 урока
при первой оплате:
RITFEST2017

Weitere ähnliche Inhalte

Was ist angesagt?

Как собирать gps треки раз в секунду, экономя траффик
Как собирать gps треки раз в секунду, экономя траффикКак собирать gps треки раз в секунду, экономя траффик
Как собирать gps треки раз в секунду, экономя траффик
Andrew Minkin
 
Высоконагруженная отправка push-уведомлений / Алексей Акулович
Высоконагруженная отправка push-уведомлений / Алексей АкуловичВысоконагруженная отправка push-уведомлений / Алексей Акулович
Высоконагруженная отправка push-уведомлений / Алексей Акулович
Ontico
 

Was ist angesagt? (9)

Как собирать gps треки раз в секунду, экономя траффик
Как собирать gps треки раз в секунду, экономя траффикКак собирать gps треки раз в секунду, экономя траффик
Как собирать gps треки раз в секунду, экономя траффик
 
Высоконагруженная отправка push-уведомлений / Алексей Акулович
Высоконагруженная отправка push-уведомлений / Алексей АкуловичВысоконагруженная отправка push-уведомлений / Алексей Акулович
Высоконагруженная отправка push-уведомлений / Алексей Акулович
 
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
 
WAMP как основа композитных SOA-приложений и его имплементация на Lua
WAMP как основа композитных SOA-приложений и его имплементация на LuaWAMP как основа композитных SOA-приложений и его имплементация на Lua
WAMP как основа композитных SOA-приложений и его имплементация на Lua
 
ОЛЕКСАНДР ХОТЕМСЬКИЙ «Антипаттерни та велосипеди в JavaScript автоматизації» ...
ОЛЕКСАНДР ХОТЕМСЬКИЙ «Антипаттерни та велосипеди в JavaScript автоматизації» ...ОЛЕКСАНДР ХОТЕМСЬКИЙ «Антипаттерни та велосипеди в JavaScript автоматизації» ...
ОЛЕКСАНДР ХОТЕМСЬКИЙ «Антипаттерни та велосипеди в JavaScript автоматизації» ...
 
Как масштабировать сложный Single Page Application / Алексей Катаев (Skyeng)
Как масштабировать сложный Single Page Application / Алексей Катаев (Skyeng)Как масштабировать сложный Single Page Application / Алексей Катаев (Skyeng)
Как масштабировать сложный Single Page Application / Алексей Катаев (Skyeng)
 
Рефакторинг монолита в микросервисы на Go / Refactoring of Monolithe to Micro...
Рефакторинг монолита в микросервисы на Go / Refactoring of Monolithe to Micro...Рефакторинг монолита в микросервисы на Go / Refactoring of Monolithe to Micro...
Рефакторинг монолита в микросервисы на Go / Refactoring of Monolithe to Micro...
 
Виктор Русакович - Выборы, выборы, все фреймворки… приторны
Виктор Русакович - Выборы, выборы, все фреймворки… приторныВиктор Русакович - Выборы, выборы, все фреймворки… приторны
Виктор Русакович - Выборы, выборы, все фреймворки… приторны
 
High load для начинающих
High load для начинающихHigh load для начинающих
High load для начинающих
 

Ähnlich wie Как мы отказались от Skype и внедрили WebRTC на основе janus-gateway / Сергей Сафонов (Skyeng)

Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
Ontico
 
JavaScript завтра / Сергей Рубанов (Exante Limited)
JavaScript завтра / Сергей Рубанов  (Exante Limited)JavaScript завтра / Сергей Рубанов  (Exante Limited)
JavaScript завтра / Сергей Рубанов (Exante Limited)
Ontico
 
Евгений Потапов, АйТиСумма
Евгений Потапов, АйТиСуммаЕвгений Потапов, АйТиСумма
Евгений Потапов, АйТиСумма
Ontico
 

Ähnlich wie Как мы отказались от Skype и внедрили WebRTC на основе janus-gateway / Сергей Сафонов (Skyeng) (20)

maps.sputnik.ru #highload2014
maps.sputnik.ru #highload2014maps.sputnik.ru #highload2014
maps.sputnik.ru #highload2014
 
Архитектура бэкенда карт Sputnik.ru, Максим Дементьев (Спутник)
Архитектура бэкенда карт Sputnik.ru, Максим Дементьев (Спутник)Архитектура бэкенда карт Sputnik.ru, Максим Дементьев (Спутник)
Архитектура бэкенда карт Sputnik.ru, Максим Дементьев (Спутник)
 
gRPC в продакшне для мобильных приложений
gRPC в продакшне для мобильных приложенийgRPC в продакшне для мобильных приложений
gRPC в продакшне для мобильных приложений
 
Путь к Go на конкретном примере
Путь к Go на конкретном примереПуть к Go на конкретном примере
Путь к Go на конкретном примере
 
Как строить архитектуру для отказоустойчивой службы такси / How to Build a ...
Как строить архитектуру для отказоустойчивой службы такси / How to Build a ...Как строить архитектуру для отказоустойчивой службы такси / How to Build a ...
Как строить архитектуру для отказоустойчивой службы такси / How to Build a ...
 
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
 
Как мы делаем Banki.ru
Как мы делаем Banki.ruКак мы делаем Banki.ru
Как мы делаем Banki.ru
 
Как строить архитектуру для отказоустойчивой службы такси / Минкин Андрей (Na...
Как строить архитектуру для отказоустойчивой службы такси / Минкин Андрей (Na...Как строить архитектуру для отказоустойчивой службы такси / Минкин Андрей (Na...
Как строить архитектуру для отказоустойчивой службы такси / Минкин Андрей (Na...
 
Фронтенд в Яндексе
Фронтенд в ЯндексеФронтенд в Яндексе
Фронтенд в Яндексе
 
Фронтенд в Яндексе
Фронтенд в ЯндексеФронтенд в Яндексе
Фронтенд в Яндексе
 
Фронтенд в Яндексе
Фронтенд в ЯндексеФронтенд в Яндексе
Фронтенд в Яндексе
 
Sivko
SivkoSivko
Sivko
 
JavaScript завтра
JavaScript завтраJavaScript завтра
JavaScript завтра
 
JavaScript завтра / Сергей Рубанов (Exante Limited)
JavaScript завтра / Сергей Рубанов  (Exante Limited)JavaScript завтра / Сергей Рубанов  (Exante Limited)
JavaScript завтра / Сергей Рубанов (Exante Limited)
 
WP как экспериментальная платформа
WP как экспериментальная платформаWP как экспериментальная платформа
WP как экспериментальная платформа
 
Евгений Потапов, АйТиСумма
Евгений Потапов, АйТиСуммаЕвгений Потапов, АйТиСумма
Евгений Потапов, АйТиСумма
 
Автоматическое тестирование Web api
Автоматическое тестирование Web apiАвтоматическое тестирование Web api
Автоматическое тестирование Web api
 
Ryazan
RyazanRyazan
Ryazan
 
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)
 
Тестирование в CCTV: частные случаи и глобальные проблемы
Тестирование в CCTV: частные случаи и глобальные проблемыТестирование в CCTV: частные случаи и глобальные проблемы
Тестирование в CCTV: частные случаи и глобальные проблемы
 

Mehr von Ontico

Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Ontico
 

Mehr von Ontico (20)

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
 

Как мы отказались от Skype и внедрили WebRTC на основе janus-gateway / Сергей Сафонов (Skyeng)