SlideShare a Scribd company logo
1 of 25
Download to read offline
1
Netty в веб-играх на раз, два,
ResourceLeak.
Андрей Мизуров
• Инженер в компании Playtika
• Участник и докладчик митапов DevOWL
• Контрибьютор проекта Netty
2
Обо мне
3
О чем доклад
• Разбор основных компонентов Netty
• Подходы и особенности при работе с Netty
• WebSocket основной транспорт для веб-игр
• Long-Polling как резервный транспорт для упрямых стариков
• Что такое “Selective Compression” и как она позволяет увеличить
пропускную способность
4
Чего не будет
5
Netty
https://netty.io/index.html
6
Netty – Components
https://netty.io/images/components.png
7
Netty – Channel
I/O абстракция над классом Socket и Channel в Java
• NIO – TCP, UDP, SCTP, UDT
• Epoll (Linux since 4.0.16) – TCP, UDP
• KQueue (MacOS/BSD since 4.1.11) – TCP, UDP
• Local – коммуникация внутри одной JVM
• Embeded – для тестирования
8
Netty – Channel
• Используем нативный epoll транспорт для Linux, 

если поддерживается Epoll.isAvailable()
• Конфигурируем транспорт ChannelConfig

CONNECT_TIMEOUT_MILLIS

TCP_NODELAY 

SO_BACKLOG 

…
http://www.stuartcheshire.org/papers/NagleDelayedAck/
9
Netty - EventLoop
10
Netty – EventLoop
• Никогда не блокируйте EventLoop !!!

Thread.sleep(), CountDownLatch.await() и другие блокирующие операции из
java.util.concurrent
• Используем отдельный EventLoop для обращения к внешним ресурсам
• Создаем метрики для мониторинга состояния EventLoop
11
Netty – ChannelPipeline и ChannelHandler
12
Netty – ChannelPipeline и ChannelHandler
• Удаляем неиспользуемые обработчики
• Выстраиваем пайплайн в логическом порядке
• Помечаем обработчики без состояния аннотацией @Shareble
• Используем ChannelHandlerContext для записи
• Добавляем в конец пайплайна обработчик ошибок
13
Netty – ByteBuf
Абстракция для работы с данными (byte[], ByteBuffer)
https://en.wikipedia.org/wiki/Zero-based_numbering
14
Netty – ByteBuf
• ByteBuf – это “reference-counted” объект, помним о release() и retain()
• Выставляем ResourceLeakDetector.Level в ADVANCED или PARANOID при
разработке и SIMPLE или DISABLED в продакшн
• Используем PooledByteBufAllocator по умолчанию
• Unpolled.wrappedBuffer() при работе с byte[]
15
Netty – подытожим
• Используйте правильный транспорт
• Не блокируй свой EventLoop
• Держи ChannelPipeline в чистоте
• ByteBuf - я тебя породил, я тебя и убью
16
Веб или браузерные игры
Игры, которые не требует установки и используют стандартные

технологии браузера или плагины.
17
HTTP
В 2019, ты серьезно ???
18
Обновляемся до WebSocket
• Full-Duplex коммуникация
• Одно соединение
• Легко определить разрыв соединения
• Поддерживает расширения (compression extension)
19
WebSocket – минусы
• Не все браузеры поддерживают протокол
• Не все прокси поддерживают
• Нет поддержки автоматического переподключения
• К сожалению в мире много упрямых стариков
20
Long-Polling - спасение для упрямых стариков
• Работает со всеми технологиях
• Поддерживается всеми балансировщиками и прокси
21
Long-Polling – минусы
• Избыточность передаваемых данных
• Имитация дуплексного соединения
• Больше открытых соединений
• Нет поддержки автоматического переподключения
22
Компрессия в действии
23
“Selectivity Compression”
• Сжимаем только необходимое
• Уменьшаем расход ресурсов
• Увеличиваем пропускную способность
• Доступна в Netty c 4.1.35.Final
24
Выводы
• Netty – быстро, асинхронно, производительно, но не просто
• WebSocket + “Selectivity Compression” – основной транспорт, только на
90%
• Long-Polling как резервный транспорт для оставшихся 10%
• Не бойтесь контрибьютить в open source проекты.
25
Вопросы ?

