SlideShare a Scribd company logo
1 of 22
SMARTACTORS
Библиотека для нагруженных и масштабируемых приложений
Процессоры уже не те!
 Рост производительности одного ядра
процессора остановился!
 Рост производительности приложений
теперь должен обеспечиваться за счет
активного использования
многоядерности.
Herb Sutter, 2005 The Free Lunch Is Over A
Fundamental Turn Toward Concurrency in Software
“The bad news is that, at least in the short term, the
growth will come mostly in directions that do not take
most current applications along for their customary free
ride.
Требуются сильные специалисты, заранее сложно
прогнозировать результат, трудно и, как следствие, дорого
масштабировать, развивать и сопровождать систему.
Многопоточные приложения слишком сложны
Акторы – альтернатива многопоточности
Carl Hewitt,
Peter Bishop,
Richard Steiger
A Universal Modular ACTOR
Formalism for Artificial Intelligence
1973
Carl Hewitt
Что такое актор?
Актор – вычислительная
сущность, которая может
за один шаг
 Отправить конечное число
сообщений другим акторам
 Создать конечное число акторов
 Выбрать поведение для приема
следующего сообщения
Многопоточность vs Акторы
Многопоточность больше всего похожа
на телефонию. Доступ к ресурсу –
телефонный звонок. Адресат может быть
занят или не брать трубку – живая и
мертвая блокировки. Чтобы
одновременно принимать много звонков,
в телефонии используют офисные АТС –
объекты синхронизации.
Акторы похожи на почтовую систему.
Чтобы выполнить какое-либо действие
актор посылает сообщение – письмо
адресату, и дальше занимается своими
делами. Не нужно никаких блокировок
вообще, можно послать много сообщений
за 1 раз, но нет гарантий, что каждое
сообщение будет доставлено адресату.
Почему своя реализация акторов на Java, а не,
например, Erlang, Scala и т.д.?
 У нас низкий порог вхождения – разработчики без опыта
работы – надо знать только чистый Java без Framework’ов.
 Erlang не подходит для длительных вычислений (типичная
ситуация, когда при решении многопоточных задач Erlang
проигрывает в скорости – см., например, рис. справа 18,19
место и проигрыш в ~20 раз!)
 Подход Scala (без инверсии зависимостей – Philipp Haler,
Martin Odersky, 2006 Event-Based Programming Without
Inversion Control) заставляет разработчика самого
задумываться о распараллеливании задач в коде, то есть
требуется наличие хорошего опыта
 Мы предлагаем решения в акторах, которых нет ни на
одной платформе (речь пойдет далее)
benchmarksgame.alioth.debian.org
Каждый актор запущен внутри некоторого процесса – Node. Каждый
актор подключен к одному или нескольким каналам шины сообщений –
MessageBus. Чтобы отправить сообщение актору, надо его опубликовать
в соответствующем канале.
Верхнеуровневое описание SmartActors
Маршруты сообщений
 Акторную модель можно представить в виде графа,
где каждая вершина – это актор, а стрелка
показывает, что один актор (основание стрелки)
посылает сообщение другому актору (конец
стрелки)
 Маршрут сообщения – это путь в графе, которое
проходит сообщение от момента создания до
завершения обработки.
 Обычно, информация о том, кому посылать
сообщение зафиксирована в исходном коде актора.
 Это требует модификации актора и,
соответственно, обновления сервера, каждый раз,
когда нам необходимо внести изменения в
соответствующий алгоритм (например, в
запрограммированный бизнес-процесс)
Управление маршрутами без программиста
 Наше решение предлагает вынести
информацию об адресатах сообщений за
пределы актора, так чтобы он ничего не
знал о следующих акторах маршрута.
 В таком случае акторы можно легко
компоновать в любых сочетаниях для
реализации сложных операций.
 Маршруты формируются динамически, так
что их можно менять без обновлений и
перезагрузки сервера.
 Изменение маршрута может проходить
без участия программиста. Программисты
нужны только для разработки новых
акторов.
Контрольные точки
 При поступлении запроса (сообщение) от
пользователя, при прохождении через
контрольную точку сообщение сохраняется
как есть в базе данных.
 Дальше сообщение отправляется по
маршруту
 Если в результате сбоя в работе какого-
либо актора, запрос в данный момент не
может быть выполнен, то благодаря тому,
что все данные сохранены в контрольной
точке, мы можем исправить ошибку и
повторить операцию без дополнительных
действий со стороны пользователя.
Контрольная точка
сохраняет в БД входящее
сообщение как есть
Конечная точка маршрута
сообщения
Преимущества контрольных точек
 Можно ответить пользователю раньше, чем
завершится обработка операции, что уменьшает
время отклика (ответ значит не то, что операция
завершена, а то, что успешно принята заявка на
выполнение операции – в большинстве случаев
этого достаточно, как например, в платежном
терминале)
 Пользователь не видит, что внутри нашей системы
могут проблемы – для него система всегда работает
правильно – ошибка выражается лишь в увеличении
времени обработки операции
 Можно использовать несколько контрольных точек
в одном маршруте, чтобы уменьшить объем работы
в случае сбоя
 Не теряется информация от внешних систем,
например, платежных, в случае сбоя в нашей
системе – данные от внешних систем сохранятся в
некоторой контрольной точкеКонечная точка маршрута
сообщения
Контрольная точка
сохраняет в БД входящее
сообщение как естьвходящий
запрос
ответ
Один формат для всех данных
 Все данные хранятся в виде JSON в реляционной БД (не NoSQL база). Почему
