SlideShare a Scribd company logo
1 of 25
Асинхронный 
билинг для Такси 
Pavel Vinogradov для IzhDevCom 
Izhevsk, 2014
Pavel Vinogradov 
• Lead Java Developer / Architect 
• Работаю в: Epam / NixDev 
• Специализируюсь в 
– Billing systems 
– Data Mining 
Контакты: 
Email: pavel_vinogradov@epam.com 
Twitter: pavelvinogradov
Запускать сервисы такси сейчас модно
Мы тоже приняли в этом участие 
• Существующее решение одной из служб такси не справлялось с 
ростом нагрузки 
• За 4 месяца надо было понять как работает существующая 
система 
• Разработать новый сервис тарификатора 
• Реализовать набор новых требований 
• Выполнить интеграцию с существующими системами
Проблемы существовавшего решения 
• Биллинг, реализованный в виде хранимок в БД 
• Монолитные функции, которые умеют слишком многое 
• Отсутствие документации 
• Существующие нагрузки все чаще приводили к блокировкам в БД 
• Необходимость развивать систему
Наши задачи 
• Разработка системы тарифов и бизнес правил для тарификации 
услуг такси 
• Предоставление API для управления тарифами из панели 
администратора 
• Интеграция с существующей структурой БД 
• Поддержка популярных БД (SqlServer, MySQL, PgSQL) 
• Обработка потока 60 тыс. заказов в сутки
Что мы использовали 
• Java Runtime 1.6.x -> 1.7.x 
• Java EE 6.0 Glassfish 3.x 
• JAX-WS (Metro) 
• EJB 3.1 
• JPA 2.0 (EclipseLink) 
• Quartz Scheduler 2.x 
• SqlServer 2005, PostgreSQL
С чего мы начинали
Добавляем API для управления тарифами
Добавляем асинхронности
Особенности архитектуры 
• Приложение разделено на две группы сервисов 
• Управления доменной областью / базой даных 
• Выполнения задач и бизнес логики 
• Все действия оператора сводятся только к управлению 
справочниками в БД 
• При старте приложения планируются необходимые задачи 
• Вся бизнес логика выполняется отложенно / асинхронно через 
планировщик
Сервер приложений Java EE 
• Самые популярные Java EE сервера приложений 
• Jboss / Wildfly 
• Glassfish 
• Tomcat + TomEE 
• WebLogic / WebSphere 
• EJB Interceptor 
• Реализация логгирования на базе Interceptor – стоит примерно 15-20% 
производительности 
• Glassfish как сервер приложений 
• Это Reference Implementation для Java EE и не более
Реализация API 
• REST или SOAP 
• Современное поколение выбирает REST, мы выбрали SOAP 
• Автоматическая генерация API 
• Аннотации наше все 
• Не все так хорошо 
• Генерация документации по API на базе комментариев 
• Безопасность
Работа с БД 
• JPA как абстракция для БД 
• Минимум кода для управления сущностями 
• Позволило легко добавить поддержку PostgreSQL 
• Версионирование БД 
• Общие таблицы в БД 
• Отсутствие или нарушение constraints между сущностями БД 
• Мусор в таблицах 
• Multitenancy с JPA уже возможно
Асинхронная обработка задач 
• Популярный паттерн проектирования 
• Простейшая реализация – отдельный поток, который вычитывает 
задачи из БД 
• Обычно реализуют на базе Message Queue 
• Мы использовали планировщик Quartz и очередь задач 
в БД
Асинхронная обработка задач 
• Плюсы 
• Упрощение масштабирования системы 
• Выделение логики обработки задач в отдельные компоненты 
• Минусы 
• Зависимости между задачами 
• Необходимы средства мониторинга очередей 
• Мы не знаем когда задача будет выполнена 
• Восстановление работы после простоя
Производительность 
• Плановая нагрузка легко обрабатывается существующей 
архитектурой 
• Основное время тратится на работу с БД 
• После анализа работы системы часть таблиц БД можно 
кэшировать 
• JProfiler для анализа работы системы и анализа 
производительности 
• Лишние обращения к БД (повторные чтения) 
• Чтение из БД неизменных данных (возможность кэширования)
Интеграционное тестирование
Как это было у нас
Впечатления после внедрения 
• В первые недели работы мы узнали сразу несколько кейсов, когда 
заказчик хотел одно, а мы реализовали другое 
• Без доступа к БД разбираться в проблемах намного сложнее, 
поэтому активно дополняли логирование событий 
• Поиск виноватых в связке Админка - Billing. Все кивали друг на 
друга, пришлось логгировать большинство входящих запросов (а 
еще SOAP) 
• Сторонние системы не соблюдали форматы обмена данными.
Чем мы гордимся 
• Система работает в режиме 24 * 7 без сбоев и замечаний 
• Система логирования предоставляет достаточно информации для 
объяснения 98% ситуаций 
• API возваращает понятное описание ошибок, поэтому оператор 
может сам исправить некорректные данные 
• Валидация данных не позволяет создавать некорректные 
сущности 
• Мы смогли добиться этого без помощи тестировщиков
Немного статистики 
100% 
80% 
60% 
40% 
20% 
0% 
Задачи 2012-2014 
2012 2013 2014 
Доработки Ошибки Консультации
Планы на будущее 
• Переход на SaaS модель 
• Поддержка Multitenancy 
• Использование REST для public API 
• Использование SoapUI для TDD 
• Оптимизация слоя работы с БД
Советы 
• Пишите подробные логи, которые позволят вам без доступа к 
production стенду понять что происходило в системе 
• Очень аккуратно работайте с чужими таблицами 
• Кэширование сущностей БД позволят выиграть 30% 
производительности, но может быть источником проблем 
• Избегайте зависимостей между асинхронными задачами 
• Автоматизируйте тестирование с самого начала 
• Не публикуйте внутреннее API
Спасибо за внимание 
Email: pavel_vinogradov@epam.com 
Twitter: pavelvinogradov

