2015-12-06 Евгений Тюменцев - Разработка надежных...

55
Разработка параллельных, надежных приложений: быстро и дешево Тюменцев Евгений HWdTech, LLC hwdtech.ru

Upload: happydev

Post on 14-Apr-2017

185 views

Category:

Software


0 download

TRANSCRIPT

Page 1: 2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенных приложений: быстро и дешево

Разработка параллельных, надежных приложений: быстро и

дешево

Тюменцев Евгений

HWdTech, LLC

hwdtech.ru

Page 2: 2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенных приложений: быстро и дешево

О себе

15 лет преподаю ИМИТ, ФКН ОмГУ ИТ-компании Школа программиста 11 лет разрабатываю ПО разработчик, архитектор, PM, руководство до 70 человек

Тюменцев Евгений

Page 3: 2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенных приложений: быстро и дешево

Особенности разработки ПО

Фредерик Брукс

«Мифический человеко-

месяц»

Page 4: 2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенных приложений: быстро и дешево

Программист VS каменщик

Page 5: 2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенных приложений: быстро и дешево

Почему так получается у программистов?

Page 6: 2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенных приложений: быстро и дешево

Три следствия неограниченного роста трудозатрат, которые приводят к незапланированным расходам

Page 7: 2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенных приложений: быстро и дешево

Сроки нарушаются

Page 8: 2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенных приложений: быстро и дешево

Требуется все больше разработчиков

«Ну а здесь, знаешь ли, приходится бежать со всех ног, чтобы только остаться на том же месте, а чтобы попасть в другое место нужно бежать вдвое быстрее.»

Алиса в Зазеркалье, Льюис Кэролл

Page 9: 2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенных приложений: быстро и дешево
Page 10: 2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенных приложений: быстро и дешево

Логика Хоара

1969 г. An Axiomatic Basis for Computer Programming

1971 г. Procedures and Parameters: An Axiomatic Approach

1980 г. премия Тьюринга

1990 г. Медаль “Пионер компьютерной техники”

2000 г. рыцарский титул за заслуги в области образования и компьютерной техники, премия Киото

Чарльз Хоар

Page 11: 2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенных приложений: быстро и дешево

Факты о логике Хоара

Если использовать 1. статическое связывание

2. Рекурсию

3. Вложенные процедуры

4. Процедуры, принимающие в качестве параметров процедуры.

5. Глобальные переменные

то не существует полной системы аксиом.

Page 12: 2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенных приложений: быстро и дешево

Логика Хоара часто противоречива