реляционная – есть транзакции.
 Структура базы очень проста – всего 6 (!) запросов к БД.
 Всегда известно среднее время выполнения любого запроса (в том числе
полнотекстовых поисковых запросов). Поскольку запросы фиксированы, то время
их выполнения не зависит от квалификации разработчика.
 Не нужно миграций вообще – одновременно можно хранить сразу несколько
версий одних данных (система будет корректно работать со всеми версиями)
 Базу легко масштабировать и поддерживать скорость выполнения запросов –
достаточно выделить нужные записи в отдельную коллекцию. Например, если у
Вас объявления о продаже автомобилей и из них половина – это Toyota, то их
можно выделить в отдельную коллекцию, или, наоборот, из-за ухода General
Motors количество продаваемых Chevrolet, Opel снизилось, то их можно собрать
в одну коллекцию. Это делается однажды написанными процедурами и хорошо
отлаженными слияния и разделения коллекций, то есть участие программиста для
этих операций не требуется.
{
‘фамилия’: ‘Иванов’,
‘заказы’: [
{
‘дата’: ’01.09.2015’,
‘стоимость’: 2000
},
{
‘дата’: ’01.10.2015’,
‘стоимость’: 2000
}
]
}
Актор имеет имя и версию. Чтобы система стала использовать актор, разработчик
обязан опубликовать его в библиотеке акторов. Ни один актор не потеряется, а
библиотека будет хранить информацию обо всех акторах, которые когда либо были в
нашей системе, а также о тех, кто их опубликовал! Исключается человеческий фактор
при деплое на сервера, обеспечивается безопасность.
Библиотека акторов
Библиотека конфигураций
 Структура каждого сервера описывается JSON
 Все конфигурации с версиями хранятся в библиотеке
конфигураций
 Чтобы обновить конфигурацию на сервере, ему
посылается сообщение с идентификатором
конфигурации
 Сервер обращается в библиотеку конфигураций и
получает требуемую конфигурацию
 При необходимости сервер сам выкачивает из