More Related Content

What's hot

Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинJavascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинSergey Xek
 
Архитектура А/Б тестирования: сделай сам
Архитектура А/Б тестирования: сделай самАрхитектура А/Б тестирования: сделай сам
Архитектура А/Б тестирования: сделай самSergey Xek
 
"Разрушаем .NET мифы" Сергей Калинец
"Разрушаем .NET мифы" Сергей Калинец"Разрушаем .NET мифы" Сергей Калинец
"Разрушаем .NET мифы" Сергей КалинецFwdays
 
Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...
Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...
Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...Badoo Development
 
Евгений Остапчук "Tips&Tricks for ASP.NET MVC performance"
Евгений Остапчук "Tips&Tricks for ASP.NET MVC performance"Евгений Остапчук "Tips&Tricks for ASP.NET MVC performance"
Евгений Остапчук "Tips&Tricks for ASP.NET MVC performance"Fwdays
 
Андрей Чебукин "Построение успешных API"
Андрей Чебукин "Построение успешных API"Андрей Чебукин "Построение успешных API"
Андрей Чебукин "Построение успешных API"Fwdays
 
Доклад Виталия Котова на конференции LoveQA. "Selenium тесты. От RC и одного ...
Доклад Виталия Котова на конференции LoveQA. "Selenium тесты. От RC и одного ...Доклад Виталия Котова на конференции LoveQA. "Selenium тесты. От RC и одного ...
Доклад Виталия Котова на конференции LoveQA. "Selenium тесты. От RC и одного ...Badoo Development
 
"Архитектурный шаблон Reflex - новый подход к разработке клиент-серверных при...
"Архитектурный шаблон Reflex - новый подход к разработке клиент-серверных при..."Архитектурный шаблон Reflex - новый подход к разработке клиент-серверных при...
"Архитектурный шаблон Reflex - новый подход к разработке клиент-серверных при...Fwdays
 
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...Positive Hack Days
 
Олег Савкин
Олег СавкинОлег Савкин
Олег СавкинCodeFest
 
Максим Пугачев
Максим ПугачевМаксим Пугачев
Максим ПугачевCodeFest
 
Порядок для скорости. Система структурирования фронтендовой части веб-приложе...
Порядок для скорости. Система структурирования фронтендовой части веб-приложе...Порядок для скорости. Система структурирования фронтендовой части веб-приложе...
Порядок для скорости. Система структурирования фронтендовой части веб-приложе...Ontico
 
