SlideShare a Scribd company logo
Язык Rust для высоконагруженного
сетевого сервиса - быстрый старт и
стремительный полет
Александр Сербул
Head of Data Science, ООО «1С-Битрикс»
О чем поговорим
Делимся опытом. Никакой рекламы и философских выводов:
• Что происходит в IT и языках программирования «на самом деле»
• История проекта отправки push-уведомлений Битрикс24
• Как мы развивали архитектуру проекта: от bash-forks до
Rust/Tokio
• Одновременно поговорим о высоконагруженной работой с сетью
в php, java, python, nodejs, golang и почему мы взяли Rust
• Как быстро понять Rust и его сравнение с другими ЯП
• Как начать решать задачи на Rust как можно быстрее, Cargo
• Подводные камни в Rust и способы их преодоления
• Выводы, рекомендации для будущих проектов и нагруженных
сетевых архитектур
Что происходит
в IT и языках
программирования
«на самом деле» -
и что подарил миру Rust?
Как все начиналось…
• Архитектура фон Неймана и машина
Тьюринга
• Процедурные языки программирования
• Объектно-ориентированные языки
программирования
• Функциональные языки
программирования
• Гибридные языки программирования
Все не заладилось с самого начала…
Архитектура фон Неймана
Машина Тьюринга
Универсальный вычислитель…
Машина Тьюринга
Теорема Гёделя о неполноте…
Современный код
cовременный Код
Управление сложностью
- инкапсуляция (все лишнее – скрыто
поглубже)
- абстракция (сложное становится простым,
фасады)
- иерархии абстракций
- большое количество автотестов
Haskell: “Quicksort”
А могло же быть так: просто и сексуально
Эдсгер Дейкстра
Чем все закончилось…
• Человечество – просиживает в соцсетях, в онлайн-играх и на
сайтах для взрослых
• Настоящее программирование – требует сильного
напряжения ума и, желательно, знания математики
• Взрослые люди – не хотят учиться, а это нужно для успеха в IT
• Языки программирования – создаются методом копирования
идей, борьба за разработчиков
• Думать и учить логически строгие ЯП типа Haskell - никто не
хочет
Войны технологий – усугубляют сложность
• Вместо сотрудничества – конкуренция на рынке
• Вместо «развития» языков (Scala, Rust), отмечается
«межвидовая мутация» (Node.js) и параллельное
изобретение велосипедов
• Масштабные религиозные войны: Java vs C#, PHP vs Python vs
Ruby
• Войны фреймворков: Angular vs React JS
• “Зачем делать просто, если можно сложно?”
Alexandr Serbul "The Rust language for a high-load network service - a quick start and fast flight"
«Шовинизм» в программировании
•Вы писали 5 лет на PHP… Но почему, за деньги
чтоль? – на работу не беру
•Вы только байтики умеете на C гонять? – в нашу
компанию вы не подходите
•Только Java/Spring, только своих… - и пофиг на
скорость, качество, результат
•С#/Windows forever
•Гошечка, милая гошечка…
Докладчик сошел с ума 
Все свободны.
Спасибо за внимание!
Выразительность языков программирования
С – переносимый
ассемблер
С++ - много мелких тонкостей и
«дыр», большое и противоречивое
наследство
Ассемблер
Java
Erlang
C#Scala Kotlin
Haskell
Akka/JVM
F#
Go
PHP
Groovy
Python
Ruby
Java ScriptLua
Alexandr Serbul "The Rust language for a high-load network service - a quick start and fast flight"
PHP
Выразительность языков программирования
С – переносимый
ассемблер
С++ - много мелких тонкостей и
«дыр», большое и противоречивое
наследство
Ассемблер
Java C#Scala Kotlin
Groovy
Python
Ruby
Java ScriptLua
Go
Rust Erlang
Haskell
Akka/JVM
F#
Выразительность в Rust
• Zero-cost (!) абстракции: итераторы, фильтры, мап-редьюсы …
• Автовывод типов
• Нет NULL, даже как концепции
• Алгебраические типы данных (ADT)
• Надежный pattern-matching по ADT
• Защита от «опасных» операций с массивами, числами (переполнения …);
“panic!”
• Компилятор дает надежные гарантии безопасности при работе с памятью
и автоматически освобождает ее – нет сборщика мусора
• Очень мощный и строгий макро-язык
• Нельзя напороться на «Undefined Behavior» (кроме как в unsafe
режиме, но это нужно прямо постараться)
Alexandr Serbul "The Rust language for a high-load network service - a quick start and fast flight"
Управление памятью
С
С++
Ассемблер
Java
Erlang
PHP
C#Scala
Kotlin
Groovy
Haskell
Python Ruby
Java ScriptLua
Akka/JVM
F#
Go
Alexandr Serbul "The Rust language for a high-load network service - a quick start and fast flight"
Управление памятью
С
С++
Ассемблер
Java
Erlang
PHP
C#Scala
Kotlin
Groovy
Haskell
Python Ruby
Java ScriptLua
Akka/JVM
F#
Go Rust
Управление памятью в Rust
•Владение объектами (ownership)
•Передача объектов между функциями (move) и
автоматический вызов «деструкторов» когда «пора»
•Заимствование объектов (borrowing) при передаче
по ссылке, в функции, ссылочная целостность
•Slices, lifetimes
•No dangling references
Как быстро понять Rust
и его сравнение
с другими ЯП
Философии
• Python
• JavaScript/Node.js
• TypeScript
• PHP
• Java/C#
• Scala/Kotlin
• C/C++
• Haskell/ML
• Rust
Как набить руку в Rust
• “Rust by example”: https://doc.rust-lang.org/stable/rust-by-example/
• “The Book”: https://doc.rust-lang.org/book/
• “The Rustonomicon”: https://doc.rust-lang.org/nomicon/
Первые 2 ссылки лучше пройти с руками в консоли 2-3 раза и
потом все открывается и дальше легко.
Самое непривычное для понимания: аффинные типы данных,
алгебраические типы данных. Полезен опыт изучения FP.
Последняя ссылка самая сложная и тяжелая, но ее можно … не
читать 
Владение – копирование запрещено
Владение – копирование разрешено
Заимствование
Аффинные типы данных - проникли гораздо
глубже
• Концепции: ownership, move, borrowing – активно
применяются в многопоточном программировании и в
других местах (итераторы и др.)
• Забыть освободить Mutex – невозможно, не скомпилируется