библиотеки акторов требуемые конфигурацией
акторы
{
‘actors’: [{
‘name’: ‘emailSender’,
‘smtp’: …,
},
{
‘name’: ‘dailyReport’,
…
}
‘messagePaths’: [{
‘name’: ‘newAd’,
…
}],
‘enpoints’: […]
}
Преимущества библиотеки конфигураций
 Быстро клонировать сервера – достаточно установить
нашу библиотеку (скопировать файлы) и послать
сообщение с необходимой конфигурацией
 Автоматический деплой – надо только написать
конфигурационный файл
 Можно выставлять время обновления
 Автоматический откат – если возникают ошибки при
инициализации сервера, то автоматически откатываемся
до старой конфигурации
 Ни одна конфигурация не теряется
 Можно иметь одновременно сервера, которые работают
с разными версиями данных, например, если часть
клиентов, которые работают с Вами по API еще не
перешла на новую версию
{
‘actors’: [{
‘name’: ‘emailSender’,
‘smtp’: …,
},
{
‘name’: ‘dailyReport’,
…
}
‘messagePaths’: [{
‘name’: ‘newAd’,
…
}],
‘enpoints’: […]
}
Методы обнаружения разладки
Используем мат.
статистику для
обнаружения и
исправления ошибок.
Акторы-датчики
измеряют поведение
системы, потом эта
передается на вход
специальных
алгоритмов,
позволяющих
обнаруживать ошибки
на работающей
системе без
программистов и
тестировщиков.
Преимущества нашего решения
 Масштабируемые приложения могут
строить разработчики с небольшим
опытом работы или вообще без опыта
 Нет проблем с миграциями данных
 Методы объективного контроля
работоспособности всей системы, не
зависящие от программистов и
тестировщиков
 Быстрое клонирование и развертывание
серверов по необходимости
 Возможность адаптации или правки
автоматизируемых бизнес-процессов без
участия программистов.
Существующие внедрения – портал
бесплатных объявлений и новостей
 Команда – 5 студентов без опыта работы и
филолог
 Среднее время открытия страницы
уменьшено с 4,5 с до 400 мс
 Количество ошибок по сравнению с
предыдущей версией уменьшилось в 1000
раз!
 Количество серверов уменьшено с 15 до 3!
 Объявление можно подавать простым
текстом вместо длинной формы: “Двушка в
Советском округе, проспект Мира, 64, в районе
ост. Политех, 50/34/8, 3/5п, не требует ремонта,
санузел раздельный, хрущевка.”
Существующие внедрения – платформа
для контекстной рекламы
 Требование – время отклика строго меньше 100 мс
 Попытки задействовать ElasticSearch, MongoDb и т.д. дают в некоторых
случаях 200 мс и больше
 Был написан актор, который хранит все критерии рекламных компаний сразу в
памяти.
 Получили время отклика 20-50 мс (сам поиск по структуре в памяти 5-20 мс)
 Для масштабирования система поддерживает работу с несколькими
экземплярами серверов
Существующие внедрения –
кроссплатформенное приложение
 Приложение считает время по каждой
задаче программиста, снимает
скриншоты, мониторит активность
клавиатуры и мыши
 Интерфейс написан на HTML5 и CSS3
 Бизнес-логика написана на нашей
библиотеке
 Приложение работает без изменений
под Mac, Window, Linux (кроме методов
снятия скриншота и логирования активности
– это малая часть – до 40 ч работы – по
сравнению со всем приложением)
Контакты
HWdTech, LLC
Тюменцев Евгений
Генеральный директор
hwdtech.ru
etyumentcev@hwdtech.ru
+7 913 150 22 04

More Related Content

What's hot

История проекта, который никогда не падает / Андрей Шетухин
История проекта, который никогда не падает / Андрей ШетухинИстория проекта, который никогда не падает / Андрей Шетухин
История проекта, который никогда не падает / Андрей ШетухинOntico
 
рентабельный код
рентабельный кодрентабельный код
рентабельный кодMax Arshinov
 
C++ Core Guidelines
C++ Core Guidelines C++ Core Guidelines
C++ Core Guidelines Sergey Zubkov
 
Лев Валкин — Кое-что про Erlang
Лев Валкин — Кое-что про ErlangЛев Валкин — Кое-что про Erlang
Лев Валкин — Кое-что про ErlangYury Yurevich
 
Опыт использования Erlang в разработке многопользовательской игры
Опыт использования Erlang в разработке многопользовательской игрыОпыт использования Erlang в разработке многопользовательской игры
Опыт использования Erlang в разработке многопользовательской игрыYuri Zhloba
 
Владислав Грязнов "Многозадачность в PHP"
Владислав Грязнов "Многозадачность в PHP"Владислав Грязнов "Многозадачность в PHP"
Владислав Грязнов "Многозадачность в PHP"Fwdays
 
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...SECON
 
Что и почему писать на Erlang
Что и почему писать на ErlangЧто и почему писать на Erlang
Что и почему писать на ErlangMax Lapshin
 
Алексей Лавренюк - Организация нагрузочного тестирования
Алексей Лавренюк - Организация нагрузочного тестирования   Алексей Лавренюк - Организация нагрузочного тестирования
Алексей Лавренюк - Организация нагрузочного тестирования Yandex
 
Организация нагрузочного тестирования — Алексей Лавренюк
Организация нагрузочного тестирования — Алексей ЛавренюкОрганизация нагрузочного тестирования — Алексей Лавренюк
Организация нагрузочного тестирования — Алексей ЛавренюкYandex
 
Как писать на PHP и не стать быдло-кодером
Как писать на PHP и не стать быдло-кодеромКак писать на PHP и не стать быдло-кодером
Как писать на PHP и не стать быдло-кодеромKirill Kovalchuk
 
Кроссплатформенная библиотека для Android и iOS: за и против
Кроссплатформенная библиотека для Android и iOS: за и противКроссплатформенная библиотека для Android и iOS: за и против
Кроссплатформенная библиотека для Android и iOS: за и противDotNetConf
 
Куда катится PHP, а также про Yii и другие фреймворки / Александр Макаров (St...
Куда катится PHP, а также про Yii и другие фреймворки / Александр Макаров (St...Куда катится PHP, а также про Yii и другие фреймворки / Александр Макаров (St...
Куда катится PHP, а также про Yii и другие фреймворки / Александр Макаров (St...Ontico
 
Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2
Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2
Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2Oleg Poludnenko
 
Алексей Туля - А нужен ли вам erlang?
Алексей Туля - А нужен ли вам erlang?Алексей Туля - А нужен ли вам erlang?
Алексей Туля - А нужен ли вам erlang?Minsk Linux User Group
 
Максим Лапшин. Erlang production
Максим Лапшин. Erlang productionМаксим Лапшин. Erlang production
Максим Лапшин. Erlang productionAlina Dolgikh
 
Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux
Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на LinuxПавел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux
Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на LinuxPlatonov Sergey
 
SECON'2016. Васильков Василий, Серверное программирование сегодня
SECON'2016. Васильков Василий, Серверное программирование сегодняSECON'2016. Васильков Василий, Серверное программирование сегодня
SECON'2016. Васильков Василий, Серверное программирование сегодняSECON
 

What's hot (20)

История проекта, который никогда не падает / Андрей Шетухин
История проекта, который никогда не падает / Андрей ШетухинИстория проекта, который никогда не падает / Андрей Шетухин
История проекта, который никогда не падает / Андрей Шетухин
 
рентабельный код
рентабельный кодрентабельный код
рентабельный код
 
C++ Core Guidelines
C++ Core Guidelines C++ Core Guidelines
C++ Core Guidelines
 
Лев Валкин — Кое-что про Erlang
Лев Валкин — Кое-что про ErlangЛев Валкин — Кое-что про Erlang
Лев Валкин — Кое-что про Erlang
 
Extrproj
 Extrproj Extrproj
Extrproj
 
Опыт использования Erlang в разработке многопользовательской игры
Опыт использования Erlang в разработке многопользовательской игрыОпыт использования Erlang в разработке многопользовательской игры
Опыт использования Erlang в разработке многопользовательской игры
 
Владислав Грязнов "Многозадачность в PHP"
Владислав Грязнов "Многозадачность в PHP"Владислав Грязнов "Многозадачность в PHP"
Владислав Грязнов "Многозадачность в PHP"
 
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...
 
Что и почему писать на Erlang
Что и почему писать на ErlangЧто и почему писать на Erlang
Что и почему писать на Erlang
 
Алексей Лавренюк - Организация нагрузочного тестирования
Алексей Лавренюк - Организация нагрузочного тестирования   Алексей Лавренюк - Организация нагрузочного тестирования
Алексей Лавренюк - Организация нагрузочного тестирования
 
Организация нагрузочного тестирования — Алексей Лавренюк
Организация нагрузочного тестирования — Алексей ЛавренюкОрганизация нагрузочного тестирования — Алексей Лавренюк
Организация нагрузочного тестирования — Алексей Лавренюк
 
Как писать на PHP и не стать быдло-кодером
Как писать на PHP и не стать быдло-кодеромКак писать на PHP и не стать быдло-кодером
Как писать на PHP и не стать быдло-кодером
 
Кроссплатформенная библиотека для Android и iOS: за и против
Кроссплатформенная библиотека для Android и iOS: за и противКроссплатформенная библиотека для Android и iOS: за и против
Кроссплатформенная библиотека для Android и iOS: за и против
 
Куда катится PHP, а также про Yii и другие фреймворки / Александр Макаров (St...
Куда катится PHP, а также про Yii и другие фреймворки / Александр Макаров (St...Куда катится PHP, а также про Yii и другие фреймворки / Александр Макаров (St...
Куда катится PHP, а также про Yii и другие фреймворки / Александр Макаров (St...
 
Erlang&rails
Erlang&railsErlang&rails
Erlang&rails
 
Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2
Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2
Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2
 
Алексей Туля - А нужен ли вам erlang?
Алексей Туля - А нужен ли вам erlang?Алексей Туля - А нужен ли вам erlang?
Алексей Туля - А нужен ли вам erlang?
 
Максим Лапшин. Erlang production
Максим Лапшин. Erlang productionМаксим Лапшин. Erlang production
Максим Лапшин. Erlang production
 
Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux
Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на LinuxПавел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux
Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux
 
SECON'2016. Васильков Василий, Серверное программирование сегодня
SECON'2016. Васильков Василий, Серверное программирование сегодняSECON'2016. Васильков Василий, Серверное программирование сегодня
SECON'2016. Васильков Василий, Серверное программирование сегодня
 

Viewers also liked

Как 7 студентов и филолог делали сложный проект
Как 7 студентов и филолог делали сложный проектКак 7 студентов и филолог делали сложный проект
Как 7 студентов и филолог делали сложный проектetyumentcev
 
Математическое обоснование S.O.L.I.D принципов
Математическое обоснование S.O.L.I.D принциповМатематическое обоснование S.O.L.I.D принципов
Математическое обоснование S.O.L.I.D принциповetyumentcev
 
Программирование глазами математика
Программирование глазами математикаПрограммирование глазами математика
Программирование глазами математикаetyumentcev
 
разработка серверов и серверных приложений лекция №4
разработка серверов и серверных приложений лекция №4разработка серверов и серверных приложений лекция №4
разработка серверов и серверных приложений лекция №4etyumentcev
 
математическое обоснование Solid принципов. Конференция dotnetconf (Челябинск...
математическое обоснование Solid принципов. Конференция dotnetconf (Челябинск...математическое обоснование Solid принципов. Конференция dotnetconf (Челябинск...
математическое обоснование Solid принципов. Конференция dotnetconf (Челябинск...etyumentcev
 
Об опыте применения jsonb в реальных проектах. Выступление на PgConf.Russia 2016
Об опыте применения jsonb в реальных проектах. Выступление на PgConf.Russia 2016Об опыте применения jsonb в реальных проектах. Выступление на PgConf.Russia 2016
Об опыте применения jsonb в реальных проектах. Выступление на PgConf.Russia 2016etyumentcev
 

Viewers also liked (6)

Как 7 студентов и филолог делали сложный проект
Как 7 студентов и филолог делали сложный проектКак 7 студентов и филолог делали сложный проект
Как 7 студентов и филолог делали сложный проект
 
Математическое обоснование S.O.L.I.D принципов
Математическое обоснование S.O.L.I.D принциповМатематическое обоснование S.O.L.I.D принципов
Математическое обоснование S.O.L.I.D принципов
 
Программирование глазами математика
Программирование глазами математикаПрограммирование глазами математика
Программирование глазами математика
 
разработка серверов и серверных приложений лекция №4
разработка серверов и серверных приложений лекция №4разработка серверов и серверных приложений лекция №4
разработка серверов и серверных приложений лекция №4
 
математическое обоснование Solid принципов. Конференция dotnetconf (Челябинск...
математическое обоснование Solid принципов. Конференция dotnetconf (Челябинск...математическое обоснование Solid принципов. Конференция dotnetconf (Челябинск...
математическое обоснование Solid принципов. Конференция dotnetconf (Челябинск...
 
Об опыте применения jsonb в реальных проектах. Выступление на PgConf.Russia 2016
Об опыте применения jsonb в реальных проектах. Выступление на PgConf.Russia 2016Об опыте применения jsonb в реальных проектах. Выступление на PgConf.Russia 2016
Об опыте применения jsonb в реальных проектах. Выступление на PgConf.Russia 2016
 

Similar to Платформа SmartActors

Разработка надежных параллельных, распределенных приложений: быстро и дешево
Разработка надежных параллельных, распределенных приложений: быстро и дешевоРазработка надежных параллельных, распределенных приложений: быстро и дешево
Разработка надежных параллельных, распределенных приложений: быстро и дешевоDotNetConf
 
2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенны...
2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенны...2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенны...
2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенны...HappyDev
 
New SpyLOG architechture (Highload 2008)
New SpyLOG architechture (Highload 2008)New SpyLOG architechture (Highload 2008)
New SpyLOG architechture (Highload 2008)Sergey Skvortsov
 
Hl2008 Spy Log Architechture 169
Hl2008 Spy Log Architechture 169Hl2008 Spy Log Architechture 169
Hl2008 Spy Log Architechture 169Media Gorod
 
Руководство по формату событий для разработчиков
Руководство по формату событий для разработчиковРуководство по формату событий для разработчиков
Руководство по формату событий для разработчиковOlesya Shelestova
 
Пакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностей
Пакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностейПакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностей
Пакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностейCisco Russia
 
บริหารเวลา
บริหารเวลาบริหารเวลา
บริหารเวลาtoomtam
 
Костянтин Чаус — Monitoring of huge Drupal site. Tools and tips
Костянтин Чаус — Monitoring of huge Drupal site. Tools and tipsКостянтин Чаус — Monitoring of huge Drupal site. Tools and tips
Костянтин Чаус — Monitoring of huge Drupal site. Tools and tipsLEDC 2016
 
Консалтинг высоконагруженных web систем
Консалтинг высоконагруженных web системКонсалтинг высоконагруженных web систем
Консалтинг высоконагруженных web системMedia Gorod
 
Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке вы...
Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке вы...Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке вы...
Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке вы...CodeFest
 
О чем стоит подумать, приступая к разработке высоконагруженных систем
О чем стоит подумать, приступая к разработке высоконагруженных системО чем стоит подумать, приступая к разработке высоконагруженных систем
О чем стоит подумать, приступая к разработке высоконагруженных системArtem Volftrub
 
DS Activity Monitor
DS Activity MonitorDS Activity Monitor
DS Activity Monitormekhos
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, ParallelsNikolay Samokhvalov
 
Mind map для «Архитектура А/Б тестирования: сделай сам»
Mind map для «Архитектура А/Б тестирования: сделай сам»Mind map для «Архитектура А/Б тестирования: сделай сам»
Mind map для «Архитектура А/Б тестирования: сделай сам»Sergey Xek
 
Антон Сапожников. Еще один недостаток современных клиент-серверных приложений
Антон Сапожников. Еще один недостаток современных клиент-серверных приложенийАнтон Сапожников. Еще один недостаток современных клиент-серверных приложений
Антон Сапожников. Еще один недостаток современных клиент-серверных приложенийPositive Hack Days
 
23may 1300 valday антон сапожников 'еще один недостаток современных клиент се...
23may 1300 valday антон сапожников 'еще один недостаток современных клиент се...23may 1300 valday антон сапожников 'еще один недостаток современных клиент се...
23may 1300 valday антон сапожников 'еще один недостаток современных клиент се...Positive Hack Days
 

Similar to Платформа SmartActors (20)

Разработка надежных параллельных, распределенных приложений: быстро и дешево
Разработка надежных параллельных, распределенных приложений: быстро и дешевоРазработка надежных параллельных, распределенных приложений: быстро и дешево
Разработка надежных параллельных, распределенных приложений: быстро и дешево
 
2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенны...
2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенны...2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенны...
2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенны...
 
New SpyLOG architechture (Highload 2008)
New SpyLOG architechture (Highload 2008)New SpyLOG architechture (Highload 2008)
New SpyLOG architechture (Highload 2008)
 
Hl2008 Spy Log Architechture 169
Hl2008 Spy Log Architechture 169Hl2008 Spy Log Architechture 169
Hl2008 Spy Log Architechture 169
 
Руководство по формату событий для разработчиков
Руководство по формату событий для разработчиковРуководство по формату событий для разработчиков
Руководство по формату событий для разработчиков
 
Пакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностей
Пакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностейПакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностей
Пакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностей
 
บริหารเวลา
บริหารเวลาบริหารเวลา
บริหารเวลา
 
paper BPM on Rails4
paper BPM on Rails4paper BPM on Rails4
paper BPM on Rails4
 
Костянтин Чаус — Monitoring of huge Drupal site. Tools and tips
Костянтин Чаус — Monitoring of huge Drupal site. Tools and tipsКостянтин Чаус — Monitoring of huge Drupal site. Tools and tips
Костянтин Чаус — Monitoring of huge Drupal site. Tools and tips
 
Консалтинг высоконагруженных web систем
Консалтинг высоконагруженных web системКонсалтинг высоконагруженных web систем
Консалтинг высоконагруженных web систем
 
Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке вы...
Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке вы...Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке вы...
Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке вы...
 
О чем стоит подумать, приступая к разработке высоконагруженных систем
О чем стоит подумать, приступая к разработке высоконагруженных системО чем стоит подумать, приступая к разработке высоконагруженных систем
О чем стоит подумать, приступая к разработке высоконагруженных систем
 
DS Activity Monitor
DS Activity MonitorDS Activity Monitor
DS Activity Monitor
 
Load testing with Tsung
Load testing with TsungLoad testing with Tsung
Load testing with Tsung
 
Log+
Log+Log+
Log+
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels
 
Mind map для «Архитектура А/Б тестирования: сделай сам»
Mind map для «Архитектура А/Б тестирования: сделай сам»Mind map для «Архитектура А/Б тестирования: сделай сам»
Mind map для «Архитектура А/Б тестирования: сделай сам»
 
Антон Сапожников. Еще один недостаток современных клиент-серверных приложений
Антон Сапожников. Еще один недостаток современных клиент-серверных приложенийАнтон Сапожников. Еще один недостаток современных клиент-серверных приложений
Антон Сапожников. Еще один недостаток современных клиент-серверных приложений
 
23may 1300 valday антон сапожников 'еще один недостаток современных клиент се...
23may 1300 valday антон сапожников 'еще один недостаток современных клиент се...23may 1300 valday антон сапожников 'еще один недостаток современных клиент се...
23may 1300 valday антон сапожников 'еще один недостаток современных клиент се...
 
Team workflow
Team workflowTeam workflow
Team workflow
 

More from etyumentcev

разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3etyumentcev
 
разработка серверов и серверных приложений лекция №2
разработка серверов и серверных приложений лекция №2разработка серверов и серверных приложений лекция №2
разработка серверов и серверных приложений лекция №2etyumentcev
 
разработка серверов и серверных приложений лекция №1
разработка серверов и серверных приложений лекция №1разработка серверов и серверных приложений лекция №1
разработка серверов и серверных приложений лекция №1etyumentcev
 
высокопроизводиетльные системы без доп затрат
высокопроизводиетльные системы без доп затратвысокопроизводиетльные системы без доп затрат
высокопроизводиетльные системы без доп затратetyumentcev
 
зачем нужны системы управления проектами
зачем нужны системы управления проектамизачем нужны системы управления проектами
зачем нужны системы управления проектамиetyumentcev
 
введение в Sql
введение в Sqlвведение в Sql
введение в Sqletyumentcev
 
почему буксует тайм менеджмент
почему буксует тайм менеджментпочему буксует тайм менеджмент
почему буксует тайм менеджментetyumentcev
 
ук 03.011.01 2011
ук 03.011.01 2011ук 03.011.01 2011
ук 03.011.01 2011etyumentcev
 
ук 03.010.01 2011
ук 03.010.01 2011ук 03.010.01 2011
ук 03.010.01 2011etyumentcev
 
ук 03.009.01 2011
ук 03.009.01 2011ук 03.009.01 2011
ук 03.009.01 2011etyumentcev
 
ук 03.007.02 2011
ук 03.007.02 2011ук 03.007.02 2011
ук 03.007.02 2011etyumentcev
 
ук 03.006.02 2011
ук 03.006.02 2011ук 03.006.02 2011
ук 03.006.02 2011etyumentcev
 
ук 03.005.03 2011
ук 03.005.03 2011ук 03.005.03 2011
ук 03.005.03 2011etyumentcev
 
ук 03.003.01 2011
ук 03.003.01 2011ук 03.003.01 2011
ук 03.003.01 2011etyumentcev
 
ук 03.001.02 2011
ук 03.001.02 2011ук 03.001.02 2011
ук 03.001.02 2011etyumentcev
 
ук 03.002.01 2011
ук 03.002.01 2011ук 03.002.01 2011
ук 03.002.01 2011etyumentcev
 
ук 03.005.02 2011
ук 03.005.02 2011ук 03.005.02 2011
ук 03.005.02 2011etyumentcev
 
управление задачами
управление задачамиуправление задачами
управление задачамиetyumentcev
 

More from etyumentcev (20)

разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3
 
разработка серверов и серверных приложений лекция №2
разработка серверов и серверных приложений лекция №2разработка серверов и серверных приложений лекция №2
разработка серверов и серверных приложений лекция №2
 
разработка серверов и серверных приложений лекция №1
разработка серверов и серверных приложений лекция №1разработка серверов и серверных приложений лекция №1
разработка серверов и серверных приложений лекция №1
 
высокопроизводиетльные системы без доп затрат
высокопроизводиетльные системы без доп затратвысокопроизводиетльные системы без доп затрат
высокопроизводиетльные системы без доп затрат
 
зачем нужны системы управления проектами
зачем нужны системы управления проектамизачем нужны системы управления проектами
зачем нужны системы управления проектами
 
введение в Sql
введение в Sqlвведение в Sql
введение в Sql
 
почему буксует тайм менеджмент
почему буксует тайм менеджментпочему буксует тайм менеджмент
почему буксует тайм менеджмент
 
ук 03.011.01 2011
ук 03.011.01 2011ук 03.011.01 2011
ук 03.011.01 2011
 
ук 03.010.01 2011
ук 03.010.01 2011ук 03.010.01 2011
ук 03.010.01 2011
 
ук 03.009.01 2011
ук 03.009.01 2011ук 03.009.01 2011
ук 03.009.01 2011
 
ук 03.007.02 2011
ук 03.007.02 2011ук 03.007.02 2011
ук 03.007.02 2011
 
ук 03.006.02 2011
ук 03.006.02 2011ук 03.006.02 2011
ук 03.006.02 2011
 
ук 03.005.03 2011
ук 03.005.03 2011ук 03.005.03 2011
ук 03.005.03 2011
 
ук 03.003.01 2011
ук 03.003.01 2011ук 03.003.01 2011
ук 03.003.01 2011
 
ук 03.001.02 2011
ук 03.001.02 2011ук 03.001.02 2011
ук 03.001.02 2011
 
ук 03.002.01 2011
ук 03.002.01 2011ук 03.002.01 2011
ук 03.002.01 2011
 
ук 03.005.02 2011
ук 03.005.02 2011ук 03.005.02 2011
ук 03.005.02 2011
 
трпо
трпотрпо
трпо
 
ооп
оопооп
ооп
 
управление задачами
управление задачамиуправление задачами
управление задачами
 

Платформа SmartActors

  • 1. SMARTACTORS Библиотека для нагруженных и масштабируемых приложений
  • 2. Процессоры уже не те!  Рост производительности одного ядра процессора остановился!  Рост производительности приложений теперь должен обеспечиваться за счет активного использования многоядерности. Herb Sutter, 2005 The Free Lunch Is Over A Fundamental Turn Toward Concurrency in Software “The bad news is that, at least in the short term, the growth will come mostly in directions that do not take most current applications along for their customary free ride.
  • 3. Требуются сильные специалисты, заранее сложно прогнозировать результат, трудно и, как следствие, дорого масштабировать, развивать и сопровождать систему. Многопоточные приложения слишком сложны
  • 4. Акторы – альтернатива многопоточности Carl Hewitt, Peter Bishop, Richard Steiger A Universal Modular ACTOR Formalism for Artificial Intelligence 1973 Carl Hewitt
  • 5. Что такое актор? Актор – вычислительная сущность, которая может за один шаг  Отправить конечное число сообщений другим акторам  Создать конечное число акторов  Выбрать поведение для приема следующего сообщения
  • 6. Многопоточность vs Акторы Многопоточность больше всего похожа на телефонию. Доступ к ресурсу – телефонный звонок. Адресат может быть занят или не брать трубку – живая и мертвая блокировки. Чтобы одновременно принимать много звонков, в телефонии используют офисные АТС – объекты синхронизации. Акторы похожи на почтовую систему. Чтобы выполнить какое-либо действие актор посылает сообщение – письмо адресату, и дальше занимается своими делами. Не нужно никаких блокировок вообще, можно послать много сообщений за 1 раз, но нет гарантий, что каждое сообщение будет доставлено адресату.
  • 7. Почему своя реализация акторов на Java, а не, например, Erlang, Scala и т.д.?  У нас низкий порог вхождения – разработчики без опыта работы – надо знать только чистый Java без Framework’ов.  Erlang не подходит для длительных вычислений (типичная ситуация, когда при решении многопоточных задач Erlang проигрывает в скорости – см., например, рис. справа 18,19 место и проигрыш в ~20 раз!)  Подход Scala (без инверсии зависимостей – Philipp Haler, Martin Odersky, 2006 Event-Based Programming Without Inversion Control) заставляет разработчика самого задумываться о распараллеливании задач в коде, то есть требуется наличие хорошего опыта  Мы предлагаем решения в акторах, которых нет ни на одной платформе (речь пойдет далее) benchmarksgame.alioth.debian.org
  • 8. Каждый актор запущен внутри некоторого процесса – Node. Каждый актор подключен к одному или нескольким каналам шины сообщений – MessageBus. Чтобы отправить сообщение актору, надо его опубликовать в соответствующем канале. Верхнеуровневое описание SmartActors
  • 9. Маршруты сообщений  Акторную модель можно представить в виде графа, где каждая вершина – это актор, а стрелка показывает, что один актор (основание стрелки) посылает сообщение другому актору (конец стрелки)  Маршрут сообщения – это путь в графе, которое проходит сообщение от момента создания до завершения обработки.  Обычно, информация о том, кому посылать сообщение зафиксирована в исходном коде актора.  Это требует модификации актора и, соответственно, обновления сервера, каждый раз, когда нам необходимо внести изменения в соответствующий алгоритм (например, в запрограммированный бизнес-процесс)
  • 10. Управление маршрутами без программиста  Наше решение предлагает вынести информацию об адресатах сообщений за пределы актора, так чтобы он ничего не знал о следующих акторах маршрута.  В таком случае акторы можно легко компоновать в любых сочетаниях для реализации сложных операций.  Маршруты формируются динамически, так что их можно менять без обновлений и перезагрузки сервера.  Изменение маршрута может проходить без участия программиста. Программисты нужны только для разработки новых акторов.
  • 11. Контрольные точки  При поступлении запроса (сообщение) от пользователя, при прохождении через контрольную точку сообщение сохраняется как есть в базе данных.  Дальше сообщение отправляется по маршруту  Если в результате сбоя в работе какого- либо актора, запрос в данный момент не может быть выполнен, то благодаря тому, что все данные сохранены в контрольной точке, мы можем исправить ошибку и повторить операцию без дополнительных действий со стороны пользователя. Контрольная точка сохраняет в БД входящее сообщение как есть Конечная точка маршрута сообщения
  • 12. Преимущества контрольных точек  Можно ответить пользователю раньше, чем завершится обработка операции, что уменьшает время отклика (ответ значит не то, что операция завершена, а то, что успешно принята заявка на выполнение операции – в большинстве случаев этого достаточно, как например, в платежном терминале)  Пользователь не видит, что внутри нашей системы могут проблемы – для него система всегда работает правильно – ошибка выражается лишь в увеличении времени обработки операции  Можно использовать несколько контрольных точек в одном маршруте, чтобы уменьшить объем работы в случае сбоя  Не теряется информация от внешних систем, например, платежных, в случае сбоя в нашей системе – данные от внешних систем сохранятся в некоторой контрольной точкеКонечная точка маршрута сообщения Контрольная точка сохраняет в БД входящее сообщение как естьвходящий запрос ответ
  • 13. Один формат для всех данных  Все данные хранятся в виде JSON в реляционной БД (не NoSQL база). Почему реляционная – есть транзакции.  Структура базы очень проста – всего 6 (!) запросов к БД.  Всегда известно среднее время выполнения любого запроса (в том числе полнотекстовых поисковых запросов). Поскольку запросы фиксированы, то время их выполнения не зависит от квалификации разработчика.  Не нужно миграций вообще – одновременно можно хранить сразу несколько версий одних данных (система будет корректно работать со всеми версиями)  Базу легко масштабировать и поддерживать скорость выполнения запросов – достаточно выделить нужные записи в отдельную коллекцию. Например, если у Вас объявления о продаже автомобилей и из них половина – это Toyota, то их можно выделить в отдельную коллекцию, или, наоборот, из-за ухода General Motors количество продаваемых Chevrolet, Opel снизилось, то их можно собрать в одну коллекцию. Это делается однажды написанными процедурами и хорошо отлаженными слияния и разделения коллекций, то есть участие программиста для этих операций не требуется. { ‘фамилия’: ‘Иванов’, ‘заказы’: [ { ‘дата’: ’01.09.2015’, ‘стоимость’: 2000 }, { ‘дата’: ’01.10.2015’, ‘стоимость’: 2000 } ] }
  • 14. Актор имеет имя и версию. Чтобы система стала использовать актор, разработчик обязан опубликовать его в библиотеке акторов. Ни один актор не потеряется, а библиотека будет хранить информацию обо всех акторах, которые когда либо были в нашей системе, а также о тех, кто их опубликовал! Исключается человеческий фактор при деплое на сервера, обеспечивается безопасность. Библиотека акторов
  • 15. Библиотека конфигураций  Структура каждого сервера описывается JSON  Все конфигурации с версиями хранятся в библиотеке конфигураций  Чтобы обновить конфигурацию на сервере, ему посылается сообщение с идентификатором конфигурации  Сервер обращается в библиотеку конфигураций и получает требуемую конфигурацию  При необходимости сервер сам выкачивает из библиотеки акторов требуемые конфигурацией акторы { ‘actors’: [{ ‘name’: ‘emailSender’, ‘smtp’: …, }, { ‘name’: ‘dailyReport’, … } ‘messagePaths’: [{ ‘name’: ‘newAd’, … }], ‘enpoints’: […] }
  • 16. Преимущества библиотеки конфигураций  Быстро клонировать сервера – достаточно установить нашу библиотеку (скопировать файлы) и послать сообщение с необходимой конфигурацией  Автоматический деплой – надо только написать конфигурационный файл  Можно выставлять время обновления  Автоматический откат – если возникают ошибки при инициализации сервера, то автоматически откатываемся до старой конфигурации  Ни одна конфигурация не теряется  Можно иметь одновременно сервера, которые работают с разными версиями данных, например, если часть клиентов, которые работают с Вами по API еще не перешла на новую версию { ‘actors’: [{ ‘name’: ‘emailSender’, ‘smtp’: …, }, { ‘name’: ‘dailyReport’, … } ‘messagePaths’: [{ ‘name’: ‘newAd’, … }], ‘enpoints’: […] }
  • 17. Методы обнаружения разладки Используем мат. статистику для обнаружения и исправления ошибок. Акторы-датчики измеряют поведение системы, потом эта передается на вход специальных алгоритмов, позволяющих обнаруживать ошибки на работающей системе без программистов и тестировщиков.
  • 18. Преимущества нашего решения  Масштабируемые приложения могут строить разработчики с небольшим опытом работы или вообще без опыта  Нет проблем с миграциями данных  Методы объективного контроля работоспособности всей системы, не зависящие от программистов и тестировщиков  Быстрое клонирование и развертывание серверов по необходимости  Возможность адаптации или правки автоматизируемых бизнес-процессов без участия программистов.
  • 19. Существующие внедрения – портал бесплатных объявлений и новостей  Команда – 5 студентов без опыта работы и филолог  Среднее время открытия страницы уменьшено с 4,5 с до 400 мс  Количество ошибок по сравнению с предыдущей версией уменьшилось в 1000 раз!  Количество серверов уменьшено с 15 до 3!  Объявление можно подавать простым текстом вместо длинной формы: “Двушка в Советском округе, проспект Мира, 64, в районе ост. Политех, 50/34/8, 3/5п, не требует ремонта, санузел раздельный, хрущевка.”
  • 20. Существующие внедрения – платформа для контекстной рекламы  Требование – время отклика строго меньше 100 мс  Попытки задействовать ElasticSearch, MongoDb и т.д. дают в некоторых случаях 200 мс и больше  Был написан актор, который хранит все критерии рекламных компаний сразу в памяти.  Получили время отклика 20-50 мс (сам поиск по структуре в памяти 5-20 мс)  Для масштабирования система поддерживает работу с несколькими экземплярами серверов
  • 21. Существующие внедрения – кроссплатформенное приложение  Приложение считает время по каждой задаче программиста, снимает скриншоты, мониторит активность клавиатуры и мыши  Интерфейс написан на HTML5 и CSS3  Бизнес-логика написана на нашей библиотеке  Приложение работает без изменений под Mac, Window, Linux (кроме методов снятия скриншота и логирования активности – это малая часть – до 40 ч работы – по сравнению со всем приложением)
  • 22. Контакты HWdTech, LLC Тюменцев Евгений Генеральный директор hwdtech.ru etyumentcev@hwdtech.ru +7 913 150 22 04