Потоковая обработка данных и Микросервисная архитектура
Потоковая обработка данных и Микросервисная архитектураПотоковая обработка данных и Микросервисная архитектура
Потоковая обработка данных и Микросервисная архитектураVyacheslav Benedichuk
 
Александр Афенов
Александр АфеновАлександр Афенов
Александр АфеновCodeFest
 
Сергей Рыжиков (1С-Битрикс)
Сергей Рыжиков (1С-Битрикс)Сергей Рыжиков (1С-Битрикс)
Сергей Рыжиков (1С-Битрикс)Ontico
 
Система мониторинга Zabbix в процессах разработки и тестирования | Алексей Буров
Система мониторинга Zabbix в процессах разработки и тестирования | Алексей БуровСистема мониторинга Zabbix в процессах разработки и тестирования | Алексей Буров
Система мониторинга Zabbix в процессах разработки и тестирования | Алексей БуровPositive Hack Days
 
Игорь Кашкута
Игорь КашкутаИгорь Кашкута
Игорь КашкутаCodeFest
 
React + Redux. Опыт использования
React + Redux. Опыт использованияReact + Redux. Опыт использования
React + Redux. Опыт использованияGDG Odessa
 

What's hot (20)

Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинJavascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только один
 
Архитектура А/Б тестирования: сделай сам
Архитектура А/Б тестирования: сделай самАрхитектура А/Б тестирования: сделай сам
Архитектура А/Б тестирования: сделай сам
 
"Разрушаем .NET мифы" Сергей Калинец
"Разрушаем .NET мифы" Сергей Калинец"Разрушаем .NET мифы" Сергей Калинец
"Разрушаем .NET мифы" Сергей Калинец
 
Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...
Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...
Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...
 
Евгений Остапчук "Tips&Tricks for ASP.NET MVC performance"
Евгений Остапчук "Tips&Tricks for ASP.NET MVC performance"Евгений Остапчук "Tips&Tricks for ASP.NET MVC performance"
Евгений Остапчук "Tips&Tricks for ASP.NET MVC performance"
 
Андрей Чебукин "Построение успешных API"
Андрей Чебукин "Построение успешных API"Андрей Чебукин "Построение успешных API"
Андрей Чебукин "Построение успешных API"
 
Доклад Виталия Котова на конференции LoveQA. "Selenium тесты. От RC и одного ...
Доклад Виталия Котова на конференции LoveQA. "Selenium тесты. От RC и одного ...Доклад Виталия Котова на конференции LoveQA. "Selenium тесты. От RC и одного ...
Доклад Виталия Котова на конференции LoveQA. "Selenium тесты. От RC и одного ...
 
"Архитектурный шаблон Reflex - новый подход к разработке клиент-серверных при...
"Архитектурный шаблон Reflex - новый подход к разработке клиент-серверных при..."Архитектурный шаблон Reflex - новый подход к разработке клиент-серверных при...
"Архитектурный шаблон Reflex - новый подход к разработке клиент-серверных при...
 
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...
 
Олег Савкин
Олег СавкинОлег Савкин
Олег Савкин
 
Максим Пугачев
Максим ПугачевМаксим Пугачев
Максим Пугачев
 
Порядок для скорости. Система структурирования фронтендовой части веб-приложе...
Порядок для скорости. Система структурирования фронтендовой части веб-приложе...Порядок для скорости. Система структурирования фронтендовой части веб-приложе...
Порядок для скорости. Система структурирования фронтендовой части веб-приложе...
 
Потоковая обработка данных и Микросервисная архитектура
Потоковая обработка данных и Микросервисная архитектураПотоковая обработка данных и Микросервисная архитектура
Потоковая обработка данных и Микросервисная архитектура
 
Александр Афенов
Александр АфеновАлександр Афенов
Александр Афенов
 
Сергей Рыжиков (1С-Битрикс)
Сергей Рыжиков (1С-Битрикс)Сергей Рыжиков (1С-Битрикс)
Сергей Рыжиков (1С-Битрикс)
 