• Поработать с инвалидированным итератором – невозможно,
не скомпилируется 
• Появилось больше времени на решение бизнес-задач
Начало работы с Rust
• «Непробиваемый» компилятор
• Rust-plugin IntelliJ IDEA
Сборка бинарника
Менеджмент проекта, toolchain
• Cargo.toml
• Cargo.lock
• “cargo build --release”
• “rustup update”
Автотестирование
• Unit tests
• Integration tests
• “cargo test”
Unsafe Rust
И да, сторонние пакеты из Cargo могут содержать блоки «unsafe» и вызывать неопределенное поведение, но это случается на
порядки реже, чем в связках python/c++ и т.п.
Итоги «плюшек» в Rust
• Пишешь быстро, как на python/php – автовывод типов
• Очень строгая типизация без NULLs с ADT/PM* – а не как
структурная в Golang/TypeScript или слабая динамическая в
PHP/JS или «строгая»-динамическая в Python
• Мощные гарантии компилятора: безопасная работа с
памятью, авто-очистка памяти
• Нет неопределенного поведения и прочих сюрпризов –
«безопасный» язык, как Python/PHP**
• Скорость как у C/C++!
* - алгебраические типы данных/сопоставление по шаблону
** - сюрпризы возможны в unsafe-режиме языка, но их на порядки меньше
Как мы развивали
архитектуру проекта:
от bash-forks до rust/tokio
Пуши - технологии
• Apple Push Notification service (APNs) - June 17, 2009; >=
iOS 3.0, >= OS X v10.7 (Lion); max message - 256 B
https://developer.apple.com/notifications/
• Google Cloud Messaging for Android (GCM) –
June 27, 2012; >= Android 2.2; max message - 4 KB
http://developer.android.com/google/gcm/
ранее - Android Cloud to Device Messaging (C2DM)
APNS
Идеи в основе архитектуры
1. Провайдер регистрируется в APNs, GCM и получает
клиентский SSL/TLS-сертификат (ключ и т.п.)
2. Провайдер обслуживает запросы многих мобильных
приложений и идентифицирует себя в APNs, GCM с
помощью сертификата
• Нам нужно поддерживать 10к – 100к и больше мобильных
приложений
Провайдер 1,
Приложение
Провайдер N,
Приложение
«Супер» Провайдер
Клиентские SSL/TLS
сертификаты, ключи
APNS - протокол
• Бинарный протокол
• 2 формата: простой и расширенный
• Пишем/читаем SSL/TLS сокет
• Возвращает инфу о невалидных токенах устройств
GCM - протокол
• JSON/plain text
POST -> https://android.googleapis.com/gcm/send
Запрос:
Content-Type:application/json
Authorization:key=*aSyB-1uEai2WiUapxCs2Q0GZYzPu7Udno5aA
{
"registration_ids" : ["APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx..."],
"data" : {
...
},
}
Ответ:
{ "multicast_id": 108,
"success": 1,
"failure": 0,
"canonical_ids": 0,
"results": [
{ "message_id": "1:08" }
]
}
Универсальный транспорт
Пакет BCM
Октеты в base64.
TWFuIGlzIGRpc3;2;NoZWQsIG5vdC;1;
ZXZlcmFuY2Ugb2YgZ…;3;…
[0-9]{1} – переключатель
формата: GCM, APNs …
Push-сообщение
Raw bytes, Json, txt, xml, …
SSL/TLS
клиентский
сертификат
APNS,
Ключ GCM
nginx
Идентификация и проксирование
сообщения в SQS
PHP-процесс
Long Pooling, получение и парсинг сообщения,
отправка Push на устройство
PHP-процесс
Long Pooling, получение и парсинг сообщения,
отправка Push на устройство
PHP-процесс
Long Pooling, получение и парсинг сообщения,
отправка Push на устройство
nginx
Идентификация и проксирование
сообщения в SQS
nginx
Идентификация и проксирование
сообщения в SQS
Итоговая архитектура (2013)
Недостатки архитектуры
• Синхронная работа с сокетами при отправке push-
уведомлений в GCM/APNs
• За счет скриптовых языков – высокая нагрузка на CPU
1) Итерация 1: PHP форкает системный процесс отправки push
2) Итерация 2: PHP начал работать с сокетами сам
Нагрузка:
до 1000 SQS-сообщений в секунду
до 1000-15 000 отправляемых пуш-уведомлений в секунду
Нагрузка, железо
Нагрузка:
до 1000 SQS-сообщений в секунду
до 1000-15 000 отправляемых пуш-уведомлений в секунду
• На PHP кластер жил за 6-8 серверах с 16-32 CPU и 16-32 ГБ ОЗУ и нагрузка
постоянно росла
• На Rust - нагрузку пушей Битрикс24 держит один сервер 4 CPU 8 ГБ ОЗУ
(процесс, он один, занимает 3.5 ГБ в ОЗУ)
TCP - не кешируются, ключи на диске - не кешируются. Это еще сильнее
снизит нагрузку.
Проект на Rust - обзор
• Стандартные зависимости в Cargo
• Сетевая асинхронная “монадическая” библиотека с корутинами – Tokio
• Немного танцев с бубнами с TLS, но исходники помогли быстро
• При росте нагрузки резко начались segfaults, но быстро полечились через
увеличение ulimit ОС, видимо, наступили на ограничение стека на
процесс и наступала нирвана
• Никаких проблем, падений, анализов coredump
• Никаких утечек памяти, Rust использует стандартные: malloc или jemalloc
или можно выбрать
• Никаких тюнингов GC и нагрузок от сборщика мусора 
Проект на Rust - обзор
Проект на Rust - тесты
• Сразу пишутся тесты
• За счет ADT/PM, отсутствия NULLs, Enums
– тесты больше занимаются делом
• В самом языке много вкусных
функциональных библиотек с Zero-cost
abstraction (итераторы, диапазоны,
фильтры, мап-редьюсы)
• В Tokio тоже монадически-
функциональный подход
Проект на Rust - ADT
Проект на Rust – Pattern Matching
Проект на Rust – присваивание из PM
Проект на Rust – “Option” monad
Проект на Rust – TCP monads
Проект на Rust – monadic network error handling
Zero-cost - функциональщина
ООП? Traits!
• Развитого ООП, как в
Java/C# - нет и не
планируется. А зачем?
• Структурки и методы,
навешанные на них
• Но за счет строгой
типизации, ADT/PM,
аффинных типов и
сильных гарантий
компилятора – этого
хватает
А что если взять …
•Node.js
•Python – корутины
•Golang - горутины
•Java/Netty
•Erlang
•Haskell
•С++
Итоги
• Rust только кажется сложным. За сложностью скрывается строгость,
простота и элегантность
• Язык привносит несколько очень мощных и непривычных концепций,
направленных на надежное программирование, в т.ч. системное
• Компилятор дает очень высокие гарантии по работе с памятью и многие
другие (переполнения, доступ за пределы массива …) и его нужно
«преодолевать»
• На языке легко писать, причем быстро и сразу без ошибок
• Алгебраические типы данных, строгий pattern-matching и отсутствие NULLs
хорошо структурируют код и сильно ускоряют разработку
• В Cargo «из коробки» много готовых модулей, бери и используй
• Скорость решения сравнима с C, потребление ОЗУ без сборщика мусора
минимально.
Спасибо за
внимание!
Вопросы?
Александр Сербул
@AlexSerbul
Alexandr Serbul
serbul@1c-bitrix.ru
Ad