More Related Content

What's hot

Путь к Go на конкретном примере
Путь к Go на конкретном примереПуть к Go на конкретном примере
Путь к Go на конкретном примереSergey Xek
 
Sama5d3: how to run linux on it
Sama5d3: how to run linux on itSama5d3: how to run linux on it
Sama5d3: how to run linux on itPavel Kurochkin
 
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalrit-people
 
Windows DevOps with Ansible
Windows DevOps with AnsibleWindows DevOps with Ansible
Windows DevOps with AnsibleAlik Kurdyukov
 
Linux Terminal Server Project
 Linux Terminal Server Project Linux Terminal Server Project
Linux Terminal Server ProjectIlya Siganov
 
Непрерывная интеграция Python-проектов в Яндексе
Непрерывная интеграция Python-проектов в ЯндексеНепрерывная интеграция Python-проектов в Яндексе
Непрерывная интеграция Python-проектов в ЯндексеAndrey Kazarinov
 

What's hot (6)

Путь к Go на конкретном примере
Путь к Go на конкретном примереПуть к Go на конкретном примере
Путь к Go на конкретном примере
 
Sama5d3: how to run linux on it
Sama5d3: how to run linux on itSama5d3: how to run linux on it
Sama5d3: how to run linux on it
 
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
 
Windows DevOps with Ansible
Windows DevOps with AnsibleWindows DevOps with Ansible
Windows DevOps with Ansible
 
Linux Terminal Server Project
 Linux Terminal Server Project Linux Terminal Server Project
Linux Terminal Server Project
 
Непрерывная интеграция Python-проектов в Яндексе
Непрерывная интеграция Python-проектов в ЯндексеНепрерывная интеграция Python-проектов в Яндексе
Непрерывная интеграция Python-проектов в Яндексе
 

Similar to Netty jprof 2019_pdf

Net core and linux in production
Net core and linux in productionNet core and linux in production
Net core and linux in productionAnatoly Popov
 
Unity: WebGL и IL2CPP — будущее скриптинга в Unity»
Unity: WebGL и IL2CPP — будущее скриптинга в Unity»Unity: WebGL и IL2CPP — будущее скриптинга в Unity»
Unity: WebGL и IL2CPP — будущее скриптинга в Unity»DevGAMM Conference
 
How to cook a blockchain and not get burned
How to cook a blockchain and not get burned How to cook a blockchain and not get burned
How to cook a blockchain and not get burned Alexander Syrotenko
 
TMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: GenodeTMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: GenodeIosif Itkin
 
Развитие технологий построения распределенных ЦОД
Развитие технологий построения распределенных ЦОДРазвитие технологий построения распределенных ЦОД
Развитие технологий построения распределенных ЦОДCisco Russia
 
Архитектура и особенности Cisco Nexus 5000, Fabric Extender (FEX), Virtual Po...
Архитектура и особенности Cisco Nexus 5000, Fabric Extender (FEX), Virtual Po...Архитектура и особенности Cisco Nexus 5000, Fabric Extender (FEX), Virtual Po...
Архитектура и особенности Cisco Nexus 5000, Fabric Extender (FEX), Virtual Po...Cisco Russia
 
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs..."How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...Provectus
 
Docker в Badoo: ПМЖ или временная регистрация
Docker в Badoo: ПМЖ или временная регистрацияDocker в Badoo: ПМЖ или временная регистрация
Docker в Badoo: ПМЖ или временная регистрацияBadoo Development
 
Docker integration into Badoo
Docker integration into BadooDocker integration into Badoo
Docker integration into BadooAnton Turetsky
 
"Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно..."Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно...it-people
 
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Yandex
 
Tarantool, .net, newsql
Tarantool, .net, newsqlTarantool, .net, newsql
Tarantool, .net, newsqlAnatoly Popov
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrusAlex Chistyakov
 
Другая виртуализация
Другая виртуализацияДругая виртуализация
Другая виртуализацияYandex
 
Разработка декстопных приложений для linux (Владимир Яковлев)
Разработка декстопных приложений для linux (Владимир Яковлев)Разработка декстопных приложений для linux (Владимир Яковлев)
Разработка декстопных приложений для linux (Владимир Яковлев)IT-Доминанта
 
Масштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаМасштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаRoman Dvornov
 
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)Zabbix
 
Puppet development kit and best practices
Puppet development kit and best practicesPuppet development kit and best practices
Puppet development kit and best practicesIgor Kurochkin
 
Cеминар в Виннице (22.03.2014)
Cеминар в Виннице (22.03.2014)Cеминар в Виннице (22.03.2014)
Cеминар в Виннице (22.03.2014)Alexander Babich
 
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...SECON
 

Similar to Netty jprof 2019_pdf (20)

Net core and linux in production
Net core and linux in productionNet core and linux in production
Net core and linux in production
 
Unity: WebGL и IL2CPP — будущее скриптинга в Unity»
Unity: WebGL и IL2CPP — будущее скриптинга в Unity»Unity: WebGL и IL2CPP — будущее скриптинга в Unity»
Unity: WebGL и IL2CPP — будущее скриптинга в Unity»
 
How to cook a blockchain and not get burned
How to cook a blockchain and not get burned How to cook a blockchain and not get burned
How to cook a blockchain and not get burned
 
TMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: GenodeTMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: Genode
 
Развитие технологий построения распределенных ЦОД
Развитие технологий построения распределенных ЦОДРазвитие технологий построения распределенных ЦОД
Развитие технологий построения распределенных ЦОД
 
Архитектура и особенности Cisco Nexus 5000, Fabric Extender (FEX), Virtual Po...
Архитектура и особенности Cisco Nexus 5000, Fabric Extender (FEX), Virtual Po...Архитектура и особенности Cisco Nexus 5000, Fabric Extender (FEX), Virtual Po...
Архитектура и особенности Cisco Nexus 5000, Fabric Extender (FEX), Virtual Po...
 
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs..."How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
 
Docker в Badoo: ПМЖ или временная регистрация
Docker в Badoo: ПМЖ или временная регистрацияDocker в Badoo: ПМЖ или временная регистрация
Docker в Badoo: ПМЖ или временная регистрация
 
Docker integration into Badoo
Docker integration into BadooDocker integration into Badoo
Docker integration into Badoo
 
"Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно..."Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно...
 
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
 
Tarantool, .net, newsql
Tarantool, .net, newsqlTarantool, .net, newsql
Tarantool, .net, newsql
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrus
 
Другая виртуализация
Другая виртуализацияДругая виртуализация
Другая виртуализация
 
Разработка декстопных приложений для linux (Владимир Яковлев)
Разработка декстопных приложений для linux (Владимир Яковлев)Разработка декстопных приложений для linux (Владимир Яковлев)
Разработка декстопных приложений для linux (Владимир Яковлев)
 
Масштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаМасштабируемая архитектура фронтенда
Масштабируемая архитектура фронтенда
 
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)
 
Puppet development kit and best practices
Puppet development kit and best practicesPuppet development kit and best practices
Puppet development kit and best practices
 
Cеминар в Виннице (22.03.2014)
Cеминар в Виннице (22.03.2014)Cеминар в Виннице (22.03.2014)
Cеминар в Виннице (22.03.2014)
 
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
 