CQRS innovations
CQRS innovationsCQRS innovations
CQRS innovations
 
Система мониторинга Zabbix в процессах разработки и тестирования | Алексей Буров
Система мониторинга Zabbix в процессах разработки и тестирования | Алексей БуровСистема мониторинга Zabbix в процессах разработки и тестирования | Алексей Буров
Система мониторинга Zabbix в процессах разработки и тестирования | Алексей Буров
 
Игорь Кашкута
Игорь КашкутаИгорь Кашкута
Игорь Кашкута
 
React + Redux. Опыт использования
React + Redux. Опыт использованияReact + Redux. Опыт использования
React + Redux. Опыт использования
 
NPAPI
NPAPINPAPI
NPAPI
 

Viewers also liked

Дизайн работоспособных приложений
Дизайн работоспособных приложенийДизайн работоспособных приложений
Дизайн работоспособных приложенийEgor Konovalov
 
Сергей Фефилов - Адаптивный дизайн
Сергей Фефилов - Адаптивный дизайнСергей Фефилов - Адаптивный дизайн
Сергей Фефилов - Адаптивный дизайнEgor Konovalov
 
Вика Подлеских - I’m astronaut
Вика Подлеских - I’m astronautВика Подлеских - I’m astronaut
Вика Подлеских - I’m astronautEgor Konovalov
 
Как сделать проект с 1 500 000 просмотров в сутки, который не ломается - IzhD...
Как сделать проект с 1 500 000 просмотров в сутки, который не ломается - IzhD...Как сделать проект с 1 500 000 просмотров в сутки, который не ломается - IzhD...
Как сделать проект с 1 500 000 просмотров в сутки, который не ломается - IzhD...Egor Konovalov
 
Android ux для разработчика
Android ux для разработчикаAndroid ux для разработчика
Android ux для разработчикаEgor Konovalov
 
Семинар «Принцип "велосипеда" в бизнесе или "Крути педали пока есть силы!»
Семинар «Принцип "велосипеда" в бизнесе или "Крути педали пока есть силы!»Семинар «Принцип "велосипеда" в бизнесе или "Крути педали пока есть силы!»
Семинар «Принцип "велосипеда" в бизнесе или "Крути педали пока есть силы!»Alexander Nekrasov
 
Asynchronous PHP and Real-time Messaging
Asynchronous PHP and Real-time MessagingAsynchronous PHP and Real-time Messaging
Asynchronous PHP and Real-time MessagingSteve Rhoades
 

Viewers also liked (9)

Take2
Take2Take2
Take2
 
лаб № 2
лаб № 2лаб № 2
лаб № 2
 
Дизайн работоспособных приложений
Дизайн работоспособных приложенийДизайн работоспособных приложений
Дизайн работоспособных приложений
 
Сергей Фефилов - Адаптивный дизайн
Сергей Фефилов - Адаптивный дизайнСергей Фефилов - Адаптивный дизайн
Сергей Фефилов - Адаптивный дизайн
 
Вика Подлеских - I’m astronaut
Вика Подлеских - I’m astronautВика Подлеских - I’m astronaut
Вика Подлеских - I’m astronaut
 
Как сделать проект с 1 500 000 просмотров в сутки, который не ломается - IzhD...
Как сделать проект с 1 500 000 просмотров в сутки, который не ломается - IzhD...Как сделать проект с 1 500 000 просмотров в сутки, который не ломается - IzhD...
Как сделать проект с 1 500 000 просмотров в сутки, который не ломается - IzhD...
 
Android ux для разработчика
Android ux для разработчикаAndroid ux для разработчика
Android ux для разработчика
 
Семинар «Принцип "велосипеда" в бизнесе или "Крути педали пока есть силы!»
Семинар «Принцип "велосипеда" в бизнесе или "Крути педали пока есть силы!»Семинар «Принцип "велосипеда" в бизнесе или "Крути педали пока есть силы!»
Семинар «Принцип "велосипеда" в бизнесе или "Крути педали пока есть силы!»
 
Asynchronous PHP and Real-time Messaging
Asynchronous PHP and Real-time MessagingAsynchronous PHP and Real-time Messaging
Asynchronous PHP and Real-time Messaging
 