More Related Content

What's hot (20)

Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Ontico
 
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
Ontico
 
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Ontico
 
Алексей Фомкин, Практическое применение Web Workers
Алексей Фомкин, Практическое применение Web WorkersАлексей Фомкин, Практическое применение Web Workers
Алексей Фомкин, Практическое применение Web Workers
Aleksey Fomkin
 
Как собирать gps треки раз в секунду, экономя траффик
Как собирать gps треки раз в секунду, экономя траффикКак собирать gps треки раз в секунду, экономя траффик
Как собирать gps треки раз в секунду, экономя траффик
Andrew Minkin
 
Мой маленький уютный PaaS / Илья Беда (bro.agency)
Мой маленький уютный PaaS / Илья Беда (bro.agency)Мой маленький уютный PaaS / Илья Беда (bro.agency)
Мой маленький уютный PaaS / Илья Беда (bro.agency)
Ontico
 
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)
Ontico
 
Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)
Ontico
 
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Ontico
 
Консольные приложения на Go
Консольные приложения на GoКонсольные приложения на Go
Консольные приложения на Go
Andrey Smirnov
 
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
Ontico
 
Антон Турецкий
Антон ТурецкийАнтон Турецкий
Антон Турецкий
CodeFest
 
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
AVITO. Решаем проблемы по мере их поступления. Стачка 2013AVITO. Решаем проблемы по мере их поступления. Стачка 2013
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
Roman Pavlushko
 
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Ontico
 
Нагруженный поиск на Sphinx
Нагруженный поиск на SphinxНагруженный поиск на Sphinx
Нагруженный поиск на Sphinx
Roman Pavlushko
 
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
OpenResty: превращаем NGINX в полноценный сервер приложений  / Владимир Прота...OpenResty: превращаем NGINX в полноценный сервер приложений  / Владимир Прота...
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
Ontico
 
Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Эффективная отладка репликации MySQL / Света Смирнова (Percona)Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Ontico
 
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...
Ontico
 
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Ontico
 
Архитектура поиска в Booking.com / Иван Круглов (Booking.com)
Архитектура поиска в Booking.com / Иван Круглов (Booking.com)Архитектура поиска в Booking.com / Иван Круглов (Booking.com)
Архитектура поиска в Booking.com / Иван Круглов (Booking.com)
Ontico
 
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Ontico
 
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
Ontico
 
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Ontico
 
Алексей Фомкин, Практическое применение Web Workers
Алексей Фомкин, Практическое применение Web WorkersАлексей Фомкин, Практическое применение Web Workers
Алексей Фомкин, Практическое применение Web Workers
Aleksey Fomkin
 
Как собирать gps треки раз в секунду, экономя траффик
Как собирать gps треки раз в секунду, экономя траффикКак собирать gps треки раз в секунду, экономя траффик
Как собирать gps треки раз в секунду, экономя траффик
Andrew Minkin
 
Мой маленький уютный PaaS / Илья Беда (bro.agency)
Мой маленький уютный PaaS / Илья Беда (bro.agency)Мой маленький уютный PaaS / Илья Беда (bro.agency)
Мой маленький уютный PaaS / Илья Беда (bro.agency)
Ontico
 
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)
Ontico
 
Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)
Ontico
 
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Ontico
 
Консольные приложения на Go
Консольные приложения на GoКонсольные приложения на Go
Консольные приложения на Go
Andrey Smirnov
 
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
Ontico
 
Антон Турецкий
Антон ТурецкийАнтон Турецкий
Антон Турецкий
CodeFest
 
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
AVITO. Решаем проблемы по мере их поступления. Стачка 2013AVITO. Решаем проблемы по мере их поступления. Стачка 2013
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
Roman Pavlushko
 
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Ontico
 
Нагруженный поиск на Sphinx
Нагруженный поиск на SphinxНагруженный поиск на Sphinx
Нагруженный поиск на Sphinx
Roman Pavlushko
 
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
OpenResty: превращаем NGINX в полноценный сервер приложений  / Владимир Прота...OpenResty: превращаем NGINX в полноценный сервер приложений  / Владимир Прота...
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
Ontico
 
Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Эффективная отладка репликации MySQL / Света Смирнова (Percona)Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Ontico
 
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...
Ontico
 
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Ontico
 
Архитектура поиска в Booking.com / Иван Круглов (Booking.com)
Архитектура поиска в Booking.com / Иван Круглов (Booking.com)Архитектура поиска в Booking.com / Иван Круглов (Booking.com)
Архитектура поиска в Booking.com / Иван Круглов (Booking.com)
Ontico
 

Similar to Alexandr Serbul "The Rust language for a high-load network service - a quick start and fast flight" (20)

Rust - GDG DevFest Siberia 2016
Rust - GDG DevFest Siberia 2016Rust - GDG DevFest Siberia 2016
Rust - GDG DevFest Siberia 2016
Nikita Baksalyar
 
CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...
CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...
CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...
CodeFest
 
Алексей Туля - А нужен ли вам erlang?
Алексей Туля - А нужен ли вам erlang?Алексей Туля - А нужен ли вам erlang?
Алексей Туля - А нужен ли вам erlang?
Minsk Linux User Group
 
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest
 
2017-03-26 01 Анна Тарасенко. Как устроен Web изнутри
2017-03-26 01 Анна Тарасенко. Как устроен Web изнутри2017-03-26 01 Анна Тарасенко. Как устроен Web изнутри
2017-03-26 01 Анна Тарасенко. Как устроен Web изнутри
HappyDev-lite
 
Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...
Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...
Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...
Ontico
 
