Рост с нуля до 15000 сообщений в секунду. Мучительный и поучительный / Юрий К...Ontico
РИТ++ 2017, HighLoad Junior
Зал Сингапур, 6 июня, 14:00
Тезисы:
http://junior.highload.ru/2017/abstracts/2499.html
Компания TIMCONNECT процессит банковские смс-сообщения, по возможности отправляя их как push.
Расскажем, как мы за 2 месяца небольшой командой масштабировались в 15 раз, минимально переписывая код, применяя паттерны из хайлоада методом проб и ошибок. На примерах проиллюстрируем, что хайлоад может быть достижим просто и быстро. Если повезет.
Доклад о собранных граблях и сделанных выводах, применимых к большинству проектов.
Рост с нуля до 15000 сообщений в секунду. Мучительный и поучительный / Юрий К...Ontico
РИТ++ 2017, HighLoad Junior
Зал Сингапур, 6 июня, 14:00
Тезисы:
http://junior.highload.ru/2017/abstracts/2499.html
Компания TIMCONNECT процессит банковские смс-сообщения, по возможности отправляя их как push.
Расскажем, как мы за 2 месяца небольшой командой масштабировались в 15 раз, минимально переписывая код, применяя паттерны из хайлоада методом проб и ошибок. На примерах проиллюстрируем, что хайлоад может быть достижим просто и быстро. Если повезет.
Доклад о собранных граблях и сделанных выводах, применимых к большинству проектов.
Алексей Фомкин, Практическое применение Web WorkersAleksey Fomkin
WebWorkers имеют глобальное покрытие в 92% по данным http://caniuse.com. Тем не менее, не всякое современное веб-приложение использует их.
В своем докладе я постараюсь передать двухлетний опыт использования WebWorkers в нашей команде для написания веб-приложений с функциональностью, которая требует выполнения тяжелых вычислений, таких как преобразование бинарых файлов из одного формата в другой и шифрование.
Расскажу про эксперименты по переносу в воркер расчета diff'ов в React-подобной системе рендеринга и покажу наивную реализацию модели акторов на основе воркеров.
Также постараюсь подготовить слушателей к новым проблемам, которые могут возникнуть при использовании веб-воркеров.
«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)AvitoTech
Поговорим о том, почему это далеко не самая простая задача, и как следует разбираться с возникающими трудностями. Рассмотрим и покритикуем существующие решения. Научимся создавать свой собственный велосипед.
РИТ-2013: Доклад о решениях по асинхронной обработке данных, внедреннных в Мамбе. 1) собственный Comet-сервер, 2) Неудачное внедрение Gearman, 3) RabbitMQ: основы работы, тонкости и особенности внедрения.
"Fault tolerant workflow orchestration on PHP", Anton TsitouFwdays
Workflow orchestration systems.
About Temporal.IO (Cadence, AWS SWF).
Integrating Temporal to RoadRunner and PHP.
Overview of PHP SDK for durable workflow orchestration.
«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)AvitoTech
В Badoo я работаю в команде, которая разрабатывает на PHP. Одна из фич, которой мы занимаемся, со временем начала отъедать всё больше и больше железячных ресурсов. В итоге мы едва успевали добавлять серверы под растущую нагрузку. При этом вечера, проведённые с Go дома, подсказывали, что можно сделать на порядки производительнее, не затратив на разработку много времени.
Я расскажу о том, почему наша фича так плохо ложится на PHP и хорошо – на Go, как уговорить всех всё переписать и не показаться сумасшедшим, ну и, конечно же, как из 19 серверов оставить только 4.
Сдавая веб-сервер в повседневную эксплуатацию, нужно быть уверенным, что он выдержит планируемую нагрузку. Как понять, что код написанный разработчиками выдержит запланированный наплыв посетителей? И что важнее, как понять какой при этом будет запас мощности?
Необходимо провести тест производительности сайта, чтобы выявить потенциально узкие места и наметить планы по их рефакторингу. Рассмотрим методологию тестирования.
Алексей Фомкин, Практическое применение Web WorkersAleksey Fomkin
WebWorkers имеют глобальное покрытие в 92% по данным http://caniuse.com. Тем не менее, не всякое современное веб-приложение использует их.
В своем докладе я постараюсь передать двухлетний опыт использования WebWorkers в нашей команде для написания веб-приложений с функциональностью, которая требует выполнения тяжелых вычислений, таких как преобразование бинарых файлов из одного формата в другой и шифрование.
Расскажу про эксперименты по переносу в воркер расчета diff'ов в React-подобной системе рендеринга и покажу наивную реализацию модели акторов на основе воркеров.
Также постараюсь подготовить слушателей к новым проблемам, которые могут возникнуть при использовании веб-воркеров.
«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)AvitoTech
Поговорим о том, почему это далеко не самая простая задача, и как следует разбираться с возникающими трудностями. Рассмотрим и покритикуем существующие решения. Научимся создавать свой собственный велосипед.
РИТ-2013: Доклад о решениях по асинхронной обработке данных, внедреннных в Мамбе. 1) собственный Comet-сервер, 2) Неудачное внедрение Gearman, 3) RabbitMQ: основы работы, тонкости и особенности внедрения.
"Fault tolerant workflow orchestration on PHP", Anton TsitouFwdays
Workflow orchestration systems.
About Temporal.IO (Cadence, AWS SWF).
Integrating Temporal to RoadRunner and PHP.
Overview of PHP SDK for durable workflow orchestration.
«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)AvitoTech
В Badoo я работаю в команде, которая разрабатывает на PHP. Одна из фич, которой мы занимаемся, со временем начала отъедать всё больше и больше железячных ресурсов. В итоге мы едва успевали добавлять серверы под растущую нагрузку. При этом вечера, проведённые с Go дома, подсказывали, что можно сделать на порядки производительнее, не затратив на разработку много времени.
Я расскажу о том, почему наша фича так плохо ложится на PHP и хорошо – на Go, как уговорить всех всё переписать и не показаться сумасшедшим, ну и, конечно же, как из 19 серверов оставить только 4.
Сдавая веб-сервер в повседневную эксплуатацию, нужно быть уверенным, что он выдержит планируемую нагрузку. Как понять, что код написанный разработчиками выдержит запланированный наплыв посетителей? И что важнее, как понять какой при этом будет запас мощности?
Необходимо провести тест производительности сайта, чтобы выявить потенциально узкие места и наметить планы по их рефакторингу. Рассмотрим методологию тестирования.
Кластеризации поисковых запросов в IpythonМихаил Жуковец
Примеры практической реализации методов кластеризации ключевых слов на языке python с применением библиотеки scikit-learn. Реализованы два популярных алгоритма - K-Means и иерархическая кластеризация. В качестве признаков ключевых слов приведены примеры для семантического состава фраз и кластеризация по ТОП.
Pconnect: граната в руках обезьяны. Сергей Аверин, Badoo.
Persistent connect. Это всегда преподносится как plug'n'play. В учебниках информации очень мало. Но все всегда думают, что это «просто работает».
- Что это, вообще, такое, зачем было придумано и какие задачи призвано решать.
- О том, как этим всем пользуются, и что получается в итоге.
- О том, как, на самом деле, это работает. Про что не пишут в учебниках.
- Stateful-протоколы, пример с проблемами в mysql.
- В stateless-мире все не так уж солнечно.
- Большинство протоколов просто не рассчитано на pconnect. Баги в C++ софте (которые есть всегда) + pconnect + простоватый протокол = адская смесь. Каким должен быть протокол.
- Мелкие нюансы, из-за которых возникают проблемы.
- Connection pooling — что это и с чем его едят.
- Как со всем этим жить.
There are a lot of things in multi-threading world, which we, as engineers, have to consider while developing applications. During Golang Odesa #TechTalks we will talk about three main problems – data races, race conditions, and deadlocks. Also, we will discuss how to avoid fantom bugs and do not shoot yourself in the foot while developing Golang applications
About speaker:
Oleksandr Karlov is Golang Team Lead at Lohika. Currently, Oleksandr is working on SLO project, which helps engineers to control reliability of their services. Before that he worked on CDN and statistics platform.
Порядок преодоления болота на маршруте: как не надо писать приложения, основа...HLL
Артём Гавриченков (ximaera), ведущий разработчик сети фильтрации трафика Qrator, описывает типичные ошибки программирования при написании серверных приложений на основе TCP-сокетов в рамках конференции «Российские интернет-технологии» (2-3 апреля 2012, Москва).
Разбирается (вероятно, неисчерпывающий) ряд заблуждений и узких мест, приводящих к проблемам с производительностью и уязвимостям безопасности TCP-приложений; приводится ряд примеров, когда ошибки, неочевидные на этапе программирования, при эксплуатации приводили к финансовым и репутационным потерям у авторов и пользователей приложения. Даются рекомендации по отладке и оптимизации приложений, основанных на TCP, а также операционных систем, в которых эксплуатируются такие продукты.
Среди прочего, разбираются такие аспекты работы обработчика TCP-запросов, как:
• предотвращение атак, аналогичных slow POST в Nginx и Lighttpd;
• предотвращение ошибок, аналогичных проблеме со скачиванием файлов в браузере Internet Explorer;
• возможные изменения в дизайне самописных TCP-based протоколов с целью их ускорения;
• использование опции TCP (таких, как TCP_NODELAY) для ускорения работы специфических приложений.
Из презентации вы узнаете:
— как мы пришли к Go, оставив идею использования Node.js, Scala или Rust;
— про первый сервис, который мы написали на Go и запустили в продакшен;
— про ошибки, с которыми сталкивались под нагрузкой;
— про оптимизации, которые мы сделали и еще планируем сделать;
— про тестирование и предотвращение тестирования на продакшене (в частности, websocket'ов).
Как показывает практика, повсеместное применение классического, основанного на callback’ах подхода к асинхронному программированию обычно оказывается неудобным. Для упрощения написания и поддержки сложного асинхронного кода можно использовать иной подход — с использованием сопрограмм. Он значительно сокращает объём и сложность кода, превращая код из асинхронного в синхронный.
7. Message passing
Единственный метод взаимодействия компонентов:
передача сообщений через очереди.
● Как сделать эффективно?
● Как сделать просто?
● Блокировать или нет при отправке?
● Как доставлять между разными вычислителями?
● Что делать, если нельзя доставить сообщение прямо
сейчас?
● Как организовать очереди?
● ???
8. Откуда растут ноги
● RCP
● Corba
● DCOM
● DCOP / Bonobo
● RTI
В 2003 JPMorgan Chase заказала разработку и реализацию
протокола AMQP компании iMatrix.
В 2007 iMatrix решили сделать свой протокол, без брокера, но с GPL.
В 2011 вышел ZeroMQ 1.0
В 2014 вышел ZeroMQ 4.0
9. Что будет если
Что получится, если взять обычный TCP-
сокет, добавить чуток радиоактивных
изотопов, украденных с секретного
советского реактора, облучить
получившуюся смесь космическими лучами
и передать в руки наркомана-художника,
днём рисующего комиксы, а по ночам
надевающего на себя костюм с накладными
мускулами из спандекса.
10. ØMQ
● ØMQ (also known as ZeroMQ, 0MQ, or zmq)
looks like an embeddable networking library but
acts like a concurrency framework.
11. Ø?
● Zero brocker
● Zero latency
● Zero administration
● Zero complexity
● Zero cost
12. Mesage passing and patterns
● Взаимодействие двух компонентов это всегда обмен сообщениями
● Взаимодействие
– 1 to 1
– 1 to many
– many to 1
– many to many
● Шаблоны
– Push-Pull
– Request-Reply
– Publish-Subscribe
– Router-Dealer
– ...
● Очереди сообщений
21. zmq_socket
● Тип сокета
● Тип транспорта
– In-process
– Inter-process
– TCP
– Multicast
● bind()/connect()
– Кто слушает порт?
– Один ко многим и много к одному
If there's one lesson we've learned from 30+ years of concurrent programming, it is: just don't share state. It's like two drunkards trying to share a beer. It doesn't matter if they're good buddies. Sooner or later, they're going to get into a fight. And the more drunkards you add to the table, the more they fight each other over the beer. The tragic majority of MT applications look like drunken bar fights.