Similar to Асинхронный биллинг для службы такси - IzhDevCom November 2014

Павел Брылов, Skype
Павел Брылов, SkypeПавел Брылов, Skype
Павел Брылов, SkypeOntico
 
Страх и ненависть в мире релиз-инжиниринга
Страх и ненависть в мире релиз-инжинирингаСтрах и ненависть в мире релиз-инжиниринга
Страх и ненависть в мире релиз-инжинирингаMikhail Chinkov
 
Что вас ждет на пути реализации Soa (Битрикс отступает)
Что вас ждет на пути реализации Soa (Битрикс отступает)Что вас ждет на пути реализации Soa (Битрикс отступает)
Что вас ждет на пути реализации Soa (Битрикс отступает)Василий Савунов
 
Тимур Каримбаев (Ютинет.ру)
Тимур Каримбаев (Ютинет.ру)Тимур Каримбаев (Ютинет.ру)
Тимур Каримбаев (Ютинет.ру)Ontico
 
Андрей Завадский "Бессерверная архитектура"
 Андрей Завадский "Бессерверная архитектура" Андрей Завадский "Бессерверная архитектура"
Андрей Завадский "Бессерверная архитектура"Fwdays
 
Гетерогенные сервисы для highload-проектов на примере Imhonet.ru и 4talk.im, ...
Гетерогенные сервисы для highload-проектов на примере Imhonet.ru и 4talk.im, ...Гетерогенные сервисы для highload-проектов на примере Imhonet.ru и 4talk.im, ...
Гетерогенные сервисы для highload-проектов на примере Imhonet.ru и 4talk.im, ...Ontico
 
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)Zabbix
 
Простая и дешёвая бизнес-аналитика на базе Google BigQuery / Алексей Паршуков...
Простая и дешёвая бизнес-аналитика на базе Google BigQuery / Алексей Паршуков...Простая и дешёвая бизнес-аналитика на базе Google BigQuery / Алексей Паршуков...
Простая и дешёвая бизнес-аналитика на базе Google BigQuery / Алексей Паршуков...Ontico
 
Веб 3.0. Есть ли будущее у Java в RIA и Mobile?
Веб 3.0. Есть ли будущее у Java в RIA и Mobile?Веб 3.0. Есть ли будущее у Java в RIA и Mobile?
Веб 3.0. Есть ли будущее у Java в RIA и Mobile?Nikita Lipsky
 
WP как экспериментальная платформа
WP как экспериментальная платформаWP как экспериментальная платформа
WP как экспериментальная платформаSQALab
 
Экскурс в мир WEB разработки
Экскурс в мир WEB разработкиЭкскурс в мир WEB разработки
Экскурс в мир WEB разработкиIT-Доминанта
 
Как не стать заложником одной платформы (MBLTdev)
Как не стать заложником одной платформы (MBLTdev)Как не стать заложником одной платформы (MBLTdev)
Как не стать заложником одной платформы (MBLTdev)Алексей Панфилов
 
Александр Анцыпов. REST: вывод традиционных систем на новый уровень
Александр Анцыпов. REST: вывод традиционных систем на новый уровеньАлександр Анцыпов. REST: вывод традиционных систем на новый уровень
Александр Анцыпов. REST: вывод традиционных систем на новый уровеньVolha Banadyseva
 
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС «Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС 2ГИС Технологии
 
WebSite Security Day 2016 - Мониторинг e-commerce
WebSite Security Day 2016 - Мониторинг e-commerceWebSite Security Day 2016 - Мониторинг e-commerce
WebSite Security Day 2016 - Мониторинг e-commerceСергей Обухов
 
Oracle Policy Automation & Siebel CRM Fraud detection solution
Oracle Policy Automation & Siebel CRM Fraud detection solutionOracle Policy Automation & Siebel CRM Fraud detection solution
Oracle Policy Automation & Siebel CRM Fraud detection solutionVladimir Kohanov
 
Микросервисы, чистый PaaS и конкурс Мисс Россия
Микросервисы, чистый PaaS и конкурс Мисс РоссияМикросервисы, чистый PaaS и конкурс Мисс Россия
Микросервисы, чистый PaaS и конкурс Мисс РоссияAlexander Byndyu
 