Основные понятия связанные с разработкой ПО: просто о сложном. Лаабе Дмитрий.
Основные понятия связанные с разработкой ПО: просто о сложном. Лаабе Дмитрий.Основные понятия связанные с разработкой ПО: просто о сложном. Лаабе Дмитрий.
Основные понятия связанные с разработкой ПО: просто о сложном. Лаабе Дмитрий.
IT-Доминанта
 
игровая логика, проблемы и решения
игровая логика, проблемы и решенияигровая логика, проблемы и решения
игровая логика, проблемы и решения
Владимир Кожаев
 
GetDev.NET: Снова Эрланг
GetDev.NET: Снова ЭрлангGetDev.NET: Снова Эрланг
GetDev.NET: Снова Эрланг
Maxim Krentovskiy
 
Scripting languages
Scripting languagesScripting languages
Scripting languages
Lev Panov
 
Введение в Python и Django
Введение в Python и DjangoВведение в Python и Django
Введение в Python и Django
Taras Lyapun
 
Distributed systems
Distributed systemsDistributed systems
Distributed systems
Даниил Зайцев
 
Разработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервисаРазработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервиса
endeveit
 
Разработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервисаРазработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервиса
ITCrowd Almaty
 
BlackBox testing
BlackBox testingBlackBox testing
BlackBox testing
beched
 
SECON'2016. Бартунов Олег, Карьера в Open Source
SECON'2016. Бартунов Олег, Карьера в Open SourceSECON'2016. Бартунов Олег, Карьера в Open Source
SECON'2016. Бартунов Олег, Карьера в Open Source
SECON
 
Никита Вельмаскин - Интерпретатор или думаем над скриптовым движком для Ваше...
Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Ваше...Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Ваше...
Никита Вельмаскин - Интерпретатор или думаем над скриптовым движком для Ваше...
IT Share
 
C++ Core Guidelines
C++ Core Guidelines C++ Core Guidelines
C++ Core Guidelines
Sergey Zubkov
 
«Сетевые протоколы для веб разработчика — выжимаем максимум»
«Сетевые протоколы для веб разработчика — выжимаем максимум» «Сетевые протоколы для веб разработчика — выжимаем максимум»
«Сетевые протоколы для веб разработчика — выжимаем максимум»
Гузель Рахимова
 
Rust - GDG DevFest Siberia 2016
Rust - GDG DevFest Siberia 2016Rust - GDG DevFest Siberia 2016
Rust - GDG DevFest Siberia 2016
Nikita Baksalyar
 
CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...
CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...
CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...
CodeFest
 
Алексей Туля - А нужен ли вам erlang?
Алексей Туля - А нужен ли вам erlang?Алексей Туля - А нужен ли вам erlang?
Алексей Туля - А нужен ли вам erlang?
Minsk Linux User Group
 
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest
 
2017-03-26 01 Анна Тарасенко. Как устроен Web изнутри
2017-03-26 01 Анна Тарасенко. Как устроен Web изнутри2017-03-26 01 Анна Тарасенко. Как устроен Web изнутри
2017-03-26 01 Анна Тарасенко. Как устроен Web изнутри
HappyDev-lite
 
Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...
Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...
Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...
Ontico
 
Основные понятия связанные с разработкой ПО: просто о сложном. Лаабе Дмитрий.
Основные понятия связанные с разработкой ПО: просто о сложном. Лаабе Дмитрий.Основные понятия связанные с разработкой ПО: просто о сложном. Лаабе Дмитрий.
Основные понятия связанные с разработкой ПО: просто о сложном. Лаабе Дмитрий.
IT-Доминанта
 
игровая логика, проблемы и решения
игровая логика, проблемы и решенияигровая логика, проблемы и решения
игровая логика, проблемы и решения
Владимир Кожаев
 
GetDev.NET: Снова Эрланг
GetDev.NET: Снова ЭрлангGetDev.NET: Снова Эрланг
GetDev.NET: Снова Эрланг
Maxim Krentovskiy
 
Scripting languages
Scripting languagesScripting languages
Scripting languages
Lev Panov
 
Введение в Python и Django
Введение в Python и DjangoВведение в Python и Django
Введение в Python и Django
Taras Lyapun
 
Разработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервисаРазработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервиса
endeveit
 
Разработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервисаРазработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервиса
ITCrowd Almaty
 
BlackBox testing
BlackBox testingBlackBox testing
BlackBox testing
beched
 
SECON'2016. Бартунов Олег, Карьера в Open Source
SECON'2016. Бартунов Олег, Карьера в Open SourceSECON'2016. Бартунов Олег, Карьера в Open Source
SECON'2016. Бартунов Олег, Карьера в Open Source
SECON
 
Никита Вельмаскин - Интерпретатор или думаем над скриптовым движком для Ваше...
Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Ваше...Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Ваше...
Никита Вельмаскин - Интерпретатор или думаем над скриптовым движком для Ваше...
IT Share
 
C++ Core Guidelines
C++ Core Guidelines C++ Core Guidelines
C++ Core Guidelines
Sergey Zubkov
 
«Сетевые протоколы для веб разработчика — выжимаем максимум»
«Сетевые протоколы для веб разработчика — выжимаем максимум» «Сетевые протоколы для веб разработчика — выжимаем максимум»
«Сетевые протоколы для веб разработчика — выжимаем максимум»
Гузель Рахимова
 
Ad

More from Fwdays (20)

Від KPI до OKR: як синхронізувати продажі, маркетинг і продукт, щоб бізнес ре...
Від KPI до OKR: як синхронізувати продажі, маркетинг і продукт, щоб бізнес ре...Від KPI до OKR: як синхронізувати продажі, маркетинг і продукт, щоб бізнес ре...
Від KPI до OKR: як синхронізувати продажі, маркетинг і продукт, щоб бізнес ре...
Fwdays
 
"Demand Generation: How a Founder’s Brand Turns Content into Leads", Alex Her...
"Demand Generation: How a Founder’s Brand Turns Content into Leads", Alex Her..."Demand Generation: How a Founder’s Brand Turns Content into Leads", Alex Her...
"Demand Generation: How a Founder’s Brand Turns Content into Leads", Alex Her...
Fwdays
 
