SlideShare a Scribd company logo
1 of 95
Платежная система
за один год
Дельгядо Филипп, ИТИС
Банальности, проверенные опытом
ver. 0.2
О чем этот доклад
Что такое платежные системы, какие сложности при их разработке
Как жить, когда много конкурирующих транзакций и сложная
предметная область
Как строить и менять процесс разработки
Удачные и неудачные практики и решения
(С) Дельгядо Филипп, ИТИС, 2016
Основные вызовы
Старт проекта с нуля
Нет команды
Нет постановок
Высокие требования к проекту
Надежность
Производительность
Безопасность
Сжатые сроки и ограниченный бюджет
Секретность
(С) Дельгядо Филипп, ИТИС, 2016
Проект
1 большая комната
8 программистов
8 не только программистов
1 год
(С) Дельгядо Филипп, ИТИС, 20164
Платежные системы
Что сложного в платежных системах и как это сказывается на архитектуре
проекта
(С) Дельгядо Филипп, ИТИС, 2016
Платежи – это очень просто
Пока не пришли юристы
Например
115-ФЗ – О противодействии отмыванию доходов
161-ФЗ – О национальной платежной системе
152-ФЗ – О защите персональных данных
222-ФЗ – Об азартных играх
PCI DSS – О безопасности кредитных карт
И это далеко не все….
(С) Дельгядо Филипп, ИТИС, 2016
Требования к архитектуре
(С) Дельгядо Филипп, ИТИС, 2016
Требования к архитектуре
Очевидность кода и всех решений
Команда активно развивается, некогда изучать.
(С) Дельгядо Филипп, ИТИС, 2016
Требования к архитектуре
Очевидность кода и всех решений
Команда активно развивается, некогда изучать.
Простота code review
Иначе его никто не будет делать.
(С) Дельгядо Филипп, ИТИС, 2016
Требования к архитектуре
Очевидность кода и всех решений
Команда активно развивается, некогда изучать.
Простота code review
Иначе его никто не будет делать.
Надежность решения
Нельзя терять деньги.
(С) Дельгядо Филипп, ИТИС, 2016
Требования к архитектуре
Очевидность кода и всех решений
Команда активно развивается, некогда изучать.
Простота code review
Иначе его никто не будет делать.
Надежность решения
Нельзя терять деньги.
Высокая доступность
Без простоев, планируемых и непланируемых
(С) Дельгядо Филипп, ИТИС, 2016
Требования к архитектуре
Очевидность кода и всех решений
Команда активно развивается, некогда изучать.
Простота code review
Иначе его никто не будет делать.
Надежность решения
Нельзя терять деньги.
Высокая доступность
Без простоев, планируемых и непланируемых
Производительность
(С) Дельгядо Филипп, ИТИС, 2016
Принципы архитектуры
(С) Дельгядо Филипп, ИТИС, 2016
Принципы архитектуры
KISS
Keep it simple, stupid
(С) Дельгядо Филипп, ИТИС, 2016
Принципы архитектуры
KISS
Keep it simple, stupid
No magic
Не доверяем сложным (особенно чужим) решениям
(С) Дельгядо Филипп, ИТИС, 2016
Принципы архитектуры
KISS
Keep it simple, stupid
No magic
Не доверяем сложным (особенно чужим) решениям
IDE driven development
Если IDE не поддерживает фреймворк, то мы его не используем
(С) Дельгядо Филипп, ИТИС, 2016
Принципы архитектуры
KISS
Keep it simple, stupid
No magic
Не доверяем сложным (особенно чужим) решениям
IDE driven development
Если IDE не поддерживает фреймворк, то мы его не используем
Static typing
Лучшие тестеры – это компилятор и инспекции
(С) Дельгядо Филипп, ИТИС, 2016
Принципы архитектуры
KISS
Keep it simple, stupid
No magic
Не доверяем сложным (особенно чужим) решениям
IDE driven development
Если IDE не поддерживает фреймворк, то мы его не используем
Static typing
Лучшие тестеры – это компилятор и инспекции
All can crash
(С) Дельгядо Филипп, ИТИС, 2016
Обычная трехзвенка
Java 8
Jetty, Jackson, Velocity, Log4j2, Flyway, JUnit
Spring
IoC, MVC, JDBC Templates, Security
PostgreSQL
PostgreSQL 9.5, pg-crypto
Json4rpc
(С) Дельгядо Филипп, ИТИС, 2016
Как реализовать платеж
Машины состояний, велосипеды, очереди
(С) Дельгядо Филипп, ИТИС, 2016
Особенности платежа
Платеж всегда сложный
много состояний и переходов
(С) Дельгядо Филипп, ИТИС, 2016
Особенности платежа
Платеж всегда сложный
много состояний и переходов
Платеж может быть долгим
нельзя запихнуть платеж в один поток или одну транзакцию
(С) Дельгядо Филипп, ИТИС, 2016
Особенности платежа
Платеж всегда сложный
много состояний и переходов
Платеж может быть долгим
нельзя запихнуть платеж в один поток или одну транзакцию
Платеж должен быть надежным
все промежуточные стадии надо гарантированно записать на диск
(С) Дельгядо Филипп, ИТИС, 2016
Особенности платежа
Платеж всегда сложный
много состояний и переходов
Платеж может быть долгим
нельзя запихнуть платеж в один поток или одну транзакцию
Платеж должен быть надежным
все промежуточные стадии надо гарантированно записать на диск
Платежи бывают разные
надо уметь быстро менять логику
(С) Дельгядо Филипп, ИТИС, 2016
Особенности платежа
Гарантии доставки
Хитрая логика дожатия всех внешних взаимодействий
(С) Дельгядо Филипп, ИТИС, 2016
Особенности платежа
Гарантии доставки
Хитрая логика дожатия всех внешних взаимодействий
Всюду таймеры
Ничто не должно быть вечным
(С) Дельгядо Филипп, ИТИС, 2016
Особенности платежа
Гарантии доставки
Хитрая логика дожатия всех внешних взаимодействий
Всюду таймеры
Ничто не должно быть вечным
Ручная проверка зависших операций
(С) Дельгядо Филипп, ИТИС, 2016
Особенности платежа
Гарантии доставки
Хитрая логика дожатия всех внешних взаимодействий
Всюду таймеры
Ничто не должно быть вечным
Ручная проверка зависших операций
Все можно поменять руками
Но со строгим аудитом
(С) Дельгядо Филипп, ИТИС, 2016
Основная идея
Платеж переходит между состояниями
Переходы вызываются
предыдущим переходом
внешними событиями
срабатыванием таймеров
Переход меняет
состояние платежа,
контекст,
таймеры
Переход может делать что-то полезное, но идемпотемптно
(С) Дельгядо Филипп, ИТИС, 2016
Первый вариант реализации
Каждый переход выполняется асинхронно и в транзакции
Переходы и таймеры выстраиваем в очередь задач на пуле нитей
После падения повторяем последние переходы и восстанавливаем
таймеры
В БД сохраняем состояние и контекст
Все сделано на стандартном java concurrency
(С) Дельгядо Филипп, ИТИС, 2016
Первый вариант реализации
Может работать только на одном сервере
Долгое восстановление после сбоя
Нужны ручные синхронизации
Код сложно отлаживать и модифицировать
(С) Дельгядо Филипп, ИТИС, 2016
Хотелось бы
Много обработчиков на разных серверах
На каждый платеж своя надежная очередь переходов
Очереди и таймеры с гарантией обработки
Все действия по платежу проводятся строго последовательно
Обработка каждого события - одна транзакция
(С) Дельгядо Филипп, ИТИС, 2016
Второй вариант
Кластеризация
Безотказность
Простота
(С) Дельгядо Филипп, ИТИС, 2016
Второй вариант
Кластеризация
Безотказность
Простота
Нужно делать свою надежную очередь задач и распределенную
блокировку :(
(С) Дельгядо Филипп, ИТИС, 2016
Использование БД
Проблемы и их возможные решения
(С) Дельгядо Филипп, ИТИС, 2016
Много операций
Один платеж – около 10 транзакций
Каждая транзакция изменяет несколько сущностей
контексты, лимиты, проводки, состояния, таймеры
Часто меняются общие для всех сущности
лимиты, аккумулирующие счета
По ТЗ нужно 100 платежей в секунду
Итого нужны тысячи IOPS
(С) Дельгядо Филипп, ИТИС, 2016
Очень много операций
Один платеж – около 10 транзакций
Каждая транзакция изменяет несколько сущностей
контексты, лимиты, проводки, состояния, таймеры
Часто меняются общие для всех сущности
лимиты, аккумулирующие счета
По ТЗ нужно 100 платежей в секунду
Итого нужны тысячи IOPS
(С) Дельгядо Филипп, ИТИС, 2016
Ой!
Простое решение
(С) Дельгядо Филипп, ИТИС, 2016
4KB Random
write
Цена
400GB SAS Enterprise SSD 40 000 IOPS 600$
400GB SAS 12Gb/s Enterprise SSD 85 000 IOPS 3000$
1.6TB SATA III Enterprise SSD 14 000 IOPS 3500$
Платежи
update – дорогая операция
блокировки, лишний seek
Особенно когда конкурентная
(С) Дельгядо Филипп, ИТИС, 2016
Платежи
update – дорогая операция
блокировки, лишний seek
Особенно когда конкурентная
Заменим на insert
Текущее значение кэшируем
Раз в N операций объединяем
(С) Дельгядо Филипп, ИТИС, 2016
Очень много таблиц…
Много таблиц и связей
Сложно менять структуру
Без ОРМа не выжить
(С) Дельгядо Филипп, ИТИС, 2016
контекст платежа
Как можно решить проблему
Храним объекты в виде JSON
Jackson позволяет гибко описывать сериализацию через аннотации
(С) Дельгядо Филипп, ИТИС, 2016
Как можно решить проблему
Храним объекты в виде JSON
Jackson позволяет гибко описывать сериализацию через аннотации
В специальном типе ::json или ::jsonb
(С) Дельгядо Филипп, ИТИС, 2016
Как можно решить проблему
Храним объекты в виде JSON
Jackson позволяет гибко описывать сериализацию через аннотации
В специальном типе ::json или ::jsonb
Выкидываем ORM
(С) Дельгядо Филипп, ИТИС, 2016
Как можно решить проблему
Храним объекты в виде JSON
Jackson позволяет гибко описывать сериализацию через аннотации
В специальном типе ::json или ::jsonb
Выкидываем ORM
Отдельные поля для индексов и PK
(С) Дельгядо Филипп, ИТИС, 2016
А еще…
Храним номер версии сериализации
он точно будет быстро расти
(С) Дельгядо Филипп, ИТИС, 2016
А еще…
Храним номер версии сериализации
он точно будет быстро расти
Заранее готовим код для обновления версий
он точно пригодится
(С) Дельгядо Филипп, ИТИС, 2016
А еще…
Храним номер версии сериализации
он точно будет быстро расти
Заранее готовим код для обновления версий
он точно пригодится
Учим десериализатор поддерживать конфликты
а лучше бы и полиморфизм
(С) Дельгядо Филипп, ИТИС, 2016
А еще…
Храним номер версии сериализации
он точно будет быстро расти
Заранее готовим код для обновления версий
он точно пригодится
Учим десериализатор поддерживать конфликты
а лучше бы и полиморфизм
Прописываем приоритет индексных полей над содержимым
или делаем записи иммутабельными
(С) Дельгядо Филипп, ИТИС, 2016
В результате
(С) Дельгядо Филипп, ИТИС, 2016
Что хорошо
Производительность
Оптимистическая блокировка
История изменений
Атомарность изменений
Защита
В результате
(С) Дельгядо Филипп, ИТИС, 2016
Что хорошо
Производительность
Оптимистическая блокировка
История изменений
Атомарность изменений
Защита
И какие будут проблемы
Атомарность изменений
Сложность администрирования
Не поддерживается ОРМами
Как это выглядит в БД
(С) Дельгядо Филипп, ИТИС, 2016
create table operations (
id bigint not null primary key,
refId bigint,
state varchar(20),
schema bigint not null,
data json );
Как это выглядит в БД
(С) Дельгядо Филипп, ИТИС, 2016
create table operations (
id bigint not null primary key,
refId bigint,
state varchar(20),
schema bigint not null,
data json ); select id,
data->'amount'->>'amount',
data->'amount'->>'currency'
from operations;
Как это выглядит в БД
(С) Дельгядо Филипп, ИТИС, 2016
create table operations (
id bigint not null primary key,
refId bigint,
state varchar(20),
schema bigint not null,
data json ); select id,
data->'amount'->>'amount',
data->'amount'->>'currency'
from operations;
NoSQL?
Активно используем join
Используем транзакции, блокировки
Используем все инструменты обеспечения надежности
Используем sequence
(С) Дельгядо Филипп, ИТИС, 2016
Очередь на PostgreSQL
Или как изобрести велосипед, но дешево
(С) Дельгядо Филипп, ИТИС, 2016
Вспомним, что нам хотелось
Много обработчиков на разных серверах
На каждый платеж своя распределенная очередь переходов и
таймеров с гарантией обработки
Все действия по платежу проводятся строго последовательно
Обработка каждого события - одна транзакция
(С) Дельгядо Филипп, ИТИС, 2016
Очередь на skip locked
(С) Дельгядо Филипп, ИТИС, 2016
ROW queue
1 alpha
2 beta
3 gamma
4 delta
queue event
alpha a1
alpha a2
beta b1
gamma g4
delta d2
delta d3
Таблица очередей: Queue
Таблица событий: Event
Очередь на skip locked
(С) Дельгядо Филипп, ИТИС, 2016
ROW queue
1 alpha
2 beta
3 gamma
4 delta
queue event
alpha a1
alpha a2
beta b1
gamma g4
delta d2
delta d3
select q.queue, e.event
from q join e
order by e.event asc
limit 1
for update
skip locked;
Очередь на skip locked
(С) Дельгядо Филипп, ИТИС, 2016
ROW queue
1 alpha
2 beta
3 gamma
4 delta
queue event
alpha a1
alpha a2
beta b1
gamma g4
delta d2
delta d3
select q.queue, e.event
from q join e
order by e.event asc
limit 1
for update
skip locked;
P P
Очередь на skip locked
(С) Дельгядо Филипп, ИТИС, 2016
ROW queue
1 alpha
2 beta
3 gamma
4 delta
queue event
alpha a1
alpha a2
beta b1
gamma g4
delta d2
delta d3
select q.queue, e.event
from q join e
order by e.event asc
limit 1
for update
skip locked;
Очередь на skip locked
(С) Дельгядо Филипп, ИТИС, 2016
ROW queue
1 alpha
2 beta
3 gamma
4 delta
queue event
alpha a1
alpha a2
beta b1
gamma g4
delta d2
delta d3
select q.queue, e.event
from q join e
order by e.event asc
limit 1
for update
skip locked;
P
P
Замечания
Добавление события ничего не блокирует
Число обработчиков на производительность почти не влияет
Корректно работает на всех уровнях изоляции
(С) Дельгядо Филипп, ИТИС, 2016
Замечания
Добавление события ничего не блокирует
Число обработчиков на производительность почти не влияет
Корректно работает на всех уровнях изоляции
Удалять обработанные события надо в той же транзакции
(С) Дельгядо Филипп, ИТИС, 2016
Замечания
Добавление события ничего не блокирует
Число обработчиков на производительность почти не влияет
Корректно работает на всех уровнях изоляции
Удалять обработанные события надо в той же транзакции
Для событий можно указывать дату актуальности
и можно не делать других таймеров
(С) Дельгядо Филипп, ИТИС, 2016
Замечания
Добавление события ничего не блокирует
Число обработчиков на производительность почти не влияет
Корректно работает на всех уровнях изоляции
Удалять обработанные события надо в той же транзакции
Для событий можно указывать дату актуальности
и можно не делать других таймеров
В запросе нужно явно указывать время жизни транзакции
события не должно слишком долго обрабатываться
(С) Дельгядо Филипп, ИТИС, 2016
Удачные практики
Что из опыта спорно, но удачно
(С) Дельгядо Филипп, ИТИС, 2016
Тестирование
Функциональные тесты обязательны
дампы БД сильно ускоряют прохождение тестов
Интеграционные тесты для отладки
и с ними спокойнее
Unit-тесты в крайнем случае
и лучше без mock’ов
Все тесты должны быть запускаемы у программиста
а не только из CI
Без разрешения Test Lead продакшн не обновляется
(С) Дельгядо Филипп, ИТИС, 2016
Безопасное обновление
Первый шаг
Читаем старое
Пишем старое и новое
Второй шаг
Копируем старое в новое
Третий шаг
Читаем новое
Пишем новое
Четвертый шаг
Удаляем старое
(С) Дельгядо Филипп, ИТИС, 2016
V1
Old
New
V1
V2
Old
New
Old
New
V2 New
Как все это организовать
Чтобы и программисты не задолбались, и заказчик не плакал
(С) Дельгядо Филипп, ИТИС, 2016
Каждому проекту – своя методология
(С) Alistair Cockburn
Оригинал статьи http://goo.gl/PFnoe0
Перевод на http://goo.gl/SUCgzC
(С) Дельгядо Филипп, ИТИС, 2016
Разработка в вакууме
Нет проверенных постановок
Исследовательские задачи
Демонстрация продукта может быть в любое время
Много исследовательских задач
(С) Дельгядо Филипп, ИТИС, 2016
Разработка в вакууме
Нет проверенных постановок
Исследовательские задачи
Демонстрация продукта может быть в любое время
Много исследовательских задач
(С) Дельгядо Филипп, ИТИС, 2016
Запуск
Много неожиданных требований
Ежедневное обновление продукта
Объемы задач непредсказуемы
(С) Дельгядо Филипп, ИТИС, 2016
Запуск
Много неожиданных требований
Ежедневное обновление продукта
Объемы задач непредсказуемы
(С) Дельгядо Филипп, ИТИС, 2016
Развитие
Двухнедельное планирование с закрытым списком
Объемы задач предсказуемы
Регулярные выкладки
(С) Дельгядо Филипп, ИТИС, 2016
Развитие
Двухнедельное планирование с закрытым списком
Объемы задач предсказуемы
Регулярные выкладки
(С) Дельгядо Филипп, ИТИС, 2016
Основные практики
(С) Дельгядо Филипп, ИТИС, 2016
Основные практики
Зачем???
(С) Дельгядо Филипп, ИТИС, 2016
Основные практики
Зачем??
Бережем свой труд
(С) Дельгядо Филипп, ИТИС, 2016
Основные практики
Зачем??
Бережем свой труд
До трех не обобщать
(С) Дельгядо Филипп, ИТИС, 2016
Основные практики
Зачем??
Бережем свой труд
До трех не обобщать
Слона едим по частям
(С) Дельгядо Филипп, ИТИС, 2016
Основные практики
Зачем??
Бережем свой труд
До трех не обобщать
Слона едим по частям
Шашечки или ехать
(С) Дельгядо Филипп, ИТИС, 2016
Еще немножко граблей
Неправильные выборы, вечная боль, сделанные ошибки
(С) Дельгядо Филипп, ИТИС, 2016
Люди
Никто не понимает транзакций
Любят сложный код
Поголовная любовь к магии
Доверие обещаниям вендоров
(С) Дельгядо Филипп, ИТИС, 2016
Нерешенные задачи
Как защитить данные от системного администратора
и при этом обеспечить автоматическую выкладку
(С) Дельгядо Филипп, ИТИС, 2016
Нерешенные задачи
Как защитить данные от системного администратора
и при этом обеспечить автоматическую выкладку
Как не терять транзакций при падении ДЦ
за разумные деньги
(С) Дельгядо Филипп, ИТИС, 2016
Нерешенные задачи
Как защитить данные от системного администратора
и при этом обеспечить автоматическую выкладку
Как не терять транзакций при падении ДЦ
за разумные деньги
Как найти много хороших разработчиков
и вписаться в бюджет
(С) Дельгядо Филипп, ИТИС, 2016
Ошибки
Активное использование Spring
Слишком притягательна магия Spring Security
И слишком много разработчиков его любят
(С) Дельгядо Филипп, ИТИС, 2016
Ошибки
Активное использование Spring
Слишком притягательна магия Spring Security
И слишком много разработчиков его любят
Тесты пишутся на чужеродном стеке
Так получилось, что пишем на Python (PyTest)
(С) Дельгядо Филипп, ИТИС, 2016
Ошибки
Активное использование Spring
Слишком притягательна магия Spring Security
И слишком много разработчиков его любят
Тесты пишутся на чужеродном стеке
Так получилось, что пишем на Python (PyTest)
Погнались за модным Docker
Для наших условий – слишком много костылей
(С) Дельгядо Филипп, ИТИС, 2016
Не идеальные инструменты
Youtrack
Git
Maven
(С) Дельгядо Филипп, ИТИС, 2016
Вопросы и контакты
Дельгядо Филипп,
dph.main@gmail.com
phd@itasystems.ru
vk.com/dphil
(С) Дельгядо Филипп, ИТИС, 2016
http://itasystems.ru/

More Related Content

Viewers also liked

Автоматическая рубрикация текстов / Злата Обуховская (Рамблер)
Автоматическая рубрикация текстов / Злата Обуховская (Рамблер)Автоматическая рубрикация текстов / Злата Обуховская (Рамблер)
Автоматическая рубрикация текстов / Злата Обуховская (Рамблер)Ontico
 
"Изоморфный D3 + MALEVICH", Алексей Охрименко, MoscowJS 25
"Изоморфный D3 + MALEVICH", Алексей Охрименко, MoscowJS 25"Изоморфный D3 + MALEVICH", Алексей Охрименко, MoscowJS 25
"Изоморфный D3 + MALEVICH", Алексей Охрименко, MoscowJS 25MoscowJS
 
Доставляя неприятности: о профессиональных наказаниях подчиненных в интеллект...
Доставляя неприятности: о профессиональных наказаниях подчиненных в интеллект...Доставляя неприятности: о профессиональных наказаниях подчиненных в интеллект...
Доставляя неприятности: о профессиональных наказаниях подчиненных в интеллект...Ontico
 
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Ontico
 
Angular 2 не так уж и плох... А если задуматься, то и просто хорош / Алексей ...
Angular 2 не так уж и плох... А если задуматься, то и просто хорош / Алексей ...Angular 2 не так уж и плох... А если задуматься, то и просто хорош / Алексей ...
Angular 2 не так уж и плох... А если задуматься, то и просто хорош / Алексей ...Ontico
 
Ключевые навыки успешной Agile-команды / Дмитрий Лобасев (lobasev.ru)
Ключевые навыки успешной Agile-команды / Дмитрий Лобасев (lobasev.ru)Ключевые навыки успешной Agile-команды / Дмитрий Лобасев (lobasev.ru)
Ключевые навыки успешной Agile-команды / Дмитрий Лобасев (lobasev.ru)Ontico
 
Архитектура поиска в Avito / Андрей Смирнов (Avito)
Архитектура поиска в Avito / Андрей Смирнов (Avito)Архитектура поиска в Avito / Андрей Смирнов (Avito)
Архитектура поиска в Avito / Андрей Смирнов (Avito)Ontico
 
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)Ontico
 