Высокопроизводительные приложения на базе Windows Azure. Пример реального про...
Высокопроизводительные приложения на базе Windows Azure. Пример реального про...Высокопроизводительные приложения на базе Windows Azure. Пример реального про...
Высокопроизводительные приложения на базе Windows Azure. Пример реального про...UNETA
 

Similar to Асинхронный биллинг для службы такси - IzhDevCom November 2014 (20)

Павел Брылов, Skype
Павел Брылов, SkypeПавел Брылов, Skype
Павел Брылов, Skype
 
Страх и ненависть в мире релиз-инжиниринга
Страх и ненависть в мире релиз-инжинирингаСтрах и ненависть в мире релиз-инжиниринга
Страх и ненависть в мире релиз-инжиниринга
 
Что вас ждет на пути реализации Soa (Битрикс отступает)
Что вас ждет на пути реализации Soa (Битрикс отступает)Что вас ждет на пути реализации Soa (Битрикс отступает)
Что вас ждет на пути реализации Soa (Битрикс отступает)
 
Тимур Каримбаев (Ютинет.ру)
Тимур Каримбаев (Ютинет.ру)Тимур Каримбаев (Ютинет.ру)
Тимур Каримбаев (Ютинет.ру)
 
Андрей Завадский "Бессерверная архитектура"
 Андрей Завадский "Бессерверная архитектура" Андрей Завадский "Бессерверная архитектура"
Андрей Завадский "Бессерверная архитектура"
 
A.pleshkov
A.pleshkovA.pleshkov
A.pleshkov
 
Гетерогенные сервисы для highload-проектов на примере Imhonet.ru и 4talk.im, ...
Гетерогенные сервисы для highload-проектов на примере Imhonet.ru и 4talk.im, ...Гетерогенные сервисы для highload-проектов на примере Imhonet.ru и 4talk.im, ...
Гетерогенные сервисы для highload-проектов на примере Imhonet.ru и 4talk.im, ...
 
Sivko
SivkoSivko
Sivko
 
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)
 
Простая и дешёвая бизнес-аналитика на базе Google BigQuery / Алексей Паршуков...
Простая и дешёвая бизнес-аналитика на базе Google BigQuery / Алексей Паршуков...Простая и дешёвая бизнес-аналитика на базе Google BigQuery / Алексей Паршуков...
Простая и дешёвая бизнес-аналитика на базе Google BigQuery / Алексей Паршуков...
 
Веб 3.0. Есть ли будущее у Java в RIA и Mobile?
Веб 3.0. Есть ли будущее у Java в RIA и Mobile?Веб 3.0. Есть ли будущее у Java в RIA и Mobile?
Веб 3.0. Есть ли будущее у Java в RIA и Mobile?
 
WP как экспериментальная платформа
WP как экспериментальная платформаWP как экспериментальная платформа
WP как экспериментальная платформа
 
Экскурс в мир WEB разработки
Экскурс в мир WEB разработкиЭкскурс в мир WEB разработки
Экскурс в мир WEB разработки
 
Как не стать заложником одной платформы (MBLTdev)
Как не стать заложником одной платформы (MBLTdev)Как не стать заложником одной платформы (MBLTdev)
Как не стать заложником одной платформы (MBLTdev)
 
Александр Анцыпов. REST: вывод традиционных систем на новый уровень
Александр Анцыпов. REST: вывод традиционных систем на новый уровеньАлександр Анцыпов. REST: вывод традиционных систем на новый уровень
Александр Анцыпов. REST: вывод традиционных систем на новый уровень
 
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС «Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
 
WebSite Security Day 2016 - Мониторинг e-commerce
WebSite Security Day 2016 - Мониторинг e-commerceWebSite Security Day 2016 - Мониторинг e-commerce
WebSite Security Day 2016 - Мониторинг e-commerce
 
Oracle Policy Automation & Siebel CRM Fraud detection solution
Oracle Policy Automation & Siebel CRM Fraud detection solutionOracle Policy Automation & Siebel CRM Fraud detection solution
Oracle Policy Automation & Siebel CRM Fraud detection solution
 