"Rebranding for Growth", Anna Velykoivanenko
"Rebranding for Growth", Anna Velykoivanenko"Rebranding for Growth", Anna Velykoivanenko
"Rebranding for Growth", Anna Velykoivanenko
Fwdays
 
"Must-have AI-tools for cost-efficient marketing", Irina Smirnova
"Must-have AI-tools for cost-efficient marketing",  Irina Smirnova"Must-have AI-tools for cost-efficient marketing",  Irina Smirnova
"Must-have AI-tools for cost-efficient marketing", Irina Smirnova
Fwdays
 
"Client Partnership — the Path to Exponential Growth for Companies Sized 50-5...
"Client Partnership — the Path to Exponential Growth for Companies Sized 50-5..."Client Partnership — the Path to Exponential Growth for Companies Sized 50-5...
"Client Partnership — the Path to Exponential Growth for Companies Sized 50-5...
Fwdays
 
"Building a Product IT Team in a Defense-Tech Company", Arthur Seletskiy
"Building a Product IT Team in a Defense-Tech Company", Arthur Seletskiy"Building a Product IT Team in a Defense-Tech Company", Arthur Seletskiy
"Building a Product IT Team in a Defense-Tech Company", Arthur Seletskiy
Fwdays
 
"Scaling Smart: GTM Strategies that Fuel Growth for Service IT Companies", V...
"Scaling Smart: GTM Strategies that Fuel Growth for Service IT Companies",  V..."Scaling Smart: GTM Strategies that Fuel Growth for Service IT Companies",  V...
"Scaling Smart: GTM Strategies that Fuel Growth for Service IT Companies", V...
Fwdays
 
"Pushy Sales Don’t Work: How to Sell Without Driving People Crazy", Aliona Ka...
"Pushy Sales Don’t Work: How to Sell Without Driving People Crazy", Aliona Ka..."Pushy Sales Don’t Work: How to Sell Without Driving People Crazy", Aliona Ka...
"Pushy Sales Don’t Work: How to Sell Without Driving People Crazy", Aliona Ka...
Fwdays
 
Performance Marketing Research для запуску нового WorldWide продукту
Performance Marketing Research для запуску нового WorldWide продуктуPerformance Marketing Research для запуску нового WorldWide продукту
Performance Marketing Research для запуску нового WorldWide продукту
Fwdays
 
"Scaling Product Mindset: From Individual Ideas to Team Culture", Oksana Holu...
"Scaling Product Mindset: From Individual Ideas to Team Culture", Oksana Holu..."Scaling Product Mindset: From Individual Ideas to Team Culture", Oksana Holu...
"Scaling Product Mindset: From Individual Ideas to Team Culture", Oksana Holu...
Fwdays
 
"AI-Driven Automation for High-Performing Teams: Optimize Routine Tasks & Lea...
"AI-Driven Automation for High-Performing Teams: Optimize Routine Tasks & Lea..."AI-Driven Automation for High-Performing Teams: Optimize Routine Tasks & Lea...
"AI-Driven Automation for High-Performing Teams: Optimize Routine Tasks & Lea...
Fwdays
 
"Constructive Interaction During Emotional Burnout: With Local and Internatio...
"Constructive Interaction During Emotional Burnout: With Local and Internatio..."Constructive Interaction During Emotional Burnout: With Local and Internatio...
"Constructive Interaction During Emotional Burnout: With Local and Internatio...
Fwdays
 
"Perfectionisin: What Does the Medicine for Perfectionism Look Like?", Manoil...
"Perfectionisin: What Does the Medicine for Perfectionism Look Like?", Manoil..."Perfectionisin: What Does the Medicine for Perfectionism Look Like?", Manoil...
"Perfectionisin: What Does the Medicine for Perfectionism Look Like?", Manoil...
Fwdays
 
"39 offers for my mentees in a year. How to create a professional environment...
"39 offers for my mentees in a year. How to create a professional environment..."39 offers for my mentees in a year. How to create a professional environment...
"39 offers for my mentees in a year. How to create a professional environment...
Fwdays
 
"From “doing tasks” to leadership: how to adapt management style to the conte...
"From “doing tasks” to leadership: how to adapt management style to the conte..."From “doing tasks” to leadership: how to adapt management style to the conte...
"From “doing tasks” to leadership: how to adapt management style to the conte...
Fwdays
 
[QUICK TALK] "Why Some Teams Grow Better Under Pressure", Oleksandr Marchenko...
[QUICK TALK] "Why Some Teams Grow Better Under Pressure", Oleksandr Marchenko...[QUICK TALK] "Why Some Teams Grow Better Under Pressure", Oleksandr Marchenko...
[QUICK TALK] "Why Some Teams Grow Better Under Pressure", Oleksandr Marchenko...
Fwdays
 
[QUICK TALK] "How to study to acquire a skill, not a certificate?", Uliana Du...
[QUICK TALK] "How to study to acquire a skill, not a certificate?", Uliana Du...[QUICK TALK] "How to study to acquire a skill, not a certificate?", Uliana Du...
[QUICK TALK] "How to study to acquire a skill, not a certificate?", Uliana Du...
Fwdays
 
[QUICK TALK] "Coaching 101: How to Identify and Develop Your Leadership Quali...
[QUICK TALK] "Coaching 101: How to Identify and Develop Your Leadership Quali...[QUICK TALK] "Coaching 101: How to Identify and Develop Your Leadership Quali...
[QUICK TALK] "Coaching 101: How to Identify and Develop Your Leadership Quali...
Fwdays
 
"Dialogue about fakapas: how to pass an interview without unnecessary mistake...
"Dialogue about fakapas: how to pass an interview without unnecessary mistake..."Dialogue about fakapas: how to pass an interview without unnecessary mistake...
"Dialogue about fakapas: how to pass an interview without unnecessary mistake...
Fwdays
 
"Conflicts within a Team: Not an Enemy, But an Opportunity for Growth", Orest...
"Conflicts within a Team: Not an Enemy, But an Opportunity for Growth", Orest..."Conflicts within a Team: Not an Enemy, But an Opportunity for Growth", Orest...
"Conflicts within a Team: Not an Enemy, But an Opportunity for Growth", Orest...
Fwdays
 
Від KPI до OKR: як синхронізувати продажі, маркетинг і продукт, щоб бізнес ре...
Від KPI до OKR: як синхронізувати продажі, маркетинг і продукт, щоб бізнес ре...Від KPI до OKR: як синхронізувати продажі, маркетинг і продукт, щоб бізнес ре...
Від KPI до OKR: як синхронізувати продажі, маркетинг і продукт, щоб бізнес ре...
Fwdays
 