Netty jprof 2019_pdf

  • 1. 1 Netty в веб-играх на раз, два, ResourceLeak. Андрей Мизуров
  • 2. • Инженер в компании Playtika • Участник и докладчик митапов DevOWL • Контрибьютор проекта Netty 2 Обо мне
  • 3. 3 О чем доклад • Разбор основных компонентов Netty • Подходы и особенности при работе с Netty • WebSocket основной транспорт для веб-игр • Long-Polling как резервный транспорт для упрямых стариков • Что такое “Selective Compression” и как она позволяет увеличить пропускную способность
  • 7. 7 Netty – Channel I/O абстракция над классом Socket и Channel в Java • NIO – TCP, UDP, SCTP, UDT • Epoll (Linux since 4.0.16) – TCP, UDP • KQueue (MacOS/BSD since 4.1.11) – TCP, UDP • Local – коммуникация внутри одной JVM • Embeded – для тестирования
  • 8. 8 Netty – Channel • Используем нативный epoll транспорт для Linux, 
 если поддерживается Epoll.isAvailable() • Конфигурируем транспорт ChannelConfig
 CONNECT_TIMEOUT_MILLIS
 TCP_NODELAY 
 SO_BACKLOG 
 … http://www.stuartcheshire.org/papers/NagleDelayedAck/
  • 10. 10 Netty – EventLoop • Никогда не блокируйте EventLoop !!!
 Thread.sleep(), CountDownLatch.await() и другие блокирующие операции из java.util.concurrent • Используем отдельный EventLoop для обращения к внешним ресурсам • Создаем метрики для мониторинга состояния EventLoop
  • 11. 11 Netty – ChannelPipeline и ChannelHandler
  • 12. 12 Netty – ChannelPipeline и ChannelHandler • Удаляем неиспользуемые обработчики • Выстраиваем пайплайн в логическом порядке • Помечаем обработчики без состояния аннотацией @Shareble • Используем ChannelHandlerContext для записи • Добавляем в конец пайплайна обработчик ошибок
  • 13. 13 Netty – ByteBuf Абстракция для работы с данными (byte[], ByteBuffer) https://en.wikipedia.org/wiki/Zero-based_numbering
  • 14. 14 Netty – ByteBuf • ByteBuf – это “reference-counted” объект, помним о release() и retain() • Выставляем ResourceLeakDetector.Level в ADVANCED или PARANOID при разработке и SIMPLE или DISABLED в продакшн • Используем PooledByteBufAllocator по умолчанию • Unpolled.wrappedBuffer() при работе с byte[]
  • 15. 15 Netty – подытожим • Используйте правильный транспорт • Не блокируй свой EventLoop • Держи ChannelPipeline в чистоте • ByteBuf - я тебя породил, я тебя и убью
  • 16. 16 Веб или браузерные игры Игры, которые не требует установки и используют стандартные
 технологии браузера или плагины.
  • 17. 17 HTTP В 2019, ты серьезно ???
  • 18. 18 Обновляемся до WebSocket • Full-Duplex коммуникация • Одно соединение • Легко определить разрыв соединения • Поддерживает расширения (compression extension)
  • 19. 19 WebSocket – минусы • Не все браузеры поддерживают протокол • Не все прокси поддерживают • Нет поддержки автоматического переподключения • К сожалению в мире много упрямых стариков
  • 20. 20 Long-Polling - спасение для упрямых стариков • Работает со всеми технологиях • Поддерживается всеми балансировщиками и прокси
  • 21. 21 Long-Polling – минусы • Избыточность передаваемых данных • Имитация дуплексного соединения • Больше открытых соединений • Нет поддержки автоматического переподключения
  • 23. 23 “Selectivity Compression” • Сжимаем только необходимое • Уменьшаем расход ресурсов • Увеличиваем пропускную способность • Доступна в Netty c 4.1.35.Final
  • 24. 24 Выводы • Netty – быстро, асинхронно, производительно, но не просто • WebSocket + “Selectivity Compression” – основной транспорт, только на 90% • Long-Polling как резервный транспорт для оставшихся 10% • Не бойтесь контрибьютить в open source проекты.