Микросервисы, чистый PaaS и конкурс Мисс Россия
Микросервисы, чистый PaaS и конкурс Мисс РоссияМикросервисы, чистый PaaS и конкурс Мисс Россия
Микросервисы, чистый PaaS и конкурс Мисс Россия
 
Высокопроизводительные приложения на базе Windows Azure. Пример реального про...
Высокопроизводительные приложения на базе Windows Azure. Пример реального про...Высокопроизводительные приложения на базе Windows Azure. Пример реального про...
Высокопроизводительные приложения на базе Windows Azure. Пример реального про...
 

Асинхронный биллинг для службы такси - IzhDevCom November 2014

  • 1. Асинхронный билинг для Такси Pavel Vinogradov для IzhDevCom Izhevsk, 2014
  • 2. Pavel Vinogradov • Lead Java Developer / Architect • Работаю в: Epam / NixDev • Специализируюсь в – Billing systems – Data Mining Контакты: Email: pavel_vinogradov@epam.com Twitter: pavelvinogradov
  • 4. Мы тоже приняли в этом участие • Существующее решение одной из служб такси не справлялось с ростом нагрузки • За 4 месяца надо было понять как работает существующая система • Разработать новый сервис тарификатора • Реализовать набор новых требований • Выполнить интеграцию с существующими системами
  • 5. Проблемы существовавшего решения • Биллинг, реализованный в виде хранимок в БД • Монолитные функции, которые умеют слишком многое • Отсутствие документации • Существующие нагрузки все чаще приводили к блокировкам в БД • Необходимость развивать систему
  • 6. Наши задачи • Разработка системы тарифов и бизнес правил для тарификации услуг такси • Предоставление API для управления тарифами из панели администратора • Интеграция с существующей структурой БД • Поддержка популярных БД (SqlServer, MySQL, PgSQL) • Обработка потока 60 тыс. заказов в сутки
  • 7. Что мы использовали • Java Runtime 1.6.x -> 1.7.x • Java EE 6.0 Glassfish 3.x • JAX-WS (Metro) • EJB 3.1 • JPA 2.0 (EclipseLink) • Quartz Scheduler 2.x • SqlServer 2005, PostgreSQL
  • 8. С чего мы начинали
  • 9. Добавляем API для управления тарифами
  • 11. Особенности архитектуры • Приложение разделено на две группы сервисов • Управления доменной областью / базой даных • Выполнения задач и бизнес логики • Все действия оператора сводятся только к управлению справочниками в БД • При старте приложения планируются необходимые задачи • Вся бизнес логика выполняется отложенно / асинхронно через планировщик
  • 12. Сервер приложений Java EE • Самые популярные Java EE сервера приложений • Jboss / Wildfly • Glassfish • Tomcat + TomEE • WebLogic / WebSphere • EJB Interceptor • Реализация логгирования на базе Interceptor – стоит примерно 15-20% производительности • Glassfish как сервер приложений • Это Reference Implementation для Java EE и не более
  • 13. Реализация API • REST или SOAP • Современное поколение выбирает REST, мы выбрали SOAP • Автоматическая генерация API • Аннотации наше все • Не все так хорошо • Генерация документации по API на базе комментариев • Безопасность
  • 14. Работа с БД • JPA как абстракция для БД • Минимум кода для управления сущностями • Позволило легко добавить поддержку PostgreSQL • Версионирование БД • Общие таблицы в БД • Отсутствие или нарушение constraints между сущностями БД • Мусор в таблицах • Multitenancy с JPA уже возможно
  • 15. Асинхронная обработка задач • Популярный паттерн проектирования • Простейшая реализация – отдельный поток, который вычитывает задачи из БД • Обычно реализуют на базе Message Queue • Мы использовали планировщик Quartz и очередь задач в БД
  • 16. Асинхронная обработка задач • Плюсы • Упрощение масштабирования системы • Выделение логики обработки задач в отдельные компоненты • Минусы • Зависимости между задачами • Необходимы средства мониторинга очередей • Мы не знаем когда задача будет выполнена • Восстановление работы после простоя
  • 17. Производительность • Плановая нагрузка легко обрабатывается существующей архитектурой • Основное время тратится на работу с БД • После анализа работы системы часть таблиц БД можно кэшировать • JProfiler для анализа работы системы и анализа производительности • Лишние обращения к БД (повторные чтения) • Чтение из БД неизменных данных (возможность кэширования)
  • 20. Впечатления после внедрения • В первые недели работы мы узнали сразу несколько кейсов, когда заказчик хотел одно, а мы реализовали другое • Без доступа к БД разбираться в проблемах намного сложнее, поэтому активно дополняли логирование событий • Поиск виноватых в связке Админка - Billing. Все кивали друг на друга, пришлось логгировать большинство входящих запросов (а еще SOAP) • Сторонние системы не соблюдали форматы обмена данными.
  • 21. Чем мы гордимся • Система работает в режиме 24 * 7 без сбоев и замечаний • Система логирования предоставляет достаточно информации для объяснения 98% ситуаций • API возваращает понятное описание ошибок, поэтому оператор может сам исправить некорректные данные • Валидация данных не позволяет создавать некорректные сущности • Мы смогли добиться этого без помощи тестировщиков
  • 22. Немного статистики 100% 80% 60% 40% 20% 0% Задачи 2012-2014 2012 2013 2014 Доработки Ошибки Консультации
  • 23. Планы на будущее • Переход на SaaS модель • Поддержка Multitenancy • Использование REST для public API • Использование SoapUI для TDD • Оптимизация слоя работы с БД
  • 24. Советы • Пишите подробные логи, которые позволят вам без доступа к production стенду понять что происходило в системе • Очень аккуратно работайте с чужими таблицами • Кэширование сущностей БД позволят выиграть 30% производительности, но может быть источником проблем • Избегайте зависимостей между асинхронными задачами • Автоматизируйте тестирование с самого начала • Не публикуйте внутреннее API
  • 25. Спасибо за внимание Email: pavel_vinogradov@epam.com Twitter: pavelvinogradov