Как понять, что происходит на сервере? / Александр Крижановский (NatSys Lab.,...
Как понять, что происходит на сервере? / Александр Крижановский (NatSys Lab.,...Как понять, что происходит на сервере? / Александр Крижановский (NatSys Lab.,...
Как понять, что происходит на сервере? / Александр Крижановский (NatSys Lab.,...Ontico
 
Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...
Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...
Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...Ontico
 
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)Ontico
 
Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Ontico
 
Как устроен поиск / Андрей Аксенов (Sphinx)
Как устроен поиск / Андрей Аксенов (Sphinx)Как устроен поиск / Андрей Аксенов (Sphinx)
Как устроен поиск / Андрей Аксенов (Sphinx)Ontico
 
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...Ontico
 
Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...
Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...
Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...Ontico
 
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)Ontico
 
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)Ontico
 
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...Ontico
 

Viewers also liked (20)

Автоматическая рубрикация текстов / Злата Обуховская (Рамблер)
Автоматическая рубрикация текстов / Злата Обуховская (Рамблер)Автоматическая рубрикация текстов / Злата Обуховская (Рамблер)
Автоматическая рубрикация текстов / Злата Обуховская (Рамблер)
 
"Изоморфный D3 + MALEVICH", Алексей Охрименко, MoscowJS 25
"Изоморфный D3 + MALEVICH", Алексей Охрименко, MoscowJS 25"Изоморфный D3 + MALEVICH", Алексей Охрименко, MoscowJS 25
"Изоморфный D3 + MALEVICH", Алексей Охрименко, MoscowJS 25
 
Devconf15
Devconf15Devconf15
Devconf15
 
pgconf.ru 2015 avito postgresql
pgconf.ru 2015 avito postgresqlpgconf.ru 2015 avito postgresql
pgconf.ru 2015 avito postgresql
 
Доставляя неприятности: о профессиональных наказаниях подчиненных в интеллект...
Доставляя неприятности: о профессиональных наказаниях подчиненных в интеллект...Доставляя неприятности: о профессиональных наказаниях подчиненных в интеллект...
Доставляя неприятности: о профессиональных наказаниях подчиненных в интеллект...
 
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
 
Angular 2 не так уж и плох... А если задуматься, то и просто хорош / Алексей ...
Angular 2 не так уж и плох... А если задуматься, то и просто хорош / Алексей ...Angular 2 не так уж и плох... А если задуматься, то и просто хорош / Алексей ...
Angular 2 не так уж и плох... А если задуматься, то и просто хорош / Алексей ...
 
Ключевые навыки успешной Agile-команды / Дмитрий Лобасев (lobasev.ru)
Ключевые навыки успешной Agile-команды / Дмитрий Лобасев (lobasev.ru)Ключевые навыки успешной Agile-команды / Дмитрий Лобасев (lobasev.ru)
Ключевые навыки успешной Agile-команды / Дмитрий Лобасев (lobasev.ru)
 
Архитектура поиска в Avito / Андрей Смирнов (Avito)
Архитектура поиска в Avito / Андрей Смирнов (Avito)Архитектура поиска в Avito / Андрей Смирнов (Avito)
Архитектура поиска в Avito / Андрей Смирнов (Avito)
 
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
 
Как понять, что происходит на сервере? / Александр Крижановский (NatSys Lab.,...
Как понять, что происходит на сервере? / Александр Крижановский (NatSys Lab.,...Как понять, что происходит на сервере? / Александр Крижановский (NatSys Lab.,...
Как понять, что происходит на сервере? / Александр Крижановский (NatSys Lab.,...
 
Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...
Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...
Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...
 
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
 
Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...
 
Как устроен поиск / Андрей Аксенов (Sphinx)
Как устроен поиск / Андрей Аксенов (Sphinx)Как устроен поиск / Андрей Аксенов (Sphinx)
Как устроен поиск / Андрей Аксенов (Sphinx)
 
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
 
Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...
Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...
Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...
 
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
 
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
 
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
 

Similar to Платежная система за год / Филипп Дельгядо (Информационные технологии и системы)

Архитектура платежной системы: почти enterprise / Филипп Дельгядо (Информацио...
Архитектура платежной системы: почти enterprise / Филипп Дельгядо (Информацио...Архитектура платежной системы: почти enterprise / Филипп Дельгядо (Информацио...
Архитектура платежной системы: почти enterprise / Филипп Дельгядо (Информацио...Ontico
 
Тесты в стиле BDD на C# (Подходы и инструменты; SpecFlow, BDDfy)
Тесты в стиле BDD на C# (Подходы и инструменты; SpecFlow, BDDfy)Тесты в стиле BDD на C# (Подходы и инструменты; SpecFlow, BDDfy)
Тесты в стиле BDD на C# (Подходы и инструменты; SpecFlow, BDDfy)Dmytro Zharii
 
Как писать красивый код или основы SOLID
Как писать красивый код или основы SOLIDКак писать красивый код или основы SOLID
Как писать красивый код или основы SOLIDPavel Tsukanov
 
5 правил успешной разработки приложений для бренда
5 правил успешной разработки приложений для бренда 5 правил успешной разработки приложений для бренда
5 правил успешной разработки приложений для бренда Heads&Hands
 
лекция типовые ошибки
лекция типовые ошибкилекция типовые ошибки
лекция типовые ошибкиYury Zelensky
 
Customer Development – Agile подход к поиску клиента. Вебинар Miscorsoft вирт...
Customer Development – Agile подход к поиску клиента. Вебинар Miscorsoft вирт...Customer Development – Agile подход к поиску клиента. Вебинар Miscorsoft вирт...
Customer Development – Agile подход к поиску клиента. Вебинар Miscorsoft вирт...Ilya Korolev
 
Кейс 3. Тимур. КлиматУфа
Кейс 3. Тимур. КлиматУфаКейс 3. Тимур. КлиматУфа
Кейс 3. Тимур. КлиматУфаvirmarketing
 
Risk Stories Seminar. XP Injection. Kiev. Ukraine
Risk Stories Seminar. XP Injection. Kiev. UkraineRisk Stories Seminar. XP Injection. Kiev. Ukraine
Risk Stories Seminar. XP Injection. Kiev. UkraineSergiy Povolyashko, PMP
 
Машинное обучение в кибербезопасности
Машинное обучение в кибербезопасностиМашинное обучение в кибербезопасности
Машинное обучение в кибербезопасностиAleksey Lukatskiy
 
Презентация EASYNODES
Презентация EASYNODESПрезентация EASYNODES
Презентация EASYNODESDmitryChernov12
 
DevOps-трансформация Альфа-Банка / Антон Исанин (Альфа-Банк)
DevOps-трансформация Альфа-Банка / Антон Исанин (Альфа-Банк)DevOps-трансформация Альфа-Банка / Антон Исанин (Альфа-Банк)
DevOps-трансформация Альфа-Банка / Антон Исанин (Альфа-Банк)Ontico
 
WebCamp 2016: PHP. Николай Паламарчук: PHP и микросервисы
WebCamp 2016: PHP. Николай Паламарчук: PHP и микросервисыWebCamp 2016: PHP. Николай Паламарчук: PHP и микросервисы
WebCamp 2016: PHP. Николай Паламарчук: PHP и микросервисыWebCamp
 
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...Yandex
 
Py con 2010_django_project_dev_full_circle
Py con 2010_django_project_dev_full_circlePy con 2010_django_project_dev_full_circle
Py con 2010_django_project_dev_full_circleRostislav Bryzgunov
 
"Этот код плохой, его нужно переписать". Слышали? Как обосновать
"Этот код плохой, его нужно переписать". Слышали? Как обосновать"Этот код плохой, его нужно переписать". Слышали? Как обосновать
"Этот код плохой, его нужно переписать". Слышали? Как обосноватьMaksym Bezuglyi
 
Как попасть на следующий уровень карьеры и зарплаты в C#
Как попасть на следующий уровень карьеры и зарплаты в C#Как попасть на следующий уровень карьеры и зарплаты в C#
Как попасть на следующий уровень карьеры и зарплаты в C#geekfamilyrussia
 
ІГОР СТАРЧЕУС «Впровадження GDPR у великій fin tech компанії» QADay 2019
ІГОР СТАРЧЕУС «Впровадження GDPR у великій fin tech компанії»  QADay 2019ІГОР СТАРЧЕУС «Впровадження GDPR у великій fin tech компанії»  QADay 2019
ІГОР СТАРЧЕУС «Впровадження GDPR у великій fin tech компанії» QADay 2019GoQA
 
13 советов, от которых зависит успешность вашего SOC
13 советов, от которых зависит успешность вашего SOC13 советов, от которых зависит успешность вашего SOC
13 советов, от которых зависит успешность вашего SOCAleksey Lukatskiy
 
Финансовое измерение ИБ. 10 кейсов
Финансовое измерение ИБ. 10 кейсовФинансовое измерение ИБ. 10 кейсов
Финансовое измерение ИБ. 10 кейсовAleksey Lukatskiy
 

Similar to Платежная система за год / Филипп Дельгядо (Информационные технологии и системы) (20)

Архитектура платежной системы: почти enterprise / Филипп Дельгядо (Информацио...
Архитектура платежной системы: почти enterprise / Филипп Дельгядо (Информацио...Архитектура платежной системы: почти enterprise / Филипп Дельгядо (Информацио...
Архитектура платежной системы: почти enterprise / Филипп Дельгядо (Информацио...
 
Тесты в стиле BDD на C# (Подходы и инструменты; SpecFlow, BDDfy)
Тесты в стиле BDD на C# (Подходы и инструменты; SpecFlow, BDDfy)Тесты в стиле BDD на C# (Подходы и инструменты; SpecFlow, BDDfy)
Тесты в стиле BDD на C# (Подходы и инструменты; SpecFlow, BDDfy)
 
Как писать красивый код или основы SOLID
Как писать красивый код или основы SOLIDКак писать красивый код или основы SOLID
Как писать красивый код или основы SOLID
 
5 правил успешной разработки приложений для бренда
5 правил успешной разработки приложений для бренда 5 правил успешной разработки приложений для бренда
5 правил успешной разработки приложений для бренда
 
лекция типовые ошибки
лекция типовые ошибкилекция типовые ошибки
лекция типовые ошибки
 
От SOC v0.1 к SOC v2.0
От SOC v0.1 к SOC v2.0От SOC v0.1 к SOC v2.0
От SOC v0.1 к SOC v2.0
 
Customer Development – Agile подход к поиску клиента. Вебинар Miscorsoft вирт...
Customer Development – Agile подход к поиску клиента. Вебинар Miscorsoft вирт...Customer Development – Agile подход к поиску клиента. Вебинар Miscorsoft вирт...
Customer Development – Agile подход к поиску клиента. Вебинар Miscorsoft вирт...
 
Кейс 3. Тимур. КлиматУфа
Кейс 3. Тимур. КлиматУфаКейс 3. Тимур. КлиматУфа
Кейс 3. Тимур. КлиматУфа
 
Risk Stories Seminar. XP Injection. Kiev. Ukraine
Risk Stories Seminar. XP Injection. Kiev. UkraineRisk Stories Seminar. XP Injection. Kiev. Ukraine
Risk Stories Seminar. XP Injection. Kiev. Ukraine
 
Машинное обучение в кибербезопасности
Машинное обучение в кибербезопасностиМашинное обучение в кибербезопасности
Машинное обучение в кибербезопасности
 
Презентация EASYNODES
Презентация EASYNODESПрезентация EASYNODES
Презентация EASYNODES
 
DevOps-трансформация Альфа-Банка / Антон Исанин (Альфа-Банк)
DevOps-трансформация Альфа-Банка / Антон Исанин (Альфа-Банк)DevOps-трансформация Альфа-Банка / Антон Исанин (Альфа-Банк)
DevOps-трансформация Альфа-Банка / Антон Исанин (Альфа-Банк)
 
WebCamp 2016: PHP. Николай Паламарчук: PHP и микросервисы
WebCamp 2016: PHP. Николай Паламарчук: PHP и микросервисыWebCamp 2016: PHP. Николай Паламарчук: PHP и микросервисы
WebCamp 2016: PHP. Николай Паламарчук: PHP и микросервисы
 
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...
 
Py con 2010_django_project_dev_full_circle
Py con 2010_django_project_dev_full_circlePy con 2010_django_project_dev_full_circle
Py con 2010_django_project_dev_full_circle
 
"Этот код плохой, его нужно переписать". Слышали? Как обосновать
"Этот код плохой, его нужно переписать". Слышали? Как обосновать"Этот код плохой, его нужно переписать". Слышали? Как обосновать
"Этот код плохой, его нужно переписать". Слышали? Как обосновать
 
Как попасть на следующий уровень карьеры и зарплаты в C#
Как попасть на следующий уровень карьеры и зарплаты в C#Как попасть на следующий уровень карьеры и зарплаты в C#
Как попасть на следующий уровень карьеры и зарплаты в C#
 
ІГОР СТАРЧЕУС «Впровадження GDPR у великій fin tech компанії» QADay 2019
ІГОР СТАРЧЕУС «Впровадження GDPR у великій fin tech компанії»  QADay 2019ІГОР СТАРЧЕУС «Впровадження GDPR у великій fin tech компанії»  QADay 2019
ІГОР СТАРЧЕУС «Впровадження GDPR у великій fin tech компанії» QADay 2019
 
13 советов, от которых зависит успешность вашего SOC
13 советов, от которых зависит успешность вашего SOC13 советов, от которых зависит успешность вашего SOC
13 советов, от которых зависит успешность вашего SOC
 
Финансовое измерение ИБ. 10 кейсов
Финансовое измерение ИБ. 10 кейсовФинансовое измерение ИБ. 10 кейсов
Финансовое измерение ИБ. 10 кейсов
 

More from Ontico

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...Ontico
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Ontico
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Ontico
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Ontico
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Ontico
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)Ontico
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Ontico
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Ontico
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)Ontico
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)Ontico
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Ontico
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Ontico
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Ontico
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Ontico
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)Ontico
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Ontico
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Ontico
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...Ontico
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Ontico
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Ontico
 

More from Ontico (20)

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
 

Платежная система за год / Филипп Дельгядо (Информационные технологии и системы)

  • 1. Платежная система за один год Дельгядо Филипп, ИТИС Банальности, проверенные опытом ver. 0.2
  • 2. О чем этот доклад Что такое платежные системы, какие сложности при их разработке Как жить, когда много конкурирующих транзакций и сложная предметная область Как строить и менять процесс разработки Удачные и неудачные практики и решения (С) Дельгядо Филипп, ИТИС, 2016
  • 3. Основные вызовы Старт проекта с нуля Нет команды Нет постановок Высокие требования к проекту Надежность Производительность Безопасность Сжатые сроки и ограниченный бюджет Секретность (С) Дельгядо Филипп, ИТИС, 2016
  • 4. Проект 1 большая комната 8 программистов 8 не только программистов 1 год (С) Дельгядо Филипп, ИТИС, 20164
  • 5. Платежные системы Что сложного в платежных системах и как это сказывается на архитектуре проекта (С) Дельгядо Филипп, ИТИС, 2016
  • 6. Платежи – это очень просто
  • 8. Например 115-ФЗ – О противодействии отмыванию доходов 161-ФЗ – О национальной платежной системе 152-ФЗ – О защите персональных данных 222-ФЗ – Об азартных играх PCI DSS – О безопасности кредитных карт И это далеко не все…. (С) Дельгядо Филипп, ИТИС, 2016
  • 9. Требования к архитектуре (С) Дельгядо Филипп, ИТИС, 2016
  • 10. Требования к архитектуре Очевидность кода и всех решений Команда активно развивается, некогда изучать. (С) Дельгядо Филипп, ИТИС, 2016
  • 11. Требования к архитектуре Очевидность кода и всех решений Команда активно развивается, некогда изучать. Простота code review Иначе его никто не будет делать. (С) Дельгядо Филипп, ИТИС, 2016
  • 12. Требования к архитектуре Очевидность кода и всех решений Команда активно развивается, некогда изучать. Простота code review Иначе его никто не будет делать. Надежность решения Нельзя терять деньги. (С) Дельгядо Филипп, ИТИС, 2016
  • 13. Требования к архитектуре Очевидность кода и всех решений Команда активно развивается, некогда изучать. Простота code review Иначе его никто не будет делать. Надежность решения Нельзя терять деньги. Высокая доступность Без простоев, планируемых и непланируемых (С) Дельгядо Филипп, ИТИС, 2016
  • 14. Требования к архитектуре Очевидность кода и всех решений Команда активно развивается, некогда изучать. Простота code review Иначе его никто не будет делать. Надежность решения Нельзя терять деньги. Высокая доступность Без простоев, планируемых и непланируемых Производительность (С) Дельгядо Филипп, ИТИС, 2016
  • 16. Принципы архитектуры KISS Keep it simple, stupid (С) Дельгядо Филипп, ИТИС, 2016
  • 17. Принципы архитектуры KISS Keep it simple, stupid No magic Не доверяем сложным (особенно чужим) решениям (С) Дельгядо Филипп, ИТИС, 2016
  • 18. Принципы архитектуры KISS Keep it simple, stupid No magic Не доверяем сложным (особенно чужим) решениям IDE driven development Если IDE не поддерживает фреймворк, то мы его не используем (С) Дельгядо Филипп, ИТИС, 2016
  • 19. Принципы архитектуры KISS Keep it simple, stupid No magic Не доверяем сложным (особенно чужим) решениям IDE driven development Если IDE не поддерживает фреймворк, то мы его не используем Static typing Лучшие тестеры – это компилятор и инспекции (С) Дельгядо Филипп, ИТИС, 2016
  • 20. Принципы архитектуры KISS Keep it simple, stupid No magic Не доверяем сложным (особенно чужим) решениям IDE driven development Если IDE не поддерживает фреймворк, то мы его не используем Static typing Лучшие тестеры – это компилятор и инспекции All can crash (С) Дельгядо Филипп, ИТИС, 2016
  • 21. Обычная трехзвенка Java 8 Jetty, Jackson, Velocity, Log4j2, Flyway, JUnit Spring IoC, MVC, JDBC Templates, Security PostgreSQL PostgreSQL 9.5, pg-crypto Json4rpc (С) Дельгядо Филипп, ИТИС, 2016
  • 22. Как реализовать платеж Машины состояний, велосипеды, очереди (С) Дельгядо Филипп, ИТИС, 2016
  • 23. Особенности платежа Платеж всегда сложный много состояний и переходов (С) Дельгядо Филипп, ИТИС, 2016
  • 24. Особенности платежа Платеж всегда сложный много состояний и переходов Платеж может быть долгим нельзя запихнуть платеж в один поток или одну транзакцию (С) Дельгядо Филипп, ИТИС, 2016
  • 25. Особенности платежа Платеж всегда сложный много состояний и переходов Платеж может быть долгим нельзя запихнуть платеж в один поток или одну транзакцию Платеж должен быть надежным все промежуточные стадии надо гарантированно записать на диск (С) Дельгядо Филипп, ИТИС, 2016
  • 26. Особенности платежа Платеж всегда сложный много состояний и переходов Платеж может быть долгим нельзя запихнуть платеж в один поток или одну транзакцию Платеж должен быть надежным все промежуточные стадии надо гарантированно записать на диск Платежи бывают разные надо уметь быстро менять логику (С) Дельгядо Филипп, ИТИС, 2016
  • 27. Особенности платежа Гарантии доставки Хитрая логика дожатия всех внешних взаимодействий (С) Дельгядо Филипп, ИТИС, 2016
  • 28. Особенности платежа Гарантии доставки Хитрая логика дожатия всех внешних взаимодействий Всюду таймеры Ничто не должно быть вечным (С) Дельгядо Филипп, ИТИС, 2016
  • 29. Особенности платежа Гарантии доставки Хитрая логика дожатия всех внешних взаимодействий Всюду таймеры Ничто не должно быть вечным Ручная проверка зависших операций (С) Дельгядо Филипп, ИТИС, 2016
  • 30. Особенности платежа Гарантии доставки Хитрая логика дожатия всех внешних взаимодействий Всюду таймеры Ничто не должно быть вечным Ручная проверка зависших операций Все можно поменять руками Но со строгим аудитом (С) Дельгядо Филипп, ИТИС, 2016
  • 31. Основная идея Платеж переходит между состояниями Переходы вызываются предыдущим переходом внешними событиями срабатыванием таймеров Переход меняет состояние платежа, контекст, таймеры Переход может делать что-то полезное, но идемпотемптно (С) Дельгядо Филипп, ИТИС, 2016
  • 32. Первый вариант реализации Каждый переход выполняется асинхронно и в транзакции Переходы и таймеры выстраиваем в очередь задач на пуле нитей После падения повторяем последние переходы и восстанавливаем таймеры В БД сохраняем состояние и контекст Все сделано на стандартном java concurrency (С) Дельгядо Филипп, ИТИС, 2016
  • 33. Первый вариант реализации Может работать только на одном сервере Долгое восстановление после сбоя Нужны ручные синхронизации Код сложно отлаживать и модифицировать (С) Дельгядо Филипп, ИТИС, 2016
  • 34. Хотелось бы Много обработчиков на разных серверах На каждый платеж своя надежная очередь переходов Очереди и таймеры с гарантией обработки Все действия по платежу проводятся строго последовательно Обработка каждого события - одна транзакция (С) Дельгядо Филипп, ИТИС, 2016
  • 36. Второй вариант Кластеризация Безотказность Простота Нужно делать свою надежную очередь задач и распределенную блокировку :( (С) Дельгядо Филипп, ИТИС, 2016
  • 37. Использование БД Проблемы и их возможные решения (С) Дельгядо Филипп, ИТИС, 2016
  • 38. Много операций Один платеж – около 10 транзакций Каждая транзакция изменяет несколько сущностей контексты, лимиты, проводки, состояния, таймеры Часто меняются общие для всех сущности лимиты, аккумулирующие счета По ТЗ нужно 100 платежей в секунду Итого нужны тысячи IOPS (С) Дельгядо Филипп, ИТИС, 2016
  • 39. Очень много операций Один платеж – около 10 транзакций Каждая транзакция изменяет несколько сущностей контексты, лимиты, проводки, состояния, таймеры Часто меняются общие для всех сущности лимиты, аккумулирующие счета По ТЗ нужно 100 платежей в секунду Итого нужны тысячи IOPS (С) Дельгядо Филипп, ИТИС, 2016 Ой!
  • 40. Простое решение (С) Дельгядо Филипп, ИТИС, 2016 4KB Random write Цена 400GB SAS Enterprise SSD 40 000 IOPS 600$ 400GB SAS 12Gb/s Enterprise SSD 85 000 IOPS 3000$ 1.6TB SATA III Enterprise SSD 14 000 IOPS 3500$
  • 41. Платежи update – дорогая операция блокировки, лишний seek Особенно когда конкурентная (С) Дельгядо Филипп, ИТИС, 2016
  • 42. Платежи update – дорогая операция блокировки, лишний seek Особенно когда конкурентная Заменим на insert Текущее значение кэшируем Раз в N операций объединяем (С) Дельгядо Филипп, ИТИС, 2016
  • 43. Очень много таблиц… Много таблиц и связей Сложно менять структуру Без ОРМа не выжить (С) Дельгядо Филипп, ИТИС, 2016 контекст платежа
  • 44. Как можно решить проблему Храним объекты в виде JSON Jackson позволяет гибко описывать сериализацию через аннотации (С) Дельгядо Филипп, ИТИС, 2016
  • 45. Как можно решить проблему Храним объекты в виде JSON Jackson позволяет гибко описывать сериализацию через аннотации В специальном типе ::json или ::jsonb (С) Дельгядо Филипп, ИТИС, 2016
  • 46. Как можно решить проблему Храним объекты в виде JSON Jackson позволяет гибко описывать сериализацию через аннотации В специальном типе ::json или ::jsonb Выкидываем ORM (С) Дельгядо Филипп, ИТИС, 2016
  • 47. Как можно решить проблему Храним объекты в виде JSON Jackson позволяет гибко описывать сериализацию через аннотации В специальном типе ::json или ::jsonb Выкидываем ORM Отдельные поля для индексов и PK (С) Дельгядо Филипп, ИТИС, 2016
  • 48. А еще… Храним номер версии сериализации он точно будет быстро расти (С) Дельгядо Филипп, ИТИС, 2016
  • 49. А еще… Храним номер версии сериализации он точно будет быстро расти Заранее готовим код для обновления версий он точно пригодится (С) Дельгядо Филипп, ИТИС, 2016
  • 50. А еще… Храним номер версии сериализации он точно будет быстро расти Заранее готовим код для обновления версий он точно пригодится Учим десериализатор поддерживать конфликты а лучше бы и полиморфизм (С) Дельгядо Филипп, ИТИС, 2016
  • 51. А еще… Храним номер версии сериализации он точно будет быстро расти Заранее готовим код для обновления версий он точно пригодится Учим десериализатор поддерживать конфликты а лучше бы и полиморфизм Прописываем приоритет индексных полей над содержимым или делаем записи иммутабельными (С) Дельгядо Филипп, ИТИС, 2016
  • 52. В результате (С) Дельгядо Филипп, ИТИС, 2016 Что хорошо Производительность Оптимистическая блокировка История изменений Атомарность изменений Защита
  • 53. В результате (С) Дельгядо Филипп, ИТИС, 2016 Что хорошо Производительность Оптимистическая блокировка История изменений Атомарность изменений Защита И какие будут проблемы Атомарность изменений Сложность администрирования Не поддерживается ОРМами
  • 54. Как это выглядит в БД (С) Дельгядо Филипп, ИТИС, 2016 create table operations ( id bigint not null primary key, refId bigint, state varchar(20), schema bigint not null, data json );
  • 55. Как это выглядит в БД (С) Дельгядо Филипп, ИТИС, 2016 create table operations ( id bigint not null primary key, refId bigint, state varchar(20), schema bigint not null, data json ); select id, data->'amount'->>'amount', data->'amount'->>'currency' from operations;
  • 56. Как это выглядит в БД (С) Дельгядо Филипп, ИТИС, 2016 create table operations ( id bigint not null primary key, refId bigint, state varchar(20), schema bigint not null, data json ); select id, data->'amount'->>'amount', data->'amount'->>'currency' from operations;
  • 57. NoSQL? Активно используем join Используем транзакции, блокировки Используем все инструменты обеспечения надежности Используем sequence (С) Дельгядо Филипп, ИТИС, 2016
  • 58. Очередь на PostgreSQL Или как изобрести велосипед, но дешево (С) Дельгядо Филипп, ИТИС, 2016
  • 59. Вспомним, что нам хотелось Много обработчиков на разных серверах На каждый платеж своя распределенная очередь переходов и таймеров с гарантией обработки Все действия по платежу проводятся строго последовательно Обработка каждого события - одна транзакция (С) Дельгядо Филипп, ИТИС, 2016
  • 60. Очередь на skip locked (С) Дельгядо Филипп, ИТИС, 2016 ROW queue 1 alpha 2 beta 3 gamma 4 delta queue event alpha a1 alpha a2 beta b1 gamma g4 delta d2 delta d3 Таблица очередей: Queue Таблица событий: Event
  • 61. Очередь на skip locked (С) Дельгядо Филипп, ИТИС, 2016 ROW queue 1 alpha 2 beta 3 gamma 4 delta queue event alpha a1 alpha a2 beta b1 gamma g4 delta d2 delta d3 select q.queue, e.event from q join e order by e.event asc limit 1 for update skip locked;
  • 62. Очередь на skip locked (С) Дельгядо Филипп, ИТИС, 2016 ROW queue 1 alpha 2 beta 3 gamma 4 delta queue event alpha a1 alpha a2 beta b1 gamma g4 delta d2 delta d3 select q.queue, e.event from q join e order by e.event asc limit 1 for update skip locked; P P
  • 63. Очередь на skip locked (С) Дельгядо Филипп, ИТИС, 2016 ROW queue 1 alpha 2 beta 3 gamma 4 delta queue event alpha a1 alpha a2 beta b1 gamma g4 delta d2 delta d3 select q.queue, e.event from q join e order by e.event asc limit 1 for update skip locked;
  • 64. Очередь на skip locked (С) Дельгядо Филипп, ИТИС, 2016 ROW queue 1 alpha 2 beta 3 gamma 4 delta queue event alpha a1 alpha a2 beta b1 gamma g4 delta d2 delta d3 select q.queue, e.event from q join e order by e.event asc limit 1 for update skip locked; P P
  • 65. Замечания Добавление события ничего не блокирует Число обработчиков на производительность почти не влияет Корректно работает на всех уровнях изоляции (С) Дельгядо Филипп, ИТИС, 2016
  • 66. Замечания Добавление события ничего не блокирует Число обработчиков на производительность почти не влияет Корректно работает на всех уровнях изоляции Удалять обработанные события надо в той же транзакции (С) Дельгядо Филипп, ИТИС, 2016
  • 67. Замечания Добавление события ничего не блокирует Число обработчиков на производительность почти не влияет Корректно работает на всех уровнях изоляции Удалять обработанные события надо в той же транзакции Для событий можно указывать дату актуальности и можно не делать других таймеров (С) Дельгядо Филипп, ИТИС, 2016
  • 68. Замечания Добавление события ничего не блокирует Число обработчиков на производительность почти не влияет Корректно работает на всех уровнях изоляции Удалять обработанные события надо в той же транзакции Для событий можно указывать дату актуальности и можно не делать других таймеров В запросе нужно явно указывать время жизни транзакции события не должно слишком долго обрабатываться (С) Дельгядо Филипп, ИТИС, 2016
  • 69. Удачные практики Что из опыта спорно, но удачно (С) Дельгядо Филипп, ИТИС, 2016
  • 70. Тестирование Функциональные тесты обязательны дампы БД сильно ускоряют прохождение тестов Интеграционные тесты для отладки и с ними спокойнее Unit-тесты в крайнем случае и лучше без mock’ов Все тесты должны быть запускаемы у программиста а не только из CI Без разрешения Test Lead продакшн не обновляется (С) Дельгядо Филипп, ИТИС, 2016
  • 71. Безопасное обновление Первый шаг Читаем старое Пишем старое и новое Второй шаг Копируем старое в новое Третий шаг Читаем новое Пишем новое Четвертый шаг Удаляем старое (С) Дельгядо Филипп, ИТИС, 2016 V1 Old New V1 V2 Old New Old New V2 New
  • 72. Как все это организовать Чтобы и программисты не задолбались, и заказчик не плакал (С) Дельгядо Филипп, ИТИС, 2016
  • 73. Каждому проекту – своя методология (С) Alistair Cockburn Оригинал статьи http://goo.gl/PFnoe0 Перевод на http://goo.gl/SUCgzC (С) Дельгядо Филипп, ИТИС, 2016
  • 74. Разработка в вакууме Нет проверенных постановок Исследовательские задачи Демонстрация продукта может быть в любое время Много исследовательских задач (С) Дельгядо Филипп, ИТИС, 2016
  • 75. Разработка в вакууме Нет проверенных постановок Исследовательские задачи Демонстрация продукта может быть в любое время Много исследовательских задач (С) Дельгядо Филипп, ИТИС, 2016
  • 76. Запуск Много неожиданных требований Ежедневное обновление продукта Объемы задач непредсказуемы (С) Дельгядо Филипп, ИТИС, 2016
  • 77. Запуск Много неожиданных требований Ежедневное обновление продукта Объемы задач непредсказуемы (С) Дельгядо Филипп, ИТИС, 2016
  • 78. Развитие Двухнедельное планирование с закрытым списком Объемы задач предсказуемы Регулярные выкладки (С) Дельгядо Филипп, ИТИС, 2016
  • 79. Развитие Двухнедельное планирование с закрытым списком Объемы задач предсказуемы Регулярные выкладки (С) Дельгядо Филипп, ИТИС, 2016
  • 82. Основные практики Зачем?? Бережем свой труд (С) Дельгядо Филипп, ИТИС, 2016
  • 83. Основные практики Зачем?? Бережем свой труд До трех не обобщать (С) Дельгядо Филипп, ИТИС, 2016
  • 84. Основные практики Зачем?? Бережем свой труд До трех не обобщать Слона едим по частям (С) Дельгядо Филипп, ИТИС, 2016
  • 85. Основные практики Зачем?? Бережем свой труд До трех не обобщать Слона едим по частям Шашечки или ехать (С) Дельгядо Филипп, ИТИС, 2016
  • 86. Еще немножко граблей Неправильные выборы, вечная боль, сделанные ошибки (С) Дельгядо Филипп, ИТИС, 2016
  • 87. Люди Никто не понимает транзакций Любят сложный код Поголовная любовь к магии Доверие обещаниям вендоров (С) Дельгядо Филипп, ИТИС, 2016
  • 88. Нерешенные задачи Как защитить данные от системного администратора и при этом обеспечить автоматическую выкладку (С) Дельгядо Филипп, ИТИС, 2016
  • 89. Нерешенные задачи Как защитить данные от системного администратора и при этом обеспечить автоматическую выкладку Как не терять транзакций при падении ДЦ за разумные деньги (С) Дельгядо Филипп, ИТИС, 2016
  • 90. Нерешенные задачи Как защитить данные от системного администратора и при этом обеспечить автоматическую выкладку Как не терять транзакций при падении ДЦ за разумные деньги Как найти много хороших разработчиков и вписаться в бюджет (С) Дельгядо Филипп, ИТИС, 2016
  • 91. Ошибки Активное использование Spring Слишком притягательна магия Spring Security И слишком много разработчиков его любят (С) Дельгядо Филипп, ИТИС, 2016
  • 92. Ошибки Активное использование Spring Слишком притягательна магия Spring Security И слишком много разработчиков его любят Тесты пишутся на чужеродном стеке Так получилось, что пишем на Python (PyTest) (С) Дельгядо Филипп, ИТИС, 2016
  • 93. Ошибки Активное использование Spring Слишком притягательна магия Spring Security И слишком много разработчиков его любят Тесты пишутся на чужеродном стеке Так получилось, что пишем на Python (PyTest) Погнались за модным Docker Для наших условий – слишком много костылей (С) Дельгядо Филипп, ИТИС, 2016
  • 94. Не идеальные инструменты Youtrack Git Maven (С) Дельгядо Филипп, ИТИС, 2016
  • 95. Вопросы и контакты Дельгядо Филипп, dph.main@gmail.com phd@itasystems.ru vk.com/dphil (С) Дельгядо Филипп, ИТИС, 2016 http://itasystems.ru/

Editor's Notes

  1. При
  2. 10 вспомогательных сущностей, списки, кортежи (map), списки кортежей, карты флагов и т.п.
  3. Разница между json и jsonb – отдельный вопрос
  4. Разница между json и jsonb – отдельный вопрос
  5. Одесса, вокзал. Запарившаяся дама с горой чемоданов мечется в поисках такси. Подъезжает наконец какая-то машина: «Куда желаете?» Дама осматривает авто: «Позвольте, вы же не такси!» – «Я не понял, мадам, так вам ехать или шашечки?» Простите, что цитирую такой знаменитый фольклор; просто, как выяснилось, не все этот анекдот знают.
  6. Одесса, вокзал. Запарившаяся дама с горой чемоданов мечется в поисках такси. Подъезжает наконец какая-то машина: «Куда желаете?» Дама осматривает авто: «Позвольте, вы же не такси!» – «Я не понял, мадам, так вам ехать или шашечки?» Простите, что цитирую такой знаменитый фольклор; просто, как выяснилось, не все этот анекдот знают.
  7. Одесса, вокзал. Запарившаяся дама с горой чемоданов мечется в поисках такси. Подъезжает наконец какая-то машина: «Куда желаете?» Дама осматривает авто: «Позвольте, вы же не такси!» – «Я не понял, мадам, так вам ехать или шашечки?» Простите, что цитирую такой знаменитый фольклор; просто, как выяснилось, не все этот анекдот знают.
  8. Одесса, вокзал. Запарившаяся дама с горой чемоданов мечется в поисках такси. Подъезжает наконец какая-то машина: «Куда желаете?» Дама осматривает авто: «Позвольте, вы же не такси!» – «Я не понял, мадам, так вам ехать или шашечки?» Простите, что цитирую такой знаменитый фольклор; просто, как выяснилось, не все этот анекдот знают.
  9. Одесса, вокзал. Запарившаяся дама с горой чемоданов мечется в поисках такси. Подъезжает наконец какая-то машина: «Куда желаете?» Дама осматривает авто: «Позвольте, вы же не такси!» – «Я не понял, мадам, так вам ехать или шашечки?» Простите, что цитирую такой знаменитый фольклор; просто, как выяснилось, не все этот анекдот знают.
  10. Одесса, вокзал. Запарившаяся дама с горой чемоданов мечется в поисках такси. Подъезжает наконец какая-то машина: «Куда желаете?» Дама осматривает авто: «Позвольте, вы же не такси!» – «Я не понял, мадам, так вам ехать или шашечки?» Простите, что цитирую такой знаменитый фольклор; просто, как выяснилось, не все этот анекдот знают.