"Demand Generation: How a Founder’s Brand Turns Content into Leads", Alex Her...
"Demand Generation: How a Founder’s Brand Turns Content into Leads", Alex Her..."Demand Generation: How a Founder’s Brand Turns Content into Leads", Alex Her...
"Demand Generation: How a Founder’s Brand Turns Content into Leads", Alex Her...
Fwdays
 
"Rebranding for Growth", Anna Velykoivanenko
"Rebranding for Growth", Anna Velykoivanenko"Rebranding for Growth", Anna Velykoivanenko
"Rebranding for Growth", Anna Velykoivanenko
Fwdays
 
"Must-have AI-tools for cost-efficient marketing", Irina Smirnova
"Must-have AI-tools for cost-efficient marketing",  Irina Smirnova"Must-have AI-tools for cost-efficient marketing",  Irina Smirnova
"Must-have AI-tools for cost-efficient marketing", Irina Smirnova
Fwdays
 
"Client Partnership — the Path to Exponential Growth for Companies Sized 50-5...
"Client Partnership — the Path to Exponential Growth for Companies Sized 50-5..."Client Partnership — the Path to Exponential Growth for Companies Sized 50-5...
"Client Partnership — the Path to Exponential Growth for Companies Sized 50-5...
Fwdays
 
"Building a Product IT Team in a Defense-Tech Company", Arthur Seletskiy
"Building a Product IT Team in a Defense-Tech Company", Arthur Seletskiy"Building a Product IT Team in a Defense-Tech Company", Arthur Seletskiy
"Building a Product IT Team in a Defense-Tech Company", Arthur Seletskiy
Fwdays
 
"Scaling Smart: GTM Strategies that Fuel Growth for Service IT Companies", V...
"Scaling Smart: GTM Strategies that Fuel Growth for Service IT Companies",  V..."Scaling Smart: GTM Strategies that Fuel Growth for Service IT Companies",  V...
"Scaling Smart: GTM Strategies that Fuel Growth for Service IT Companies", V...
Fwdays
 
"Pushy Sales Don’t Work: How to Sell Without Driving People Crazy", Aliona Ka...
"Pushy Sales Don’t Work: How to Sell Without Driving People Crazy", Aliona Ka..."Pushy Sales Don’t Work: How to Sell Without Driving People Crazy", Aliona Ka...
"Pushy Sales Don’t Work: How to Sell Without Driving People Crazy", Aliona Ka...
Fwdays
 
Performance Marketing Research для запуску нового WorldWide продукту
Performance Marketing Research для запуску нового WorldWide продуктуPerformance Marketing Research для запуску нового WorldWide продукту
Performance Marketing Research для запуску нового WorldWide продукту
Fwdays
 
"Scaling Product Mindset: From Individual Ideas to Team Culture", Oksana Holu...
"Scaling Product Mindset: From Individual Ideas to Team Culture", Oksana Holu..."Scaling Product Mindset: From Individual Ideas to Team Culture", Oksana Holu...
"Scaling Product Mindset: From Individual Ideas to Team Culture", Oksana Holu...
Fwdays
 
"AI-Driven Automation for High-Performing Teams: Optimize Routine Tasks & Lea...
"AI-Driven Automation for High-Performing Teams: Optimize Routine Tasks & Lea..."AI-Driven Automation for High-Performing Teams: Optimize Routine Tasks & Lea...
"AI-Driven Automation for High-Performing Teams: Optimize Routine Tasks & Lea...
Fwdays
 
"Constructive Interaction During Emotional Burnout: With Local and Internatio...
"Constructive Interaction During Emotional Burnout: With Local and Internatio..."Constructive Interaction During Emotional Burnout: With Local and Internatio...
"Constructive Interaction During Emotional Burnout: With Local and Internatio...
Fwdays
 
"Perfectionisin: What Does the Medicine for Perfectionism Look Like?", Manoil...
"Perfectionisin: What Does the Medicine for Perfectionism Look Like?", Manoil..."Perfectionisin: What Does the Medicine for Perfectionism Look Like?", Manoil...
"Perfectionisin: What Does the Medicine for Perfectionism Look Like?", Manoil...
Fwdays
 
"39 offers for my mentees in a year. How to create a professional environment...
"39 offers for my mentees in a year. How to create a professional environment..."39 offers for my mentees in a year. How to create a professional environment...
"39 offers for my mentees in a year. How to create a professional environment...
Fwdays
 
"From “doing tasks” to leadership: how to adapt management style to the conte...
"From “doing tasks” to leadership: how to adapt management style to the conte..."From “doing tasks” to leadership: how to adapt management style to the conte...
"From “doing tasks” to leadership: how to adapt management style to the conte...
Fwdays
 
[QUICK TALK] "Why Some Teams Grow Better Under Pressure", Oleksandr Marchenko...
[QUICK TALK] "Why Some Teams Grow Better Under Pressure", Oleksandr Marchenko...[QUICK TALK] "Why Some Teams Grow Better Under Pressure", Oleksandr Marchenko...
[QUICK TALK] "Why Some Teams Grow Better Under Pressure", Oleksandr Marchenko...
Fwdays
 
[QUICK TALK] "How to study to acquire a skill, not a certificate?", Uliana Du...
[QUICK TALK] "How to study to acquire a skill, not a certificate?", Uliana Du...[QUICK TALK] "How to study to acquire a skill, not a certificate?", Uliana Du...
[QUICK TALK] "How to study to acquire a skill, not a certificate?", Uliana Du...
Fwdays
 
[QUICK TALK] "Coaching 101: How to Identify and Develop Your Leadership Quali...
[QUICK TALK] "Coaching 101: How to Identify and Develop Your Leadership Quali...[QUICK TALK] "Coaching 101: How to Identify and Develop Your Leadership Quali...
[QUICK TALK] "Coaching 101: How to Identify and Develop Your Leadership Quali...
Fwdays
 
"Dialogue about fakapas: how to pass an interview without unnecessary mistake...
"Dialogue about fakapas: how to pass an interview without unnecessary mistake..."Dialogue about fakapas: how to pass an interview without unnecessary mistake...
"Dialogue about fakapas: how to pass an interview without unnecessary mistake...
Fwdays
 