Editor's Notes

  1. В последние несколько лет службы такси растут быстрыми темпами. Причем вслед за региональными операторами в игру вступили агрегаторы типа Яндекс Такси, а в последний год у всех на слуху стартап Uber. Кто НЕ слышал про Uber? А кто им уже пользовался? Ижевск активно участвует в этой движухе. Мне известно как минимум 5 компаний в Ижевске, который занимаются разработкой и внедрением сервисов автоматизации таксопарков. Я со своей командой тоже не остался в стороне, в последние 3 года мы приняли активное участие в разработке одного из коробочных решений, которое сейчас предлагается на рынке. Заказчика я вам сегодня не назову, т.к. считаю это не важным моментом. Мой доклад будет о практических вопросах разработки тарификатора, а не маркетинговой рекламе превосходства нашего продукта над конкурентами.
  2. Привяза к конкретной СУБД Сложна в поддержке и отладке Признайтесь, кто из вас писал биллинг на хранимках?
  3. Все действия оператора сводятся только к управлению справочниками в БД Перевод водителя с одного тарифа на другой Постановка на смену / Блокировка / Увольнение Регистрация платежа
  4. Если возникают зависимые задачи Списать комиссию за выполненные заказы до смены тарифа В случае простоев системы Пропуск задачи запланированной на 00:00 Реализация нового функционала как новой задачи планировщика Возможность Feature Toggling Изоляция бизнес логики новой фичи от остальных задач Контроль ресурсов / приоритетов каждой из задач Management API отдельный компонент системы
  5. Использование SoapUI для интеграционного тестирования Для каждой фичи создается тест со своим миром (тариф, водитель, заказы) Реализуются шаги в соответствии с бизнес-сценарием Автоматическая генерация stubs для всего API на базе WSDL Тесты не зависят от низкоуровневой реализации и привязаны только к Public API Для этого пришлось открыть доступ к некоторому служебному API
  6. Попробуйте решать проблемы без доступа к БД Не верьте описанию полей в документации Очень аккуратно работайте с асинхронными задачами, избегайте зависимостей Автоматизированное тестирование (неважно модульное или интеграционное) сохранит вам огромное количество времени Никогда не включайте в поставку эмуляторы, тестовое API, недоделанный функционал