Рельсы прекрасный инструмент, но в некоторых ситуациях они не справляются.
В этом докладе рассказывается о таких ситуациях и одном из вариантов решения
Презентация с конференции "Город IT"
Томск, 19 ноября 2016 года.
Андрей Аксёнов, ведущий разработчик Unigine.
Доклад: «С одним плюсом».
— К чему надо стремиться, разрабатывая на C++ (и не только)?
— Как писать элегантно на C++’03 и что делать с новыми стандартами?
— Как на C++ делать не надо?
— Об идеальном коде и Идеальной Архитектуре.
Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Ai...Unigine Corp.
Иван Авдеев, программист, 2ГИС (Новосибирск).
Расскажу о демосцене с картинками:
- Лайв-экшн на шейдерах
- Лекция про демомейкинг-сайзкодинг
- Демошоу-плейлист
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотекPython Meetup
"SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек", Алексей Черкес
Кратко рассказано о том, что такое биндинг и Pуthon c API. Краткий обзор средств биндинга для Python. SWIG: что такое, зачем нужен, особенности, схема работы утилит, порядок запуска и сборки, принципы работы, как происходит сопоставление объектных моделей С++ и целевого языка. Примеры на Python и C#. Опыт применения, плюсы/минусы.
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...Ontico
Сфера финансовых приложений и трейдинга выдвигает особые требования к системам обработки данных: ультракороткие задержки, конкурентные обновления (в т.ч. из разных процессов), репликация высокочастотных обновлений.
Существовавшие открытые key-value хранилища не справлялись, поэтому мы сделали свое — Chronicle Map.
В докладе я отвечу на вопросы:
+ Почему бывает эффективнее разбить систему, работающую с общим состоянием, на несколько отдельных процессов?
+ Зачем вам может захотеться распилить JVM на несколько частей?
+ Как добиться от key-value хранилища медианной latency меньше 1 микросекунды?
+ Как сделать репликацию, если она упирается в пропускную способность сети из-за слишком частых обновлений?
Развею миф о том, что Java — это медленно :)
Также, в докладе будет сравнение Chronicle Map с redis, one-nio и ConcurrentHashMap.
Доклад Кулагина И.И., Пазникова А.А., Курносова М.Г. "Оптимизация информационных обменов в параллельных PGAS-программах" на 3-й Всероссийской научно-технической конференции «Суперкомпьютерные технологии» (СКТ-2014)
29 сентября – 4 октября 2014 г., с. Дивноморское
ПВТ - весна 2015 - Лекция 7. Модель памяти С++. Внеочередное выполнение инстр...Alexey Paznikov
ЛЕКЦИЯ 7. Модель памяти С++. Атомарные операции. Внеочередное выполнение инструкций. Барьеры памяти. Семантика захвата-освобождения
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...corehard_by
Все мы знаем, что компиляторы в настоящее время достаточно умные. И нам как программистам зачастую не нужно думать о каких-то незначительных оптимизациях - мы полагаемся на оптимизации компилятора. Что ж, настало время выяснить, действительно ли настолько компиляторы умны и узнать, в каких местах программист всё же (может быть) умнее.
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.
Что такое REPL, как он устроен и какие крутые возможности в нём заложены. Поговорим о выполнении кода в REPL и о том как работает автокомплит в динамических языках. Ответим на вопрос что такое vm.runInContext, перехватим парочку промисов, сделаем вывод результатов действительно приятным и даже узнаем как подгрузить нужные модули и не подать виду. В заключение рассмотрим потрясающие возможности, которые даёт нам инфраструктура npm и как это всё можно использовать в работе.
Доклад ориентирован на тех, кому небезынтересен мир Node.js, но будет доступен также и более широкому кругу JS-разработчиков. Надеюсь, для кого-нибудь этот доклад станет очередной ступенькой в изучении любимого языка.
Опыт разработки, отладки и внедрения системы горячего резервирования торговой...Ontico
HighLoad++ 2017
Зал «Сингапур», 8 ноября, 12:00
Тезисы:
http://www.highload.ru/2017/abstracts/3035.html
- "Горячий" резерв, что это и зачем это нужно? Всем ли нужен?
- Почему Московская Биржа решила это реализовывать.
- Классические архитектуры построения горячего резерва, обзор наработок.
- Почему потребовалось разрабатывать свой алгоритм. (Биржа должна быть максимально доступна, даже если алгоритм думает, что лучше, вообще, все прекратить на сегодня...).
...
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.
Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Ai...Unigine Corp.
Иван Авдеев, программист, 2ГИС (Новосибирск).
Расскажу о демосцене с картинками:
- Лайв-экшн на шейдерах
- Лекция про демомейкинг-сайзкодинг
- Демошоу-плейлист
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотекPython Meetup
"SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек", Алексей Черкес
Кратко рассказано о том, что такое биндинг и Pуthon c API. Краткий обзор средств биндинга для Python. SWIG: что такое, зачем нужен, особенности, схема работы утилит, порядок запуска и сборки, принципы работы, как происходит сопоставление объектных моделей С++ и целевого языка. Примеры на Python и C#. Опыт применения, плюсы/минусы.
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...Ontico
Сфера финансовых приложений и трейдинга выдвигает особые требования к системам обработки данных: ультракороткие задержки, конкурентные обновления (в т.ч. из разных процессов), репликация высокочастотных обновлений.
Существовавшие открытые key-value хранилища не справлялись, поэтому мы сделали свое — Chronicle Map.
В докладе я отвечу на вопросы:
+ Почему бывает эффективнее разбить систему, работающую с общим состоянием, на несколько отдельных процессов?
+ Зачем вам может захотеться распилить JVM на несколько частей?
+ Как добиться от key-value хранилища медианной latency меньше 1 микросекунды?
+ Как сделать репликацию, если она упирается в пропускную способность сети из-за слишком частых обновлений?
Развею миф о том, что Java — это медленно :)
Также, в докладе будет сравнение Chronicle Map с redis, one-nio и ConcurrentHashMap.
Доклад Кулагина И.И., Пазникова А.А., Курносова М.Г. "Оптимизация информационных обменов в параллельных PGAS-программах" на 3-й Всероссийской научно-технической конференции «Суперкомпьютерные технологии» (СКТ-2014)
29 сентября – 4 октября 2014 г., с. Дивноморское
ПВТ - весна 2015 - Лекция 7. Модель памяти С++. Внеочередное выполнение инстр...Alexey Paznikov
ЛЕКЦИЯ 7. Модель памяти С++. Атомарные операции. Внеочередное выполнение инструкций. Барьеры памяти. Семантика захвата-освобождения
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...corehard_by
Все мы знаем, что компиляторы в настоящее время достаточно умные. И нам как программистам зачастую не нужно думать о каких-то незначительных оптимизациях - мы полагаемся на оптимизации компилятора. Что ж, настало время выяснить, действительно ли настолько компиляторы умны и узнать, в каких местах программист всё же (может быть) умнее.
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.
Что такое REPL, как он устроен и какие крутые возможности в нём заложены. Поговорим о выполнении кода в REPL и о том как работает автокомплит в динамических языках. Ответим на вопрос что такое vm.runInContext, перехватим парочку промисов, сделаем вывод результатов действительно приятным и даже узнаем как подгрузить нужные модули и не подать виду. В заключение рассмотрим потрясающие возможности, которые даёт нам инфраструктура npm и как это всё можно использовать в работе.
Доклад ориентирован на тех, кому небезынтересен мир Node.js, но будет доступен также и более широкому кругу JS-разработчиков. Надеюсь, для кого-нибудь этот доклад станет очередной ступенькой в изучении любимого языка.
Опыт разработки, отладки и внедрения системы горячего резервирования торговой...Ontico
HighLoad++ 2017
Зал «Сингапур», 8 ноября, 12:00
Тезисы:
http://www.highload.ru/2017/abstracts/3035.html
- "Горячий" резерв, что это и зачем это нужно? Всем ли нужен?
- Почему Московская Биржа решила это реализовывать.
- Классические архитектуры построения горячего резерва, обзор наработок.
- Почему потребовалось разрабатывать свой алгоритм. (Биржа должна быть максимально доступна, даже если алгоритм думает, что лучше, вообще, все прекратить на сегодня...).
...
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.
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовYandex
В докладе речь пойдёт о языке Go. Вячеслав расскажет о внутреннем устройстве языка (структуре, оптимизации, сборщике мусора и т.д.), о том, как и почему Go используют в Яндексе и что о нём говорят разработчики на С++. Отдельно Вячеслав остановится на многопоточном программировании и особенностях отладки и профилирования в Go.
Highload++2013: TopGun - архитектура терабитной платформы DPILeonid Yuriev
Презентация с конференции HighLoad-2013 об архитектуре новой DPI платформы Петер-Сервис.
http://www.highload.ru/2013/abstracts/1178.html
Представлен обзор архитектуры многоцелевой DPI-платформы, на основе которой могут строиться как "шпионские" приложения класса СОРМ/PRISM, так и коммерческие системы PCEF/TDF (Traffic Shaping), безопасного Интернета (интеллектуальная фильтрация содержимого), таргетирования рекламы и т. д. К особенностям рассматриваемого решения можно отнести мультитерабитное масштабирование, способ балансировки, обработку "роем" (Swarm Intelligence) и аварийного восстановления (failover) посредством репликации конечных автоматов.
Roadmap:
- offtopic: кому и зачем нужен DPI?
- offtopic: законность и морально-этические вопросы.
- на какую "луну" нужно сесть, что мы хотим сделать?
- распределение трафика за счет использования коммутаторов и MAC rewrite.
- роевой интеллект (Swarm Intellegence) для управления балансировкой и обработкой данных.
- репликация конечных автоматов (виртуальных микромашин).
- распределенное "Табло" как оперативное хранилище с элементами key-value и eventual consistency, lockfree в shared memory.
- транспортный фасад, унифицирующий DPDK, netmap, Infiniband (RDMA), 0mq и zerocopy и lockfree обмен через shared memory.
F# - функциональный язык «новой» волныKiev ALT.NET
* Функциональные языки - как ответ на новые тенденции в развитии аппаратного обеспечения.
* F#. История. Идеология, концепции, возможности.
* ФП – холодный старт. Миграция с императивных конструкций на функциональные.
* Основные механизмы для построения высоконадежных, масштабируемых, распределенных систем.
* Примеры использования Async, Mailbox message processing.
Машинное обучение - это не только веб-сервисы на сверхпроизводительных TPU. В реальных условиях может потребоваться возможность применять ML-модели на конечных устройствах.
Например, мобильное приложение, которое должно работать в оффлайн, или Enterprise-сервис, который работает в закрытом контуре.
При этом не всегда есть возможность вместе с моделью внедрить специализированное оборудование и приходится запускаться на чем есть.
В этом докладе на примере одной конкретной модели машинного зрения я покажу, как её запустить:
- в облаке на GPU;
- в браузере клиента;
- на мобильном устройстве;
- на ноутбуке без видеокарты;
- на микросхеме за $10.
Покажу, какой trade-off требуется в каждом случае и что происходит с производительностью и качеством.
2. Плана не будет!
Причины:
- невозможно впитать язык за два часа, надо
начать на нем писать
- невозможно хорошо рассказать о языке за
два часа и при этом так, чтобы ни у кого не
болела голова
- язык — это просто средство выражения
управления чем-либо, без предметной области
его обсуждать скучно и бесполезно
Скажите «Спасибо, кэп!»
3. Что будет
Поговорим за задачи
Посмотрим, каким боком тут поможет Э
Накачаемся кучей фактов
...в надежде, что потом это пригодится в
реальной жизни
OMG!!! Это же план!
4. Поговорим за «тяжелые приложения»
• термина highload не существует, его придумал
Бунин
• буржуины оперируют другими терминами
• High Avaibility Systems (HA) — это любые системы
с 24/7 и кучей девяток в конце (сюда же и вэбня);
• High Performance Computing (HPC) — это уже
про вычисления, съедающие ресурсы без остатка;
• наверное, есть что-то еще... но нам пока хватит
5. Поговорим за HPC
- много потолков (CPU bound, memory bound,
IO bound);
- предметная область — непростая;
- область решений — еще более непростая;
- цель: максимальная производительность,
минимальная задержка;
- 24/7 — как обычно;
- выжать из железа все возможное (цена +1U
может быть больше стоимости времени разработчика на
оптимизацию).
Примеры: HFT, OLAP, video encoding, DPI.
6. Своя особая атмосфера
● ядро (kernel), брысь с моего ядра (core) — cpu
affinity... но нам нужны таймеры и системные вызовы;
● память (преаллокация и локальность, huge
pages, NUMA, пулы структур (слябы), zero
copy, DMA, дружественность кешу);
● выполнение (считаем такты, особенности
компилятора и прыжки в ассемблер,
неблокирующие алгоритмы, минимум
системных вызовов, контролируем
вымывание кеша, помогаем предсказателю
ветвления);
...
7. Своя особая атмосфера - 2
...
● контр-интуитивные знания и опыт (будет ли аппаратно
подпружиненная функция быстрее самописной,
HyperThreading — плохо, и т.д.);
● NIH — это нормально (переписанное и написанное
самостоятельно будет наверняка быстрее и лучше
вписываться в экосистему проекта);
● ЗБЧ. Когда операция повторяется миллиард раз,
выигрыш в миллисекунду приносит неиллюзорный
бенефит;
● языки: С/C++ с подпорками и asm {} (без вариантов);
● спецоборудование (CUDA/OpenCL видео-карты, Xeon
Phi, TileGX, FPGA).
8. А что вы будете делать, если дойдете до конца?
Упираемся головой в одну из границ?
- рост вглубь (смотрим что еще подкрутить);
- рост вширь (добавляем ресурсов).
2 CPU x 8 core + 348GB RAM + 6 x 4Tb— и пока все, что
можно упихать в 1U.
Можно — больше, но это уже свое железо, свои патчи к
ядру, свое производство, свой саппорт, в общем — ну его
нафик...
Остается только одно — ставить еще одну железку. И еще
одну... И еще...
9. Мухи от котлет
- этим безобразием надо как-то управлять
(сообщать конфигурацию)
- за этим безобразием надо как-то следить
(собирать статистику)
Application
Control plane
Data plane
10. А теперь немного уличной магии...
Если с Data plane все ясно, то с Control plane мы можем
развлекаться:
● можно использовать язык высокого уровня;
● легкий FFI с языком data plane;
● сетевая прозрачность/простота;
● легкость интеграции.
● можно использовать сторонние
библиотеки/GC/кеды/смузи;
● можно (но не нужно) падать и терять данные (главное
— не уронить data plane при этом)
● при этом не мешало бы горячая смена кода, если вдруг
понадобятся бантики (а они понадобятся).
11. И где тут Эрланг?
Легкие процессы, нет классической смены
контекста и ее тяжести;
Непростой, но вполне понятный FFI с Си (порты,
NIF, C node);
Сетевая прозрачность и распределенный
характер;
Иммутабельность и GC;
Интроспекция и легкое чтение кода;
24/7: let it fall, hot code reload;
Интегрируемость (ASN.1, куча сетевых сервисов и binary
pattern matching).
12. Берем Э, ставим в продакшен … PROFIT!!
*
* - на самом деле нет.
Нужно еще понимание, что там под капотом:
- OTP (Open Telecom Platform)
- не OTP (bad idea but embeed!)
.erl + .hrl
erlc
.app
.beam
.b.ebaemam
ERTS EPMD
node@localhost
EPMD
EPMD
EPMD
13. Декларативность и pattern matching
- программа не последовательность действий,
а набор правил
- какое правило сработало — то и выполняем
- т.е. такой большой неявный switch/case
(clause, слоз, набор правил)
Соответствие образцу (pattern matching) +
присвоение (про иммутабельность позже):
- полное
{ok, Result} = {ok, [1,2,3]} | {ok, undefined}
- частичное
{error, _} = {error, notfound} | {error, <<123, 255>>}
- с допусловиями (guards)
{ok, IP} where IP =/= {127, 0, 0, 1}
14. Иммутабельность и GC
1> P = 1.
1
2> P = 2.
** exception error: no match of right hand side value 2
vs.
irb(main):001:0> a = 1
=> 1
irb(main):002:0> a = 2
=> 2
irb(main):003:0> print a
2=> nil
+ все версии значения переменной;
+ чужой код не подменит значения;
+ warnings рулят! (возникают
зачастую из-за ошибки);
+ простота GC (собираем по выходу
за границы видимости).
- работа с большими списками и
кортежами — ад копирования и
фрагментация памяти;
- разработчику трудно
адаптироваться;
- имена кончаются, а нумерация
усложняет понимание и написание;
- можно наступить в утечку.
15. Легкие процессы? Wut?
- process vs. threads vs. green threads vs. erlang processes
- не процесс, но объект, инкапсулирующий состояние
(ObjC)
- OTP — инфраструктура над процессами (супервизоры,
серверы, конечные автоматы, события, мониторы)
ppaarreenntt инициализация receive
State
spawn(Fun)
Pid = <0.0 10>
{...}
State
{...}
{...}
State
Fun
309 w (heap: 233)
Pid ! Message
mailbox
16. Let if fall, hot code reload..
- let it fall =/= можно писать с ошибками
- let it fall =:= «ошибки неизбежны, подстрахуемся на их счет»
Страховка: OTP-инфраструктура, супервизоры, мониторы
- немного о релизах
- горячее обновление: останавливаем мир, трансформируем
состояние, меняем код, запускаем мир
- система даже не заметит
- и можно делать по сети
- минусы: надо делать аккуратно, надо следить за версиями
структур и писать трансформеры
- практика: все предпочитают перезагрузится, для вэба это
некритично
18. Интегрируемость
Что уже есть и прям можно брать:
- SNMP, SSH, SSL, telnet, ASN.1 — в комплекте;
- LDAP, HTTP (classic + WS), XMPP, AMQP — стороннее;
- адаптерты к БД (epgsql, eredis, sqlite) — полно;
- ZMQ, GTK, OpenGL — и это тоже, да.
Через ports и NIF можно подпихнуть что угодно:
- библиотеки;
- unix pipes;
- shared memory.
19. Фу-фу-фу
- корявый синтаксис (надо привыкнуть);
- особенности GC и масштабирования;
- небыстрая математика;
- проблема первого пня.
20. Пссс... Хочешь немного кода?
connect(_Con) -> undefine.
msg(Con, <<"I">>, undefine) -> add(Con);
msg(Con, <<"L:", Nick/binary>>, undefine) ->
case enter(Con, Nick) of
{ok, UState} -> UState;
error -> undefine
end;
msg(Con, <<"P">>, S) when S =/= undefine -> pub(Con, S);
msg(Con, <<"S">>, S) when S =/= undefine -> stop(Con, S);
msg(Con, <<"C:", Msg/binary>>, S) when S =/= undefine -> chat(Con, S, Msg);
msg(_, _, S) -> S.
close(Con, S) -> rm(Con, S).
21. Нафик код, архитектура лучше.
Что нужно сделать, чтобы передать статистику работы data plane в
control plane?
Варианты:
1. data plane сам формирует статистику и передает ее в control plane
по шине сообщений;
DP CP
2. control plane сам забирает статистику из разделяемой памяти data
plane;
DP CP
3. data plane готовит статистику по запросу из control plane.
DP CP DP CP