В докладе рассматривается мотивация и опыт перехода процесса разработки API с большим количеством внутренней логики с Python на сочетание Erlang и Haskell, проблемы в процессе разработки и способы их решения.
Cборка мусора в Java без пауз (HighLoad++ 2013)aragozinДоклад про паузы при сборке мусора уже был на одной из прошлых конференций HighLoad++.
Паузы stop-the-world являются неотъемлемым атрибутом автоматического управления памятью.
Или всё-таки их можно избежать? – Можно!
Алгоритмы, не требующие пауз для управления памятью, существуют. Существуют и реальные JVM, которые их реализуют.
Содержание доклада
- Принципы автоматического управления памятью (сборки мусора).
- "Метроном" - классический алгоритм сборки мусора без пауз.
- С4 - алгоритм сборки мусора Zing JVM (Azul Systems).
- Особенности эффективной реализации на x86-архитектуре.
- Дополнительные источники проблем: слабые ссылки, фрагментация и прочее.
Секреты сборки мусора в JavaaragozinПрезентация с Highload++ 2011
---
Принципы работы сборщика мусора в JVM. Использование принципа поколений. Параллельная и фоновая сборка мусора. Особенности реализации алгоритмов сборки мусора в HostSpot и JRockit JVM. Причины пауз сборки мусора и способы борьбы с ними. Особенности работы с "большими" JVM - 32 гигабайта и больше. Альтернативы сборщике мусора, прямое управление памятью в Java.
JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)aragozinОбеспечение достойной производительности высокоуровневого языка с динамической типизацией - непростая задача. Just-in-time (JIT) компиляция - динамическая генерация машинного кода с учетом информации, собранной во время выполнения приложения - ключевой элемент производительности виртуальной машины (будь то Java, .NET или даже JavaScript). JIT-компилятор, в свою очередь, должен иметь впечатляющий набор трюков и оптимизаций, что бы компенсировать "динамизм" языка.
В докладе речь пойдет о достижениях современной JIT компиляции в целом и более подробно будут освещены особенности HotSpot JVM (бесплатной JVM от Oracle)
Теория языков программирования некоторые слайды к лекциямSergey StaroletovТеория языков программирования (немного об интерпретаторах, триадах, оптимизации, парсерах и прочее)
Compilers construction some lectures of whole course, it covers some methods on interpreters, optimisations, antlr, dsl (introduction)
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...Sergey PlatonovАлександр Тарасенко, Использование python для автоматизации отладки С/C++ кода в Windows
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVMSergey PlatonovЗачастую, знакомство с алиасингом в C++ у многих программистов начинается и заканчивается одинаково: -fno-strict-aliasing. На вопросы новичка, более опытные коллеги отвечают в стиле: «не трогай! а то все сломаешь!». Новичок и не трогает. В докладе будет предпринята попытка заглянуть под капот и понять, что же там, внутри. Что такое алиасинг, где он может быть полезен и какие реальные преимущества дает. Тема будет рассмотрена и со стороны программиста и со стороны разработчика компилятора. А по сему, вопрос «зачем?» будет центральным в повествовании.
Шишки, набитые за 15 лет использования акторов в C++Yauheni AkhotnikauСлайды доклада на конференции C++ Corehard Winter 2017 (г.Минск).
Автор доклада давно и успешно использует Модель Акторов при разработке приложений на C++. В основном это был положительный опыт. Но есть некоторые неочевидные моменты, про которые было бы хорошо узнать заранее. О том, где использование Модели Акторов уместно, а где нет, на какие грабли довелось наступить, какие шишки были набиты, как можно упростить себе жизнь и пойдет речь в докладе.
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...Stfalcon MeetupsСергей Комлач
Занимается разработкой под мобильные платформы более 8-ми лет. Последние 2 года занимает должность старшего Android разработчика. Ведет курс разработки по Android в рамках Google Android Study . Докладчик на UAMobile 2014 (Kiev) , Lviv Mobile Developers Day 2014 , Google Developers Fest (2014, Lviv) , MobileOptimized (Minsk). Соорганизатор GDG Kremenchuk .
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Sergey PlatonovВ последнее время в промышленной разработке ПО особую популярность обретают Domain-Specific Lanugages (DSL). Они драматически упрощают разработку и дают возможность “программировать” не только программистам, но и пользователям прикладных программ.
В своем докладе я расскажу об опыте использования DSL применительно к С++, причем упор будет сделан на производительность кода DSL, и его мгновенную “встраиваемость” в запущенную программу путем компиляции DSL-кода в нативный код с помощью инструментария LLVM.
New Android NDK & JNIStfalcon MeetupsСергій Комлач
— Android розробник в Sticky Password (Чехія).
— Головні напрямки роботи — біометрична ідентифікація, кібер-безпека, кросс-платформенні рішення.
— Досвід у сфері розробки під Мобайл понад 8 років.
— Переможець Opera Mobile Store Awards.
— Спікер та учасник: Lviv Mobile Development Day, UAMobile, Frameworks Day Android, Code'n'Coffee Khmelnitsky, Google DevFest UA.
— Засновник та лідер Google Developers Group Kremenchuk.
SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до ZSECONВ ходе мастер-класса мы продемонстрируем основы владения фреймворком radare2, а так же разберем с помощью него несколько практических примеров. В частности проанализируем простую вредоносную программу и ПО для ARM-устройств (Android / iOS)
HaskellDevDayФункциональное программирование в примерах.
Язык Haskell: характеристики, история, сильные и слабые стороны, истории успеха и неудач.
Спецификация Haskell’98: синтаксис, компиляторы, интепретаторы, документация, IDE.
Особенности языка: тип Maybe, списки, классы типов, основы монад.
Библиотеки и фреймворки: Parsec, GenXml, HaXml
DSL
На десерт что-то из Existential Types, State Monad, ST Monad, Monad Transformers.
Erlang, который мы потерялиIvan GrishaevВторой доклад встречи любителей глубокого рефакторинга. Рассказывает Юрий Хрусталев.
Видео: https://youtu.be/nYR7jC6gyD8
Современная операционная система: что надо знать разработчику / Александр Кри...OnticoМы проговорим про связь приложения и ОС, какие компоненты есть в современной ОС на примере Linux, как настройки этих компонент могут повлиять на приложение.
Я расскажу про планировщик процессов, дисковый и сетевой ввод-вывод и соответствующие планировщики, управление памятью - как это все в общих чертах работает и как его потюнить.
JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)aragozinОбеспечение достойной производительности высокоуровневого языка с динамической типизацией - непростая задача. Just-in-time (JIT) компиляция - динамическая генерация машинного кода с учетом информации, собранной во время выполнения приложения - ключевой элемент производительности виртуальной машины (будь то Java, .NET или даже JavaScript). JIT-компилятор, в свою очередь, должен иметь впечатляющий набор трюков и оптимизаций, что бы компенсировать "динамизм" языка.
В докладе речь пойдет о достижениях современной JIT компиляции в целом и более подробно будут освещены особенности HotSpot JVM (бесплатной JVM от Oracle)
Теория языков программирования некоторые слайды к лекциямSergey StaroletovТеория языков программирования (немного об интерпретаторах, триадах, оптимизации, парсерах и прочее)
Compilers construction some lectures of whole course, it covers some methods on interpreters, optimisations, antlr, dsl (introduction)
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...Sergey PlatonovАлександр Тарасенко, Использование python для автоматизации отладки С/C++ кода в Windows
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVMSergey PlatonovЗачастую, знакомство с алиасингом в C++ у многих программистов начинается и заканчивается одинаково: -fno-strict-aliasing. На вопросы новичка, более опытные коллеги отвечают в стиле: «не трогай! а то все сломаешь!». Новичок и не трогает. В докладе будет предпринята попытка заглянуть под капот и понять, что же там, внутри. Что такое алиасинг, где он может быть полезен и какие реальные преимущества дает. Тема будет рассмотрена и со стороны программиста и со стороны разработчика компилятора. А по сему, вопрос «зачем?» будет центральным в повествовании.
Шишки, набитые за 15 лет использования акторов в C++Yauheni AkhotnikauСлайды доклада на конференции C++ Corehard Winter 2017 (г.Минск).
Автор доклада давно и успешно использует Модель Акторов при разработке приложений на C++. В основном это был положительный опыт. Но есть некоторые неочевидные моменты, про которые было бы хорошо узнать заранее. О том, где использование Модели Акторов уместно, а где нет, на какие грабли довелось наступить, какие шишки были набиты, как можно упростить себе жизнь и пойдет речь в докладе.
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...Stfalcon MeetupsСергей Комлач
Занимается разработкой под мобильные платформы более 8-ми лет. Последние 2 года занимает должность старшего Android разработчика. Ведет курс разработки по Android в рамках Google Android Study . Докладчик на UAMobile 2014 (Kiev) , Lviv Mobile Developers Day 2014 , Google Developers Fest (2014, Lviv) , MobileOptimized (Minsk). Соорганизатор GDG Kremenchuk .
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Sergey PlatonovВ последнее время в промышленной разработке ПО особую популярность обретают Domain-Specific Lanugages (DSL). Они драматически упрощают разработку и дают возможность “программировать” не только программистам, но и пользователям прикладных программ.
В своем докладе я расскажу об опыте использования DSL применительно к С++, причем упор будет сделан на производительность кода DSL, и его мгновенную “встраиваемость” в запущенную программу путем компиляции DSL-кода в нативный код с помощью инструментария LLVM.
New Android NDK & JNIStfalcon MeetupsСергій Комлач
— Android розробник в Sticky Password (Чехія).
— Головні напрямки роботи — біометрична ідентифікація, кібер-безпека, кросс-платформенні рішення.
— Досвід у сфері розробки під Мобайл понад 8 років.
— Переможець Opera Mobile Store Awards.
— Спікер та учасник: Lviv Mobile Development Day, UAMobile, Frameworks Day Android, Code'n'Coffee Khmelnitsky, Google DevFest UA.
— Засновник та лідер Google Developers Group Kremenchuk.
SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до ZSECONВ ходе мастер-класса мы продемонстрируем основы владения фреймворком radare2, а так же разберем с помощью него несколько практических примеров. В частности проанализируем простую вредоносную программу и ПО для ARM-устройств (Android / iOS)
HaskellDevDayФункциональное программирование в примерах.
Язык Haskell: характеристики, история, сильные и слабые стороны, истории успеха и неудач.
Спецификация Haskell’98: синтаксис, компиляторы, интепретаторы, документация, IDE.
Особенности языка: тип Maybe, списки, классы типов, основы монад.
Библиотеки и фреймворки: Parsec, GenXml, HaXml
DSL
На десерт что-то из Existential Types, State Monad, ST Monad, Monad Transformers.
Erlang, который мы потерялиIvan GrishaevВторой доклад встречи любителей глубокого рефакторинга. Рассказывает Юрий Хрусталев.
Видео: https://youtu.be/nYR7jC6gyD8
Современная операционная система: что надо знать разработчику / Александр Кри...OnticoМы проговорим про связь приложения и ОС, какие компоненты есть в современной ОС на примере Linux, как настройки этих компонент могут повлиять на приложение.
Я расскажу про планировщик процессов, дисковый и сетевой ввод-вывод и соответствующие планировщики, управление памятью - как это все в общих чертах работает и как его потюнить.
Другая виртуализацияYandexМодным ныне словом «виртуализация» сейчас называют различные обёртки аппаратной виртуализации, однако этот термин намного старше и более всеохватывающий. На уровне ознакомления с технологией мы поговорим о виртуализации ресурсов в кластере и на примере pacemaker.
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"Yandex2 июля 2011, Я.Субботник в Екатеринбурге
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
О докладе:
Про Python и Django: зачем нужна красота и простота перфекционистам с дедлайнами, на примере Яндекс.Погоды.
Когда число сервисов, которые делаются в Яндексе, стало возрастать, дедлайны — поджимать, а от процесса разработки требовалось стать более гибким, возникла потребность в свежих решениях. В докладе на примере Яндекс.Погоды рассказывается, как в Яндексе делают сервисы с помощью языка Python и веб-фреймворка Django.
Modern neural net architectures - Year 2019 versionGrigory Sapunovݺߣs from the talk on UseData 2019 conference. Describes what happened in the NN architecture space in the last two years. Focus on production-ready things. Other interesting but more research-related topics (like Graph networks) are not covered here.
Работа с Big Data MATLABМы покажем, как можно перенести разработанные алгоритмы для работы с Big Data с минимальными изменениями исходных программ. Рассмотрим возможности по распараллеливанию счета на многоядерных процессорах (вычислительных кластерах) и графических процессорах, поддерживающих CUDA.
Михаил Белопухов: OpenBSD: Куда катится крипто?YandexВ своем докладе я расскажу о прошлом, настоящем и будущем использования криптографии и криптографического стека в OpenBSD. Мы коснемся поддержки AES-NI и AES-GCM, использования ChaCha20 в качестве замены ARC4 в PRNG. Кроме того, рассмотрим альтернативы алгоритмам, стандартизованным NIST: ChaCha20, Poly1305, Curve25519, и их использование в OpenSSH и OpenBSD.
Reinventing the wheel - why do it and how to feel good about it - Julik Tarkh...Ruby MeditationTalk of Julik Tarkhanov, senior backend engineer, WeTransfer, Amsterdam, at Ruby Meditation #28 Kyiv 26.10.2019
Next conference - http://www.rubymeditation.com/
It is often a choice, sometimes a whim, and sometimes an act of desperation. We idolise reuse while sometimes the road not taken is just as exciting. Let's chat about where it is appropriate to "do the thing again", take the scenic route and enjoy the view.
Announcements and conference materials https://www.fb.me/RubyMeditation
News https://twitter.com/RubyMeditation
Photos https://www.instagram.com/RubyMeditation
The stream of Ruby conferences (not just ours) https://t.me/RubyMeditation
* The channel of the organizers of the meetup https://t.me/incredevly
Reinventing the wheel - why do it and how to feel good about it - Julik Tarkh...Ruby Meditation
Дмитрий Грошев, Фёдор Гоголев. Erlang и Haskell в production: проблемы и решения
1. .
Erlang и Haskell в production: проблемы и
решения
.
Dmitry Groshev (@lambdadmitry),
Fedor Gogolev (@knsd),
@Selectel
FProg 2012-10
04.10.2012
1 / 36
2. . Общий план
Вступление
Коротко о пони
YAWNDB
Selecon-web
Коротко об облаках
Rainbowdash
Twilightsparkle
Резюме
2 / 36
8. . YAWNDB — Yet Another Weel iNvented
Timeseries данные (утилизация CPU per second)
Много операций записи (десятки тысяч в секунду —
виртуальных машин много)
Хочется аггрегацию (max/min/avg за период)
Graphite медленный, RRD не умеет аггрегацию
8 / 36
9. . YAWNDB
.
Path Disk
manager
New path
request path 1
handler 1 Dumper
path 2
request
handler 2
path 3
...
...
request
handler N path M
9 / 36
10. . YAWNDB
.
Path Disk
manager
New path
request path 1
handler 1 Dumper
path 2
request
handler 2
path 3
...
...
request
handler N path M
10 / 36
11. . YAWNDB: выводы
NIF (Native Implemented Functions) это круто, но опасно
мутабельные NIF binaries предоставляют изолированную
мутабельность
писать NIF неприятно, документация полна, но не всегда
помогает
property-based тестирование при использовании NIF
необходимо, т.к. ошибки нетривиальны (C же!), а segfault'ы
травматичны
fuzz-тесты на случайных/бессмысленных данных полезны
писать высококонкурентные системы сложно, Erlang не
добавляет сложности
устойчивость к ошибкам Erlang'а помогает, в продакшне
почти полгода был редкий рейс без последствий вообще
11 / 36
12. . YAWNDB: выводы 2
код лаконичен (650 строк на C, 1500 строк на Erlang'е)
если вы пишите что-то сетевое, нет ни одной причины не
использовать Cowboy
если ваш проект длиннее 30 строк, нет ни одной причины не
использовать gproc
поддержка SMP Erlang'ом не миф
12 / 36
16. . Об облаках
Xen:
Dom0, DomU
запуск и остановка доменов
простой и неубиваемый
XAPI (XenAPI) от Citrix:
Миграция
Пулы
Динамическое управление памятью
...
16 / 36
17. . Больше, чем XAPI
учёт используемых ресурсов (биллинг, статистика)
управление машинами из биллинга, веб-интерфейса, API и
администраторами
детекция нештатных ситуаций (падение хранилища либо
сети)
динамическая балансировка нагрузки
предоставление интерфейсов к машине, не
предусмотренных XAPI (web-консоль, realtime потребление,
MemoryOnDemand)
Много сложной «бизнес»-логики
17 / 36
18. . Старая архитектура
Make it work, make it right, make it fast
Python+Bash помойка
Коммуникация через HTTP, Mongo и redis (aka «как
получится»)
WTF is summationd? WTF is yawndbtiond-obsolete?
боль с Python+Mongo — много раздельного кода,
размазывание схемы
18 / 36
19. . Новая архитектура
Make it work, make it right, make it fast
Построение «от API»
VBD/VDI/VIF/BDSM → Disk/Network interface/...
Фиксированная схема данных
Erlang для сети и рантайма, Haskell для «бизнес»-логики
Механизм Erlang ports — stdin/stdout + Erlang External Term
Format
19 / 36
23. . Rainbowdash
Милая, быстрая, немного простоватая, но reliable для друзей
REST + RPC: HTTP REST API → RPC API на фронтенде по
конфигу с верификацией (type safety!)
Асинхронность + синхронность: интерфейс синхронный,
rainbowdash асинхронна, twilightsparkle синхронна
«Задачи» с уникальным идентификатором для каждого
запроса
2-phase commit задачи: проверка корректности и ожидаемой
ресурсоёмкости, запуск (возможно, отложенный)
балансировка нагрузки на бекендах по ожидаемым ресурсам
и внешним характеристикам процессов (ping, mem)
отчёты о состоянии системы (ping, mem, cpu, rps, latency)
2-phase commit конфига
почти live reloading Haskell-кода с персистентными задачами
и HTTP-коннектами
23 / 36
24. . Rainbowdash: выводы
переход программистов Python → Erlang занимает
неделю-полторы
запаковка не-Erlang кода с помощью rebar это боль
(Make+bash+cabal+cabal-dev)
jobs — прекрасная библиотека, но документации почти нет
любить себя полезно, несколько часов на автоматизацию
перезагрузки бекенда при изменении бинарника окупились
многократно
кода до первой работоспособной версии достаточно мало
(1k строк)
24 / 36
28. . TwiligthSparkle
Общая архитектура
Template Haskell и генерация сервера
Контроль ошибок на уровне типов
Барьеры — откат изменений
Persistent ORM
Проблемы при разработке
28 / 36
29. . TwiligthSparkle: общая архитектура
Сервер, занимающийся чтением запросов из stdin и пишущий
ответы в stdout
Используется стандартный для Эрланга способ
коммуникации — порты
Был написан модуль реализующий ETF (External Term Format)
Воркеры, выполняющиеся в отдельных процессах
Сложное ядро, максимально простой API для написания
непосредственно обработчиков запросов
Каждый запрос определяется тремя параметрами: source,
input и result
source — Источник задачи, в нашем случае это пользователь
API, администратор или внутренний сервис
input — Входные данные запроса
result — Результат на выполнение запроса
class TaskSource source => Task source input result
29 / 36
30. TwiligthSparkle: Template Haskell и генерация
. сервера
Template Haskell используется для генерации функций разбора
запросов от сервера. Например из кода:
[erlServer|
vm_start :: TS User VMStartTask ()
|]
генерируется код:
dispatch ref "vm_start"
(ErlTuple [ErlBinary "user", ErlInt userId])
inputV = case fromErl inputV of
Nothing -> invalidTask
Just (i :: VMStartTask) -> do
... -- Process request
dispatch ref "vm_start" _user _input = invalidTask
30 / 36
31. . TwiligthSparkle: Контроль ошибок
Прерывание выполнения подобно ErrorT трансформеру
Отдельные типы для каждого вида ошибок
Требование явного декларирования списка возможных
ошибок
instance AllowError source VMStartTask () VMNotFound
instance AllowError source VMStartTask () VMIsAlreadyRunning
Пока нет, но хочется контроль декларированных и не
вызываемых ошибок
31 / 36
32. . TwiligthSparkle: Барьеры
Существует необходимость отката изменений в случае
ошибок
Барьеры устанавливаются после изменения, для которого
требуется откат и выполняются в случае возникновения
ошибки
vm <- createVm
barrier $ destroyVm vm
disk <- createDisk
barrier $ destroyDisk disk
error "Any error"
Технически реализовано как [TS source input result ()] внутри
TVar контекста ReaderT
32 / 36
33. . TwiligthSparkle: Persistent ORM
Первая версия не использовала ORM
vm@(VM { vmUuid, vmTemplate }) <-
fetch VMCollection [ "id" =: iVmId ]
Регулярно возникали опечатки в названиях полей, в
передаваемых данных
Для Хаскеля нет рабочих альтернативных ORM кроме
persistent
vm@(VM { vmUuid, vmTemplate }) <- fetch [ VmId ==. iVmId ]
Пришлось использовать патченную версию
persistent-mongodb, так как модель хранения отличается от
подразумеваемой разработчиками
33 / 36
34. . TwiligthSparkle: Проблемы при разработке
Space leaks
Очень трудно найти источник проблемы при большом объёме
кода
Не хватает некоторых пакетов на hackage, либо не
устраивает их состояние
Написали библиотеку для работы с ETF
Стали поддерживать библиотеки bson и mongoDB
Вероятно, более высокий порог вхождения
Тем не менее в проект, кроме ядра, успешно пишут
программисты без какого-либо функционального бэкграунда
34 / 36
35. . TwiligthSparkle: Выводы
Заметно упало количество не логических ошибок, например:
Параметризованные идентификаторы, например (UUID VM),
не допускают их использование для не VM объектов
Отдельные типы для различных семантически данных,
например DiskSize
Template Haskell — позволяет удобно решать проблемы, но
катастрофически плохо читается
Использовать cabal-dev — очень хорошая идея
35 / 36