"Conflicts within a Team: Not an Enemy, But an Opportunity for Growth", Orest...
"Conflicts within a Team: Not an Enemy, But an Opportunity for Growth", Orest..."Conflicts within a Team: Not an Enemy, But an Opportunity for Growth", Orest...
"Conflicts within a Team: Not an Enemy, But an Opportunity for Growth", Orest...
Fwdays
 
Ad

Alexandr Serbul "The Rust language for a high-load network service - a quick start and fast flight"

  • 1. Язык Rust для высоконагруженного сетевого сервиса - быстрый старт и стремительный полет Александр Сербул Head of Data Science, ООО «1С-Битрикс»
  • 2. О чем поговорим Делимся опытом. Никакой рекламы и философских выводов: • Что происходит в IT и языках программирования «на самом деле» • История проекта отправки push-уведомлений Битрикс24 • Как мы развивали архитектуру проекта: от bash-forks до Rust/Tokio • Одновременно поговорим о высоконагруженной работой с сетью в php, java, python, nodejs, golang и почему мы взяли Rust • Как быстро понять Rust и его сравнение с другими ЯП • Как начать решать задачи на Rust как можно быстрее, Cargo • Подводные камни в Rust и способы их преодоления • Выводы, рекомендации для будущих проектов и нагруженных сетевых архитектур
  • 3. Что происходит в IT и языках программирования «на самом деле» - и что подарил миру Rust?
  • 4. Как все начиналось… • Архитектура фон Неймана и машина Тьюринга • Процедурные языки программирования • Объектно-ориентированные языки программирования • Функциональные языки программирования • Гибридные языки программирования
  • 5. Все не заладилось с самого начала… Архитектура фон Неймана
  • 8. Теорема Гёделя о неполноте…
  • 11. Управление сложностью - инкапсуляция (все лишнее – скрыто поглубже) - абстракция (сложное становится простым, фасады) - иерархии абстракций - большое количество автотестов
  • 12. Haskell: “Quicksort” А могло же быть так: просто и сексуально
  • 14. Чем все закончилось… • Человечество – просиживает в соцсетях, в онлайн-играх и на сайтах для взрослых • Настоящее программирование – требует сильного напряжения ума и, желательно, знания математики • Взрослые люди – не хотят учиться, а это нужно для успеха в IT • Языки программирования – создаются методом копирования идей, борьба за разработчиков • Думать и учить логически строгие ЯП типа Haskell - никто не хочет
  • 15. Войны технологий – усугубляют сложность • Вместо сотрудничества – конкуренция на рынке • Вместо «развития» языков (Scala, Rust), отмечается «межвидовая мутация» (Node.js) и параллельное изобретение велосипедов • Масштабные религиозные войны: Java vs C#, PHP vs Python vs Ruby • Войны фреймворков: Angular vs React JS • “Зачем делать просто, если можно сложно?”
  • 17. «Шовинизм» в программировании •Вы писали 5 лет на PHP… Но почему, за деньги чтоль? – на работу не беру •Вы только байтики умеете на C гонять? – в нашу компанию вы не подходите •Только Java/Spring, только своих… - и пофиг на скорость, качество, результат •С#/Windows forever •Гошечка, милая гошечка…
  • 18. Докладчик сошел с ума  Все свободны. Спасибо за внимание!
  • 19. Выразительность языков программирования С – переносимый ассемблер С++ - много мелких тонкостей и «дыр», большое и противоречивое наследство Ассемблер Java Erlang C#Scala Kotlin Haskell Akka/JVM F# Go PHP Groovy Python Ruby Java ScriptLua
  • 21. PHP Выразительность языков программирования С – переносимый ассемблер С++ - много мелких тонкостей и «дыр», большое и противоречивое наследство Ассемблер Java C#Scala Kotlin Groovy Python Ruby Java ScriptLua Go Rust Erlang Haskell Akka/JVM F#
  • 22. Выразительность в Rust • Zero-cost (!) абстракции: итераторы, фильтры, мап-редьюсы … • Автовывод типов • Нет NULL, даже как концепции • Алгебраические типы данных (ADT) • Надежный pattern-matching по ADT • Защита от «опасных» операций с массивами, числами (переполнения …); “panic!” • Компилятор дает надежные гарантии безопасности при работе с памятью и автоматически освобождает ее – нет сборщика мусора • Очень мощный и строгий макро-язык • Нельзя напороться на «Undefined Behavior» (кроме как в unsafe режиме, но это нужно прямо постараться)
  • 27. Управление памятью в Rust •Владение объектами (ownership) •Передача объектов между функциями (move) и автоматический вызов «деструкторов» когда «пора» •Заимствование объектов (borrowing) при передаче по ссылке, в функции, ссылочная целостность •Slices, lifetimes •No dangling references
  • 28. Как быстро понять Rust и его сравнение с другими ЯП
  • 29. Философии • Python • JavaScript/Node.js • TypeScript • PHP • Java/C# • Scala/Kotlin • C/C++ • Haskell/ML • Rust
  • 30. Как набить руку в Rust • “Rust by example”: https://doc.rust-lang.org/stable/rust-by-example/ • “The Book”: https://doc.rust-lang.org/book/ • “The Rustonomicon”: https://doc.rust-lang.org/nomicon/ Первые 2 ссылки лучше пройти с руками в консоли 2-3 раза и потом все открывается и дальше легко. Самое непривычное для понимания: аффинные типы данных, алгебраические типы данных. Полезен опыт изучения FP. Последняя ссылка самая сложная и тяжелая, но ее можно … не читать 
  • 34. Аффинные типы данных - проникли гораздо глубже • Концепции: ownership, move, borrowing – активно применяются в многопоточном программировании и в других местах (итераторы и др.) • Забыть освободить Mutex – невозможно, не скомпилируется  • Поработать с инвалидированным итератором – невозможно, не скомпилируется  • Появилось больше времени на решение бизнес-задач
  • 35. Начало работы с Rust • «Непробиваемый» компилятор • Rust-plugin IntelliJ IDEA
  • 37. Менеджмент проекта, toolchain • Cargo.toml • Cargo.lock • “cargo build --release” • “rustup update”
  • 38. Автотестирование • Unit tests • Integration tests • “cargo test”
  • 39. Unsafe Rust И да, сторонние пакеты из Cargo могут содержать блоки «unsafe» и вызывать неопределенное поведение, но это случается на порядки реже, чем в связках python/c++ и т.п.
  • 40. Итоги «плюшек» в Rust • Пишешь быстро, как на python/php – автовывод типов • Очень строгая типизация без NULLs с ADT/PM* – а не как структурная в Golang/TypeScript или слабая динамическая в PHP/JS или «строгая»-динамическая в Python • Мощные гарантии компилятора: безопасная работа с памятью, авто-очистка памяти • Нет неопределенного поведения и прочих сюрпризов – «безопасный» язык, как Python/PHP** • Скорость как у C/C++! * - алгебраические типы данных/сопоставление по шаблону ** - сюрпризы возможны в unsafe-режиме языка, но их на порядки меньше
  • 41. Как мы развивали архитектуру проекта: от bash-forks до rust/tokio
  • 42. Пуши - технологии • Apple Push Notification service (APNs) - June 17, 2009; >= iOS 3.0, >= OS X v10.7 (Lion); max message - 256 B https://developer.apple.com/notifications/ • Google Cloud Messaging for Android (GCM) – June 27, 2012; >= Android 2.2; max message - 4 KB http://developer.android.com/google/gcm/ ранее - Android Cloud to Device Messaging (C2DM)
  • 43. APNS
  • 44. Идеи в основе архитектуры 1. Провайдер регистрируется в APNs, GCM и получает клиентский SSL/TLS-сертификат (ключ и т.п.) 2. Провайдер обслуживает запросы многих мобильных приложений и идентифицирует себя в APNs, GCM с помощью сертификата • Нам нужно поддерживать 10к – 100к и больше мобильных приложений
  • 45. Провайдер 1, Приложение Провайдер N, Приложение «Супер» Провайдер Клиентские SSL/TLS сертификаты, ключи
  • 46. APNS - протокол • Бинарный протокол • 2 формата: простой и расширенный • Пишем/читаем SSL/TLS сокет • Возвращает инфу о невалидных токенах устройств
  • 47. GCM - протокол • JSON/plain text POST -> https://android.googleapis.com/gcm/send Запрос: Content-Type:application/json Authorization:key=*aSyB-1uEai2WiUapxCs2Q0GZYzPu7Udno5aA { "registration_ids" : ["APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx..."], "data" : { ... }, } Ответ: { "multicast_id": 108, "success": 1, "failure": 0, "canonical_ids": 0, "results": [ { "message_id": "1:08" } ] }
  • 48. Универсальный транспорт Пакет BCM Октеты в base64. TWFuIGlzIGRpc3;2;NoZWQsIG5vdC;1; ZXZlcmFuY2Ugb2YgZ…;3;… [0-9]{1} – переключатель формата: GCM, APNs … Push-сообщение Raw bytes, Json, txt, xml, … SSL/TLS клиентский сертификат APNS, Ключ GCM
  • 49. nginx Идентификация и проксирование сообщения в SQS PHP-процесс Long Pooling, получение и парсинг сообщения, отправка Push на устройство PHP-процесс Long Pooling, получение и парсинг сообщения, отправка Push на устройство PHP-процесс Long Pooling, получение и парсинг сообщения, отправка Push на устройство nginx Идентификация и проксирование сообщения в SQS nginx Идентификация и проксирование сообщения в SQS Итоговая архитектура (2013)
  • 50. Недостатки архитектуры • Синхронная работа с сокетами при отправке push- уведомлений в GCM/APNs • За счет скриптовых языков – высокая нагрузка на CPU 1) Итерация 1: PHP форкает системный процесс отправки push 2) Итерация 2: PHP начал работать с сокетами сам Нагрузка: до 1000 SQS-сообщений в секунду до 1000-15 000 отправляемых пуш-уведомлений в секунду
  • 51. Нагрузка, железо Нагрузка: до 1000 SQS-сообщений в секунду до 1000-15 000 отправляемых пуш-уведомлений в секунду • На PHP кластер жил за 6-8 серверах с 16-32 CPU и 16-32 ГБ ОЗУ и нагрузка постоянно росла • На Rust - нагрузку пушей Битрикс24 держит один сервер 4 CPU 8 ГБ ОЗУ (процесс, он один, занимает 3.5 ГБ в ОЗУ) TCP - не кешируются, ключи на диске - не кешируются. Это еще сильнее снизит нагрузку.
  • 52. Проект на Rust - обзор • Стандартные зависимости в Cargo • Сетевая асинхронная “монадическая” библиотека с корутинами – Tokio • Немного танцев с бубнами с TLS, но исходники помогли быстро • При росте нагрузки резко начались segfaults, но быстро полечились через увеличение ulimit ОС, видимо, наступили на ограничение стека на процесс и наступала нирвана • Никаких проблем, падений, анализов coredump • Никаких утечек памяти, Rust использует стандартные: malloc или jemalloc или можно выбрать • Никаких тюнингов GC и нагрузок от сборщика мусора 
  • 53. Проект на Rust - обзор
  • 54. Проект на Rust - тесты • Сразу пишутся тесты • За счет ADT/PM, отсутствия NULLs, Enums – тесты больше занимаются делом • В самом языке много вкусных функциональных библиотек с Zero-cost abstraction (итераторы, диапазоны, фильтры, мап-редьюсы) • В Tokio тоже монадически- функциональный подход
  • 56. Проект на Rust – Pattern Matching
  • 57. Проект на Rust – присваивание из PM
  • 58. Проект на Rust – “Option” monad
  • 59. Проект на Rust – TCP monads
  • 60. Проект на Rust – monadic network error handling
  • 62. ООП? Traits! • Развитого ООП, как в Java/C# - нет и не планируется. А зачем? • Структурки и методы, навешанные на них • Но за счет строгой типизации, ADT/PM, аффинных типов и сильных гарантий компилятора – этого хватает
  • 63. А что если взять … •Node.js •Python – корутины •Golang - горутины •Java/Netty •Erlang •Haskell •С++
  • 64. Итоги • Rust только кажется сложным. За сложностью скрывается строгость, простота и элегантность • Язык привносит несколько очень мощных и непривычных концепций, направленных на надежное программирование, в т.ч. системное • Компилятор дает очень высокие гарантии по работе с памятью и многие другие (переполнения, доступ за пределы массива …) и его нужно «преодолевать» • На языке легко писать, причем быстро и сразу без ошибок • Алгебраические типы данных, строгий pattern-matching и отсутствие NULLs хорошо структурируют код и сильно ускоряют разработку • В Cargo «из коробки» много готовых модулей, бери и используй • Скорость решения сравнима с C, потребление ОЗУ без сборщика мусора минимально.