Alexandr Serbul "The Rust language for a high-load network service - a quick ...Fwdays
In this talk, we will talk about the evolution of the development of a high-load network cluster for sending push notifications using technologies from Unix / bash and PHP to asynchronous non-blocking multithreaded connections based on Rust / Tokio. Let's talk about the intricacies of Rust development, language features, pitfalls, and ways to quickly learn and use it for web developers with LAMP skills. Let's also talk about Go, Java, and the reasons for our technological decisions.
The talk will be useful for developers wishing to master the latest and popular Rust programming language, functional programming, Haskell ideas with PHP / Python / JavaScript web development experience.
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...Stas Vyschepan
Вы разрабатываете веб-приложения и используете хранимые процедуры? Вы пишите SELECT … WITH(NOLOCK)? Вы считаете, что ORMы снижают быстродействие приложений? Тогда этот доклад для вас!
В докладе будут развенчаны популярные мифы о применении библиотек Object-Relational Mapping (ORM) в ASP.NET при работе с Microsoft SQL Server. Также будут рассмотрены конкретные методики увеличения быстродействия работы с данными в веб-приложениях.
Alexandr Serbul "The Rust language for a high-load network service - a quick ...Fwdays
In this talk, we will talk about the evolution of the development of a high-load network cluster for sending push notifications using technologies from Unix / bash and PHP to asynchronous non-blocking multithreaded connections based on Rust / Tokio. Let's talk about the intricacies of Rust development, language features, pitfalls, and ways to quickly learn and use it for web developers with LAMP skills. Let's also talk about Go, Java, and the reasons for our technological decisions.
The talk will be useful for developers wishing to master the latest and popular Rust programming language, functional programming, Haskell ideas with PHP / Python / JavaScript web development experience.
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...Stas Vyschepan
Вы разрабатываете веб-приложения и используете хранимые процедуры? Вы пишите SELECT … WITH(NOLOCK)? Вы считаете, что ORMы снижают быстродействие приложений? Тогда этот доклад для вас!
В докладе будут развенчаны популярные мифы о применении библиотек Object-Relational Mapping (ORM) в ASP.NET при работе с Microsoft SQL Server. Также будут рассмотрены конкретные методики увеличения быстродействия работы с данными в веб-приложениях.
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)Ontico
В докладе рассмотрим нашу старую архитектуру пайплайна машинного обучения, обратим внимание на ее недостатки как с точки зрения инфраструктуры и автоматизации, так и с точки зрения настройки моделей машинного обучения и проведения экспериментов. Разберемся с архитектурой Apache Spark, и почему мы решили его использовать. Подробно ознакомимся с новой архитектурой нашего пайплайна и тем, как она позволила оптимизировать обнаружение и устранение проблем, ускорила и упростила работу data scientist'ов по проведению экспериментов и доведения их до продакшена. Также затронем вопросы написания тестов и процесса разработки ПО на больших данных.
Эффективная отладка репликации MySQL / Света Смирнова (Percona)Ontico
Репликация - одна из ключевых возможностей MySQL. Лёгкая в установке, позволяющая производить изменения и на мастере, и на слейве, что в свою очередь позволяет создавать сколь угодно сложные развёртывания. Репликация в MySQL асимметричная, допускающая некоторый уровень синхронизации при помощи semi-sync replication plugin. Начиная с версии 5.7 поддерживает одновременную репликацию с нескольких мастеров на один слейв.
Простота использования имеет свою обратную сторону: при проектировании репликации достаточно легко выбрать неправильное решение и познакомиться со всеми его подводными камнями.
В рамках этого доклада я расскажу об особенностях репликации MySQL, типичных ошибках и способах борьбы с ними. Мы затронем как проблемы, приводящие к появлению неожиданных данных и десинхронизации, так и производительность.
Рельсы прекрасный инструмент, но в некоторых ситуациях они не справляются.
В этом докладе рассказывается о таких ситуациях и одном из вариантов решения
C++ CoreHard Autumn 2018. Ускорение сборки C++ проектов, способы и последстви...corehard_by
В докладе обсуждаются способы улучшения времени сборки C++ проектов, опыт полученный в ходе ускорения сборки клиента и тулов World Of Tanks. Также описывается эффект, который они оказывают на организацию кодобазы (как позитивный, так и негативный) и затраты, которые необходимы для поддержки этих решений, т.к. не все они бесплатны. Методики, описываемые в докладе: ускорение линковки (Incremental Linking, Fastlink), ускорение компиляции(Include what you use, использование precompiled headers).
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)Ontico
JavaScript, который мы пишем, не всегда исполняется, как мы думаем. Виртуальные машины, исполняющие его, делают многое, чтобы он работал быстрее. Но они не всесильны, и чтобы сделать код действительно быстрым, нужно знать их особенности и как все работает под капотом.
Поговорим об этих особенностях, что может служить причиной потери производительности, как это диагностировать и как делать код действительно быстрым. Доклад базируется на опыте, полученном в ходе работы над такими проектами как basis.js (весьма быстрый фреймворк для SPA), CSSO (минификатор CSS, который из медленного стал один из самых быстрых), CSSTree (самый быстрый детальный CSS парсер) и других.
TFF2015, Gila Gfader, Booking.com, "Die Reise beginnt in Netz"TourismFastForward
Gila Gfader ist Area Manager bei Booking.com, die erfolgsreichste Buchungsplattform der Welt. Neben dem Onlinevertrieb von Behebungsbetrieben zählen Marktanalysen sowie Strategieentwicklungen zu ihren Kernkompetenzen. Auch das Buchungsportal Booking.com muss auf Veränderungen im Digitalen Bereich reagieren. Wie das funktioniert, verrät sie in ihrem Vortrag.
Hoe kan je data gebruiken om beter te beslissen? Booking.com werkt samen met Netwerven en vertelt hoe je met data je beslissingsproces kan verbeteren.Think big, act small.
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)Ontico
В докладе рассмотрим нашу старую архитектуру пайплайна машинного обучения, обратим внимание на ее недостатки как с точки зрения инфраструктуры и автоматизации, так и с точки зрения настройки моделей машинного обучения и проведения экспериментов. Разберемся с архитектурой Apache Spark, и почему мы решили его использовать. Подробно ознакомимся с новой архитектурой нашего пайплайна и тем, как она позволила оптимизировать обнаружение и устранение проблем, ускорила и упростила работу data scientist'ов по проведению экспериментов и доведения их до продакшена. Также затронем вопросы написания тестов и процесса разработки ПО на больших данных.
Эффективная отладка репликации MySQL / Света Смирнова (Percona)Ontico
Репликация - одна из ключевых возможностей MySQL. Лёгкая в установке, позволяющая производить изменения и на мастере, и на слейве, что в свою очередь позволяет создавать сколь угодно сложные развёртывания. Репликация в MySQL асимметричная, допускающая некоторый уровень синхронизации при помощи semi-sync replication plugin. Начиная с версии 5.7 поддерживает одновременную репликацию с нескольких мастеров на один слейв.
Простота использования имеет свою обратную сторону: при проектировании репликации достаточно легко выбрать неправильное решение и познакомиться со всеми его подводными камнями.
В рамках этого доклада я расскажу об особенностях репликации MySQL, типичных ошибках и способах борьбы с ними. Мы затронем как проблемы, приводящие к появлению неожиданных данных и десинхронизации, так и производительность.
Рельсы прекрасный инструмент, но в некоторых ситуациях они не справляются.
В этом докладе рассказывается о таких ситуациях и одном из вариантов решения
C++ CoreHard Autumn 2018. Ускорение сборки C++ проектов, способы и последстви...corehard_by
В докладе обсуждаются способы улучшения времени сборки C++ проектов, опыт полученный в ходе ускорения сборки клиента и тулов World Of Tanks. Также описывается эффект, который они оказывают на организацию кодобазы (как позитивный, так и негативный) и затраты, которые необходимы для поддержки этих решений, т.к. не все они бесплатны. Методики, описываемые в докладе: ускорение линковки (Incremental Linking, Fastlink), ускорение компиляции(Include what you use, использование precompiled headers).
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)Ontico
JavaScript, который мы пишем, не всегда исполняется, как мы думаем. Виртуальные машины, исполняющие его, делают многое, чтобы он работал быстрее. Но они не всесильны, и чтобы сделать код действительно быстрым, нужно знать их особенности и как все работает под капотом.
Поговорим об этих особенностях, что может служить причиной потери производительности, как это диагностировать и как делать код действительно быстрым. Доклад базируется на опыте, полученном в ходе работы над такими проектами как basis.js (весьма быстрый фреймворк для SPA), CSSO (минификатор CSS, который из медленного стал один из самых быстрых), CSSTree (самый быстрый детальный CSS парсер) и других.
TFF2015, Gila Gfader, Booking.com, "Die Reise beginnt in Netz"TourismFastForward
Gila Gfader ist Area Manager bei Booking.com, die erfolgsreichste Buchungsplattform der Welt. Neben dem Onlinevertrieb von Behebungsbetrieben zählen Marktanalysen sowie Strategieentwicklungen zu ihren Kernkompetenzen. Auch das Buchungsportal Booking.com muss auf Veränderungen im Digitalen Bereich reagieren. Wie das funktioniert, verrät sie in ihrem Vortrag.
Hoe kan je data gebruiken om beter te beslissen? Booking.com werkt samen met Netwerven en vertelt hoe je met data je beslissingsproces kan verbeteren.Think big, act small.
As a product goes global, multiple languages and currencies becomes a major requirement. Sounds straightforward, but is simply displaying localized content enough? Will a design choice work for both Japan and US markets? Will that 200px wide column fit long greek words? Will your layout still work on a right-to-left language? In this talk, we'll see the challenges of implementing a front-end that works for 42 languages and 54 currencies.
“In God we trust, all others must bring data”. Intuition, experience and well known patterns may give us good indications of successful ideas and features, but nothing gets closer to the truth than data analysis and A/B testing. In this workshop, we’ll show how we do experimentation at Booking: what we test, how to get data through templates and JavaScript, and how we analyse the resulting metrics. We’ll live-code examples, see all potential caveats of dealing with the user tracking on the client-side, and show existent tools you can use to test your own ideas.
What are the challenges we face while developing the front-end for the largest accommodations reservations website in the world?
Working on an e-commerce interface is already a complex task itself; how do we make it work in 224 countries, for customers all around the world? In this presentation, we'll see how our architecture, performance and UI decisions impact the experience of millions of partners and users who book a room with us.
Tag-it 2016 slides: UX + A/B Testing at Booking.com: Design focused on conver...Maria Lígia Klokner
We talk a lot about User Experience Design nowadays, but how do you know that what you designed really works? To have a testing mindset is to know whether or not you are designing for the user and not yourself. Understand how Booking.com works with A/B testing when validating ideas, and what are the biggest challenges to be a designer in that environment. In this presentation we’ll see the advantages of obtaining quick feedback with data, so that we can learn from it, iterate and try again!
Разработка API для большого, нагруженного сервисаendeveit
Рассказ о том, что творилось с проектами kolesa.kz и krisha.kz в 2011-2012 годах и что происходит сейчас, как мы создавали с нуля API и впоследствии переезжали на него, как на лету меняли хранилища данных, как боролись с нагрузками и воевали за надежность, расскажу о граблях на которые наступили и как их можно было бы избежать.
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)Ontico
Исторически сложилось так, что одни люди разрабатывают приложения (Dev), а другие эксплуатируют их в продакшне (Ops). И у последних есть немало проблем с тем, что невозможно понять, что происходит.
Причем это касается как собственных разработок, так и популярных open source решений.
Я расскажу, как устроена диагностика у некоторых популярных софтин:
- nginx
- postgresql
- mongodb
Мы попробуем разобраться, что там сделано хорошо, и чего не хватает для полного счастья.
Во второй части доклада мы поговорим про то, как нужно инструментировать собственное приложение для прозрачной работы в продакшне:
- что считать и зачем: ошибки, тайминги, разные состояния приложения,
- инструментарий: your_lang-metrics, your_lang-statsd-client, логи,
- как не перемудрить и не убить прод диагностикой.
Может показаться, что этот доклад про DevOps, но нет - про docker не будет ни слова :)
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...Provectus
Aleksandr Matkovskiy – Head of IT Department lives and works with the motto "Scaling and load balancing is our all!". Therefore, he has 3 sons and dreams to find DEV for his OPS.
You will be able to see how the CI / CD was created and saved our lives. From concept to the final product.
Vladislav Anikin – Team Leader & Software Architect, specializing in SAAS flexible and scalable solutions for business. Driving DDD/TDD oriented squad of awesome SOLID developers.
You will be able to see how the CI / CD was created and saved our lives. From concept to the final product.
Модным ныне словом «виртуализация» сейчас называют различные обёртки аппаратной виртуализации, однако этот термин намного старше и более всеохватывающий. На уровне ознакомления с технологией мы поговорим о виртуализации ресурсов в кластере и на примере pacemaker.
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)Pavel Tsukanov
Расскажу зачем они вообще нужны. Пройдемся по технологиям и промоем им косточки. Рассмотрим достоинства и недостатки, а также где и когда лучше всего применять ту или иную ORM.
Доклад от Parallels:
Методики тестировния производительности database-centric приложений
Описание: При работе над сложными продуктами в database-centric приложениях изменения в коде и тем более в SQL запросах к базе данных могут приводить к неожиданным падениям производительности или же деградации производительности приложения с ростом размера базы данных. Поэтому важно уметь как можно быстрее отлавливать и исправлять причины таких деградаций.
Доклад о том, как устроен процесс мониторинга производительности продукта автоматизации хостинга и облачных сервисов Parallels Automation, для которого определяющим фактором является производительность базы данных.
Компания покажет, как анализирует планы исполнения SQL запросов внутри PostgreSQL, как проверяет насколько быстро и эффективно в целом работают SQL запросы, как определяет стратегию дальнейшей оптимизации.
Similar to CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения потребления ресурсов в движке Aviasales.ru (20)
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения потребления ресурсов в движке Aviasales.ru
1. Использование асинхронного I/O для
снижения потребления ресурсов в
движке aviasales
Каплуновский Борис
aviasales.ru
facebook.com/boris.kaplounovsky
@bskaplou
2. Agenda
● Скриптовые языки и ресурсы
● Асинхронная модель выполнения
● Оптимизации и отзывчивость
● Странности Tornado
● Странности Python
● Tornado/Python в production
● И ещё пару советов по повышению
производительности...
4. Модель памяти нативной
программы
process one
stack
data
process two
code
libdl
libc
data
stack
● Одна и та-же память с
исполняемым кодом
используется всеми
процессами
● Разделяемые
библиотеки грузятся в
память один раз
● Не разделяются
другими процессами
только сегменты
данных и стек
5. Модель памяти скрипта
runtime code
libdl
libc
stackstack
data data
script libs script libs
● Нативные код и
библиотеки
разделяются
● AST и байткод
скриптовых библиотек
хранятся в сегменте
данных и поэтому НЕ
разделяются
● Скриптовый код не так
компактен как
нативный и обычно
занимает в разы
больше памяти
code code
6. Сферический CGI Сервер в
вакууме
stack
data
native code
libc
libdl
datadatadatadata data
stack stackstack stack stack stack
7. Скриптовый CGI Сервер
stackstack
data data
script libs script libs
code code
stackstack
data data
script libs script libs
code code
stackstack
data data
script libs script libs
code code
native code
libc
libdl
8. Оптимизации над CGI
● fastcgi - Не порождаем отдельный процесс для каждого
запроса – экономим процессорного времени на
загрузку скриптов j2ee/rails/etc
● process pool - запуск и инициализация процесса до
прихода запроса – снижение времени отклика
● master -Запуск родительского процесса загружающего
код и делающего инициализацию. Родительский
процесс порождает обработчиков клонируя себя.
Процесс обрабатывающий запрос уже имеет в памяти
всё необходимое. unicorn/dalvik/etc
9. Copy on write
● После вызова fork() состояние
памяти и родителя и потомка
одинаковые
● Делать полную копию
адресного пространства при
fork() расточительно
● В момент вызова fork()
страницы данных родителя и
потомка метятся как read-only
parent childcode
libdl
libc
data
stack
fork()
10. Copy on write
● Как только один из процесс
записывает данные –
операционная система делает
личную копию страницы в
пространстве процесса
● Страницы памяти в которые не
пишут могут разделяться вечно
parent child
data
stack stack
data
clone pages
11. master process & copy on write
● После старта мастер процесс
грузит библиотеки и
подготавливает всё для
исполнения скрипта
● По мере необходимости мастер
порождает рабочие процессы
клонируя себя
● Так как в мастере уже были
загружены все библиотеки
дочерний процесс готов к работе
мгновенно
● COW позволяет не создавать
собственную копию кода в памяти
master child
stackstack
data data
script libs
code
native code
libc
libdl
14. COW не работает потому что
● GC скриптовой среды
меняют данные
неиспользуемых обьектов в
ходе своей работы
● Скриптовые языки со
счётчиками ссылок
модифицируют счётчики
ссылок при создании новой
ссылки на обьект, даже
если сам обьект неизменен
master child
stackstack
data data
script
libs
code
native code
libc
libdl
code
script
libs
15. COW не
просто заставить работать
● В ruby 2.0 обещали сделать
cow friendly gc. Не
получилось!
● COW работает у google в
dalvik, но для этого им
пришлось заменить jvm на
dalvik
master child
stackstack
data data
script
libs
code
native code
libc
libdl
code
script
libs
16. Типичное web приложение
Значительную часть времени веб приложения
ждут ответов внешних сервисов таких как
– SQL сервер
– Внешний API
– Файловый ввод вывод
Всё это время ничего не происходит!
Но память занята...
запрос ответ
logic SQL logicAPI
17. Rails приложение aviasales
● Ожидание ответа внешних API до 30 секунд
● Работа с SQL ~1 секунда
● Потребляемая память ~300mb (одним процессом)
● Разделяемая память ~4mb (код интерпретатора)
● ~300 одновременных поисков
87GB RAM/6 серверов
И вся эта память простаивала!
запрос ответ
logic SQL logicAPI
18. Синхронная модель VS
Асинхронная модель
cgi worker
stack
data
code
script
libs
cgi worker
stack
data
code
script
libs
async worker
stack
script
libs
code
native code
libc
thread
data
thread
data
thread
data
cgi worker
stack
data
code
script
libs
native code
libc
19. Асинхронная модель
Минусы
● Кооперативная многозадачность
● Если падает процесс падают все потоки
● Не для всего есть библиотеки
● Отсутствие изоляции
● Примитивный планировщик
● Нет готовых решений
20. Асинхронная модель
Плюсы
● Эффективное использование памяти
● Эффективное использование памяти
● Эффективное использование памяти
● Эффективное использование памяти
● Эффективное использование памяти
21. Почему Python
– Большое и доброе community
– Обилие библиотек
– Tornado живёт в python
– Реклама google
– Хотелось попробовать
23. Приложение на python/tornado
● Один процесс:
– занимает 267mb памяти
– из них 162mb разделяемой
– обрабатывает до 10
одновременных запросов
– больше не ждёт SQL сервер, все
данные в адресном пространстве
процесса
– ~ 500 одновременных исходящих
соединений
– 2 сервера/8GB памяти
async worker
stack
script
libs
code
native code
libc
data data data
24. При работе с tornado помни!
● Как только вы начинаете использовать синхронный IO
всё останавливается
● Переключение контекста происходит ТОЛЬКО на I/O и
yield внутри @gen.coroutine
● Неделимый кусок кода не должен исполняться больше
XXXms (мы выбрали 100ms)
25. При работе с tornado помни!
● Декоратор @gen.coroutine не бесплатен
● Tornado/Python приложение может умирать
● У Tornado/Python приложения может течь память
● Только профилировщик точно покажет кто ест CPU
● Python используется как клей для нативных библиотек,
сложные алгоритмы на python реализовывать не надо
26. Странности Tornado
● Из коробки нет способа остановить приложение без
обрыва соединений
● Есть рецепты костылей на StackOverflow
● Но этого мало – пришлось изобретать ещё костылей
28. Странности Tornado – Резольвер
● tornado.netutil.BlockingResolver
– Используется по умолчанию
– Использует синхронный getaddrinfo
– Не кеширует результаты
– Обращение к DNS при каждом HTTP
запросе
– Пока DNS сервер не ответил всё стоит
29. Странности Tornado – Резольвер
● tornado.netutil.ThreadedResolver
– Вызывает getaddrinfo в отдельном потоке
python
– Overhead на потоки: память, cpu, GIL
– Работает но выглядит как костыль
30. Странности Tornado – Резольвер
● Мы написали простой
асинхронный резольвер для
Tornado IOLoop
– Только TCP
– Только записи A и CNAME
– Кеширование ответов DNS по
TTL
– Большинство
преобразований делается без
системных вызовов
31. Странности Tornado – HTTPClient
● HTTPClient создаёт не больше 10 исходящих
соединений по умолчанию
● HTTPClient умеет стримить ответ сервера только
если ответ chunked
32. Странности Tornado
● Документация зачастую избегает описывать узкие
места
● Будьте готовы читать исходный код tornado чтобы
понять поведение системы
33. Странности Python
● Сторонние библиотеки с нативным кодом текут и валят
приложение через одну
● Найти утечку памяти в нативном коде крайне сложно
● Встроенная библиотеку xml.etree может приводить к
SEGFAULT, мы используем lxml
● Сложные регулярные выражения могут остановить
приложение busy-wait
34. tornado/python в production
MONIT
– Убивает рабочие процессы если они
выедают CPU
– Убивает рабочие процессы если они
превысили лимит по памяти
– Стартует рабочие процессы если те
умерли сами или были убиты
– Простой и удобный web интерфейс
35. tornado/python в production
HAPROXY
– Раскидывает приходящие запросы по
доступным рабочим процессам
– Балансирует нагрузку отправляя
запросы к процессам с наименьшим
количеством активных соединений
– Адски быстрый и простой
– Простой и удобный веб интерфейс
36. tornado/python в production
BENCHMARKS
– Тотальное логирование времени выполения участков
кода
– Визуализация бенчмарков на видном месте
– Немедленная реакция на аномалии в скорости
ответов сервера
39. Файловое key-value хранилище
● Содержимое файла должно быть смаплено в
адресное пространство процесса mmap
● Рабочий обьём должен умещаться в оперативной
памяти
● База должна позволять нескольким процессам
одновременно читать данные без блокировок
● Мы используем kyoto cabinet и он прекрасен
40. Быстрее чем redis и memcached
worker
load value
Плюсы
● Не нужен внешний
сервер
● Непревзойдённая
скорость
● Не нужно переключать
контекст и делать
syscall
● Высокая
отказоустойчивость
41. Быстрее чем redis и memcached
worker
load value
Минусы
● Медленный update
данных
● Избыточность при
работе в кластере
● Работает только для
небольшого кол-ва
данных
43. Используйте потоковую обработку
для разбора XML
● Опция streaming_callback у AsyncHTTPClient
fetch позволяет получать данные по мере
поступления
● Метод lxml.etree.XMLParser.feed позволяет
парсить xml по кускам
● Если и это не помогает, делаем
IOLoop.instance().add_timeout(time()) чтобы
разбить поток исполнения
44. tornado/python в production
Приоритеты
● У разных запросов разные требования к скорости ответ
● Рабочие процессы привязываются к одной или
нескольким группа приоритета
● Haproxy отправляет запросы в соответствующую группу
рабочих процессов