⊢𝐿 𝞿 и ⊢𝐿 `𝞿

Значит, что любое изменение в коде надо тестировать!

Page 13: 2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенных приложений: быстро и дешево

Противоречивость: сильно страшно?

Page 14: 2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенных приложений: быстро и дешево

Противоречивость: сильно страшно?

Page 15: 2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенных приложений: быстро и дешево

Противоречивость: сильно страшно?

Page 16: 2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенных приложений: быстро и дешево

Противоречивость: сильно страшно?

Page 17: 2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенных приложений: быстро и дешево

Противоречивость: сильно страшно?

Page 18: 2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенных приложений: быстро и дешево

Базы данных

• Скорость выполнения запросов • Миграция • Репликация • Непротиворечивость • ORM

Page 19: 2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенных приложений: быстро и дешево

Нет сложным миграциям и модификациям БД

Page 20: 2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенных приложений: быстро и дешево

Один формат для всех данных

{ ‘фамилия’: ‘Иванов’, ‘заказы’: [ { ‘дата’: ’01.09.2015’, ‘стоимость’: 2000 }, { ‘дата’: ’01.10.2015’, ‘стоимость’: 2000 } ] }

Page 21: 2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенных приложений: быстро и дешево

Результаты применения json

• Всего 6 запросов к БД описывают все операции с данными

Page 22: 2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенных приложений: быстро и дешево

Результаты применения json

• Всего 6 запросов к БД описывают все операции с данными

• Известно время выполнения всех запросов

Page 23: 2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенных приложений: быстро и дешево

Результаты применения json

• Всего 6 запросов к БД описывают все операции с данными

• Известно время выполнения всех запросов

• Скорость выполнения запросов не зависит от квалификации программиста

Page 24: 2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенных приложений: быстро и дешево

Результаты применения json

• Всего 6 запросов к БД описывают все операции с данными

• Известно время выполнения всех запросов

• Скорость выполнения запросов не зависит от квалификации программиста

• Структура БД не меняется – не нужны миграции

Page 25: 2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенных приложений: быстро и дешево

Результаты применения json

• Всего 6 запросов к БД описывают все операции с данными

• Известно время выполнения всех запросов

• Скорость выполнения запросов не зависит от квалификации программиста

• Структура БД не меняется – не нужны миграции

• Можно хранить одновременно несколько версий одних данных

Page 26: 2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенных приложений: быстро и дешево

Результаты применения json

• Всего 6 запросов к БД описывают все операции с данными

• Известно время выполнения всех запросов

• Скорость выполнения запросов не зависит от квалификации программиста

• Структура БД не меняется – не нужны миграции

• Можно хранить одновременно несколько версий одних данных

• БД легко масштабируется, так как структура базы однородная

Page 27: 2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенных приложений: быстро и дешево

Интерфейс работы с данными

interface IObject

{

object getValue(string name);

void setValue(string name, object val);

}

class Field<T>

{

public Field(string name) {…}

public abstract T this[IObject o]

{

get;

set;

}

}

Генерация строго типизированных

оберток для IObject по интерфейсам

interface MyObj

{

int A

{

get;

}

string B

{

get;

set;

}

}

Page 28: 2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенных приложений: быстро и дешево

Процессоры уже не те!

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.”

Page 29: 2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенных приложений: быстро и дешево

Многопоточность? Это Вам не это!

Page 30: 2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенных приложений: быстро и дешево
Page 31: 2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенных приложений: быстро и дешево

Акторы – альтернатива многопоточности

Carl Hewitt,

Peter Bishop,

Richard Steiger

A Universal Modular ACTOR Formalism for Artificial Intelligence

1973

Page 32: 2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенных приложений: быстро и дешево

Что такое актор?

Актор – вычислительная сущность, которая может за один шаг • Отправить конечное число

сообщений другим акторам

• Создать конечное число

акторов

• Выбрать поведение для приема следующего сообщения

Page 33: 2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенных приложений: быстро и дешево

Многопоточность vs Акторы

Page 34: 2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенных приложений: быстро и дешево

Архитектура

Page 35: 2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенных приложений: быстро и дешево

Маршруты сообщений

Page 36: 2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенных приложений: быстро и дешево

Управление маршрутами без программиста

Page 37: 2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенных приложений: быстро и дешево
Page 38: 2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенных приложений: быстро и дешево

Контрольные точки

Контрольная точка сохраняет в БД входящее сообщение как есть

Конечная точка маршрута сообщения

ответ

Page 39: 2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенных приложений: быстро и дешево
Page 40: 2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенных приложений: быстро и дешево

Методы обнаружения разладки

Карты Шухарта

Все процессы подвержены вариабельности. Управляемое явление - используя прошлый опыт можно предсказать, каких его вариаций можно ожидать в будущем. ГОСТ Р 50779.42-99 (ISO 8258-91) выявление точек выхода

процесса из стабильного состояния для установления причин появившегося отклонения и их устранения.

Page 41: 2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенных приложений: быстро и дешево

Как узнать, что изменения дали положительный эффект

Page 42: 2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенных приложений: быстро и дешево

Если коллеги не идут на сотрудничество

Page 43: 2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенных приложений: быстро и дешево

Активность пользователей можно создавать

Page 44: 2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенных приложений: быстро и дешево

Библиотека акторов

Публикация Загрузка по требованию

Page 45: 2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенных приложений: быстро и дешево

Преимущества библиотеки конфигураций

• Быстро клонировать

• Автоматический деплой

• Можно выставлять время обновления

• Автоматический откат

• Ни одна конфигурация не теряется

• Можно иметь одновременно сервера, которые работают с разными версиями данных

{

‘actors’: [{

‘name’: ‘emailSender ’,

‘smtp’: …,

},

{

‘name’: ‘dailyReport’,

}

‘messagePaths’: [{

‘name’: ‘newAd’,

}],

‘enpoints’: […]

}

Page 46: 2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенных приложений: быстро и дешево

Преимущества решения

• Любое приложение в

состоит из стандартных и простых блоков

• Компоновать блоки между собой можно без программирования

• Возможности системы ограничены только набором готовых блоков

• Блоки можно разрабатывать независимо друг от друга

Page 47: 2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенных приложений: быстро и дешево

Существующие внедрения – портал бесплатных объявлений и новостей

• Команда – 5 студентов без опыта работы и филолог

Page 48: 2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенных приложений: быстро и дешево

Существующие внедрения – портал бесплатных объявлений и новостей

• Команда – 5 студентов без опыта работы и филолог

• Среднее время открытия страницы уменьшено с 4,5 с до 400 мс

Page 49: 2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенных приложений: быстро и дешево

Существующие внедрения – портал бесплатных объявлений и новостей

• Команда – 5 студентов без опыта работы и филолог

• Среднее время открытия страницы уменьшено с 4,5 с до 400 мс

• Количество ошибок по сравнению с предыдущей версией уменьшилось в 1000 раз!

Page 50: 2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенных приложений: быстро и дешево

Существующие внедрения – портал бесплатных объявлений и новостей

• Команда – 5 студентов без опыта работы и филолог

• Среднее время открытия страницы уменьшено с 4,5 с до 400 мс

• Количество ошибок по сравнению с предыдущей версией уменьшилось в 1000 раз!

• Количество серверов уменьшено с 15 до 3!

Page 51: 2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенных приложений: быстро и дешево

Существующие внедрения – портал бесплатных объявлений и новостей

• Команда – 5 студентов без опыта работы и филолог

• Среднее время открытия страницы уменьшено с 4,5 с до 400 мс

• Количество ошибок по сравнению с предыдущей версией уменьшилось в 1000 раз!

• Количество серверов уменьшено с 15 до 3!

• Объявление можно подавать простым текстом вместо длинной формы: “Двушка в Советском округе, улица Мира, 64, в районе ост. Политех, 50/34/8, 3/5п, не требует ремонта, санузел раздельный, хрущевка.”

Page 52: 2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенных приложений: быстро и дешево

Test configuration:

server station:

desktop workstation

CPU - Intel(R) Core(TM) i3 CPU 530 @ 2.93GHz

Memory - 8 Gb

OS - Debian 8.2 jessie

GUI - none

client station:

notebook Dell Inspirion N5050

CPU - Intel(R) Core(TM) i5-2450M processor (2.50 GHz with Turbo Boost up to 3.10 GHz)

Memory - 4 Gb

OS - Mint 17.2 Cinnamon 64-bit 2.6.11

network device:

D-Link DES-1005A 10/100 Fast Ethernet Switch

Существующие внедрения – банерокрутилка

Page 53: 2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенных приложений: быстро и дешево

Существующие внедрения – банерокрутилка

30 seconds tests: Running 30s test @ http://192.168.100.193:9909 8 threads and 64 connections Thread Stats Avg Stdev Max +/- Stdev Latency 5.15ms 0.90ms 25.36ms 98.66% Req/Sec 1.57k 67.74 1.86k 85.75% 374839 requests in 30.01s, 141.92MB read Requests/sec: 12489.41

8 hours test: Running 480m test @ http://192.168.100.193:9909 8 threads and 64 connections Thread Stats Avg Stdev Max +/- Stdev Latency 4.52ms 681.66us 79.35ms 95.95% Req/Sec 1.78k 51.51 3.23k 76.61% 408472044 requests in 480.00m, 77.61GB read Requests/sec: 14183.01

Page 54: 2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенных приложений: быстро и дешево

Существующие внедрения – кроссплатформенное приложение

• Приложение считает время по каждой задаче программиста, снимает скриншоты, мониторит активность клавиатуры и мыши

• Интерфейс написан на HTML5 и CSS3

• Бизнес-логика написана на нашей библиотеке

• Приложение работает без изменений под Mac, Window, Linux (кроме методов снятия скриншота и логирования активности – это малая часть – до 40 ч работы – по сравнению со всем приложением)

Page 55: 2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенных приложений: быстро и дешево

Спасибо за внимание!

Тюменцев Евгений

hwdtech.ru

[email protected]

twitter.com/etyumentcev