SlideShare uma empresa Scribd logo
1 de 39
Ускоряем биллинг в 20 раз.Профилируем, кэшируем, ленимся Алексей Романчук, Сибирьэнерго-Биллинг
Что у нас есть Web приложение на Java (spring, hibernate) 64 CPU cores 32 Gb RAM Oracle 24 CPU cores “Много дисков”raid
Чего мы хотим добиться Расчет за 6 часов Планируемый объем 7 000 000 услуг 325 услуг/с
Что сделано Garbage Collector работает нормально Hibernate 2nd level cache Нетоткровенно медленных sql 10-15 услуг/с 5+ суток
Как мы считаем 1 2 3 4 ……………………………… 28 29 30 31 19
Как мы считаем Электроэнергия Электроэнергия с учетом льгот Счет Показания счетчика Тариф Льготы База данных
Профилирование Попытки все исправить в одном месте… … не работают Используем только реальные данные Профилируем все части системы
Инструменты профилирования
Профилируем!
Что тормозит Районный коэффициент Показания счетчика Тариф Количество жильцов дома Количество льготников в доме
Как мы считаем 1 2 3 4 ……………………………… 28 29 30 31 19
Кэширование? Что будем кэшировать? Сколько будем кэшировать / TTL? Где будем кэшировать? Время жизни кэша? Область действия кэша?
Кэширование! Что? Некоторые расчетные параметры Сколько? Все! Где? RAM Время жизни?Время выполнения задачи Область действия кэша? Задача
Статистика – наше все! Cache hit, cache miss, cache put Количество элементов и размер кэша Время вычисления элемента Время доступа к элементу кэша Общее время в рамках задачи
Что нам дало кэширование 75-80 услуг/c Увеличение скорости расчета в 6 раз
Профилируем!
Как мы считаем
Алгоритмы расчета
Алгоритмы расчета
Ленимся
Ленимся Алгоритмы должны остаться простыми Возможность изменять алгоритмы без перезапуска Минимальные изменения кода
Javassist Инструментация на лету Высокая скорость по сравнению с proxy Неизменность исходного кода Сложность отладки
Результаты 170-190услуг/с Увеличение скоростирасчета в 3 раза
Профилируем!
Все?
Что то не так
WUUUUUT?! 85%
Как мы считаем
Как мы считаем
Кто нас блокирует? Наш код Log4J Hibernate Spring …
Самый страшный антипаттерн многопоточного программирования ненужный Блокирующий доступ на чтение
Мы сами Почему?  Антипаттерн Как исправить? Переписать нормально
Log4J Почему? Частыe вызовы логгера Как исправить? Один расчет – один лог
Hibernate, Spring framework Почему? Антипаттернв различных проявлениях Как исправить? Сделать патч. Применить патч. Завести баг.
java.util.Calendar Почему? Антипаттерн c использованием Hashtable Как исправить? clone() вместо newInstance()
Блокировки 340 услуг/с Прирост скорости – 1.5 раза Log4J – 3-4% EhCache – 1%
Чего мы добились 15 услуг/c => 340 услуг/с 1 человеко-месяц Кэширование – 6х Lazy вычисления – 3х Блокировки – 1.5х
? Алексей Романчук http://www.se-b.ru romanchuk@se-b.ru alexey.romanchuk@gmail.com @1esha
Самый страшный антипаттерн многопоточного программирования

Mais conteúdo relacionado

Semelhante a CodeFest 2011. Романчук А. — Ускоряем биллинг в 20 раз: профилируем, оптимизируем, ленимся

Практические шаги создания системы резервного копирования
Практические шаги создания системы резервного копированияПрактические шаги создания системы резервного копирования
Практические шаги создания системы резервного копированияSergey Chekmasoff
 
Cистема внутренней статистики Odnoklassniki.ru
Cистема внутренней статистики Odnoklassniki.ruCистема внутренней статистики Odnoklassniki.ru
Cистема внутренней статистики Odnoklassniki.ruodnoklassniki.ru
 
Баннерокрутилка
БаннерокрутилкаБаннерокрутилка
Баннерокрутилкаyaevents
 
Lobanov_Cloud-Comput..
Lobanov_Cloud-Comput..Lobanov_Cloud-Comput..
Lobanov_Cloud-Comput..webhostingguy
 
"Тестирование распределенных систем" Сатарин Андрей, Яндекс
"Тестирование распределенных систем" Сатарин Андрей, Яндекс"Тестирование распределенных систем" Сатарин Андрей, Яндекс
"Тестирование распределенных систем" Сатарин Андрей, Яндексit-people
 
Партицирование и миграции данных на примере PostgreSQL, Денис Иванов (2ГИС)
Партицирование и миграции данных на примере PostgreSQL, Денис Иванов (2ГИС)Партицирование и миграции данных на примере PostgreSQL, Денис Иванов (2ГИС)
Партицирование и миграции данных на примере PostgreSQL, Денис Иванов (2ГИС)Ontico
 
SECON'2017, Тыкушин Анатолий, Болдырев Михаил, Расследование кибер-преступлений
SECON'2017, Тыкушин Анатолий, Болдырев Михаил, Расследование кибер-преступленийSECON'2017, Тыкушин Анатолий, Болдырев Михаил, Расследование кибер-преступлений
SECON'2017, Тыкушин Анатолий, Болдырев Михаил, Расследование кибер-преступленийSECON
 
Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)
Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)
Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)Ontico
 
Пишем свою платформу для управления данными. Это очень просто / Суханов Васил...
Пишем свою платформу для управления данными. Это очень просто / Суханов Васил...Пишем свою платформу для управления данными. Это очень просто / Суханов Васил...
Пишем свою платформу для управления данными. Это очень просто / Суханов Васил...Ontico
 
Борис Каплуновский, Aviasales.ru
Борис Каплуновский, Aviasales.ruБорис Каплуновский, Aviasales.ru
Борис Каплуновский, Aviasales.ruOntico
 
Построение ИТ-инфраструктуры компании с использованием облачных технологий
Построение ИТ-инфраструктуры компании с использованием облачных технологийПостроение ИТ-инфраструктуры компании с использованием облачных технологий
Построение ИТ-инфраструктуры компании с использованием облачных технологийDmitry Moskvin
 
ObjectManager, или как работать с большим количеством объектов на карте, Мари...
ObjectManager, или как работать с большим количеством объектов на карте, Мари...ObjectManager, или как работать с большим количеством объектов на карте, Мари...
ObjectManager, или как работать с большим количеством объектов на карте, Мари...Ontico
 
Как играть без игрока
Как играть без игрокаКак играть без игрока
Как играть без игрокаSQALab
 
Как мы выбирали PostgreSQL для ГИС ЖКХ. Егор Савочкин, ЛАНИТ
Как мы выбирали PostgreSQL для ГИС ЖКХ. Егор Савочкин, ЛАНИТКак мы выбирали PostgreSQL для ГИС ЖКХ. Егор Савочкин, ЛАНИТ
Как мы выбирали PostgreSQL для ГИС ЖКХ. Егор Савочкин, ЛАНИТLANITgk
 
Много данных, много вычислений: есть ли жизнь на Amazon'е
Много данных, много вычислений: есть ли жизнь на Amazon'еМного данных, много вычислений: есть ли жизнь на Amazon'е
Много данных, много вычислений: есть ли жизнь на Amazon'еAlexander Byndyu
 
Grpahite&grafana
Grpahite&grafanaGrpahite&grafana
Grpahite&grafanaLevon Avakyan
 
Применение CQRS и EventSourcing в DDD-проекте
Применение CQRS и EventSourcing в DDD-проектеПрименение CQRS и EventSourcing в DDD-проекте
Применение CQRS и EventSourcing в DDD-проектеIgor Lubenets
 
Поговорим о микрооптимизациях .NET-приложений
Поговорим о микрооптимизациях .NET-приложенийПоговорим о микрооптимизациях .NET-приложений
Поговорим о микрооптимизациях .NET-приложенийAndrey Akinshin
 

Semelhante a CodeFest 2011. Романчук А. — Ускоряем биллинг в 20 раз: профилируем, оптимизируем, ленимся (20)

Принцип достаточности
Принцип достаточностиПринцип достаточности
Принцип достаточности
 
Практические шаги создания системы резервного копирования
Практические шаги создания системы резервного копированияПрактические шаги создания системы резервного копирования
Практические шаги создания системы резервного копирования
 
Hibernate & JPA perfomance
Hibernate & JPA perfomance Hibernate & JPA perfomance
Hibernate & JPA perfomance
 
Cистема внутренней статистики Odnoklassniki.ru
Cистема внутренней статистики Odnoklassniki.ruCистема внутренней статистики Odnoklassniki.ru
Cистема внутренней статистики Odnoklassniki.ru
 
Баннерокрутилка
БаннерокрутилкаБаннерокрутилка
Баннерокрутилка
 
Lobanov_Cloud-Comput..
Lobanov_Cloud-Comput..Lobanov_Cloud-Comput..
Lobanov_Cloud-Comput..
 
"Тестирование распределенных систем" Сатарин Андрей, Яндекс
"Тестирование распределенных систем" Сатарин Андрей, Яндекс"Тестирование распределенных систем" Сатарин Андрей, Яндекс
"Тестирование распределенных систем" Сатарин Андрей, Яндекс
 
Партицирование и миграции данных на примере PostgreSQL, Денис Иванов (2ГИС)
Партицирование и миграции данных на примере PostgreSQL, Денис Иванов (2ГИС)Партицирование и миграции данных на примере PostgreSQL, Денис Иванов (2ГИС)
Партицирование и миграции данных на примере PostgreSQL, Денис Иванов (2ГИС)
 
SECON'2017, Тыкушин Анатолий, Болдырев Михаил, Расследование кибер-преступлений
SECON'2017, Тыкушин Анатолий, Болдырев Михаил, Расследование кибер-преступленийSECON'2017, Тыкушин Анатолий, Болдырев Михаил, Расследование кибер-преступлений
SECON'2017, Тыкушин Анатолий, Болдырев Михаил, Расследование кибер-преступлений
 
Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)
Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)
Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)
 
Пишем свою платформу для управления данными. Это очень просто / Суханов Васил...
Пишем свою платформу для управления данными. Это очень просто / Суханов Васил...Пишем свою платформу для управления данными. Это очень просто / Суханов Васил...
Пишем свою платформу для управления данными. Это очень просто / Суханов Васил...
 
Борис Каплуновский, Aviasales.ru
Борис Каплуновский, Aviasales.ruБорис Каплуновский, Aviasales.ru
Борис Каплуновский, Aviasales.ru
 
Построение ИТ-инфраструктуры компании с использованием облачных технологий
Построение ИТ-инфраструктуры компании с использованием облачных технологийПостроение ИТ-инфраструктуры компании с использованием облачных технологий
Построение ИТ-инфраструктуры компании с использованием облачных технологий
 
ObjectManager, или как работать с большим количеством объектов на карте, Мари...
ObjectManager, или как работать с большим количеством объектов на карте, Мари...ObjectManager, или как работать с большим количеством объектов на карте, Мари...
ObjectManager, или как работать с большим количеством объектов на карте, Мари...
 
Как играть без игрока
Как играть без игрокаКак играть без игрока
Как играть без игрока
 
Как мы выбирали PostgreSQL для ГИС ЖКХ. Егор Савочкин, ЛАНИТ
Как мы выбирали PostgreSQL для ГИС ЖКХ. Егор Савочкин, ЛАНИТКак мы выбирали PostgreSQL для ГИС ЖКХ. Егор Савочкин, ЛАНИТ
Как мы выбирали PostgreSQL для ГИС ЖКХ. Егор Савочкин, ЛАНИТ
 
Много данных, много вычислений: есть ли жизнь на Amazon'е
Много данных, много вычислений: есть ли жизнь на Amazon'еМного данных, много вычислений: есть ли жизнь на Amazon'е
Много данных, много вычислений: есть ли жизнь на Amazon'е
 
Grpahite&grafana
Grpahite&grafanaGrpahite&grafana
Grpahite&grafana
 
Применение CQRS и EventSourcing в DDD-проекте
Применение CQRS и EventSourcing в DDD-проектеПрименение CQRS и EventSourcing в DDD-проекте
Применение CQRS и EventSourcing в DDD-проекте
 
Поговорим о микрооптимизациях .NET-приложений
Поговорим о микрооптимизациях .NET-приложенийПоговорим о микрооптимизациях .NET-приложений
Поговорим о микрооптимизациях .NET-приложений
 

Mais de CodeFest

Alexander Graebe
Alexander GraebeAlexander Graebe
Alexander GraebeCodeFest
 
Никита Прокопов
Никита ПрокоповНикита Прокопов
Никита ПрокоповCodeFest
 
Денис Баталов
Денис БаталовДенис Баталов
Денис БаталовCodeFest
 
Елена Гальцина
Елена ГальцинаЕлена Гальцина
Елена ГальцинаCodeFest
 
Александр Калашников
Александр КалашниковАлександр Калашников
Александр КалашниковCodeFest
 
Ирина Иванова
Ирина ИвановаИрина Иванова
Ирина ИвановаCodeFest
 
Marko Berković
Marko BerkovićMarko Berković
Marko BerkovićCodeFest
 
Денис Кортунов
Денис КортуновДенис Кортунов
Денис КортуновCodeFest
 
Александр Зимин
Александр ЗиминАлександр Зимин
Александр ЗиминCodeFest
 
Сергей Крапивенский
Сергей КрапивенскийСергей Крапивенский
Сергей КрапивенскийCodeFest
 
Сергей Игнатов
Сергей ИгнатовСергей Игнатов
Сергей ИгнатовCodeFest
 
Николай Крапивный
Николай КрапивныйНиколай Крапивный
Николай КрапивныйCodeFest
 
Alexander Graebe
Alexander GraebeAlexander Graebe
Alexander GraebeCodeFest
 
Вадим Смирнов
Вадим СмирновВадим Смирнов
Вадим СмирновCodeFest
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин ОсиповCodeFest
 
Raffaele Rialdi
Raffaele RialdiRaffaele Rialdi
Raffaele RialdiCodeFest
 
Максим Пугачев
Максим ПугачевМаксим Пугачев
Максим ПугачевCodeFest
 
Rene Groeschke
Rene GroeschkeRene Groeschke
Rene GroeschkeCodeFest
 
Иван Бондаренко
Иван БондаренкоИван Бондаренко
Иван БондаренкоCodeFest
 
Mete Atamel
Mete AtamelMete Atamel
Mete AtamelCodeFest
 

Mais de CodeFest (20)

Alexander Graebe
Alexander GraebeAlexander Graebe
Alexander Graebe
 
Никита Прокопов
Никита ПрокоповНикита Прокопов
Никита Прокопов
 
Денис Баталов
Денис БаталовДенис Баталов
Денис Баталов
 
Елена Гальцина
Елена ГальцинаЕлена Гальцина
Елена Гальцина
 
Александр Калашников
Александр КалашниковАлександр Калашников
Александр Калашников
 
Ирина Иванова
Ирина ИвановаИрина Иванова
Ирина Иванова
 
Marko Berković
Marko BerkovićMarko Berković
Marko Berković
 
Денис Кортунов
Денис КортуновДенис Кортунов
Денис Кортунов
 
Александр Зимин
Александр ЗиминАлександр Зимин
Александр Зимин
 
Сергей Крапивенский
Сергей КрапивенскийСергей Крапивенский
Сергей Крапивенский
 
Сергей Игнатов
Сергей ИгнатовСергей Игнатов
Сергей Игнатов
 
Николай Крапивный
Николай КрапивныйНиколай Крапивный
Николай Крапивный
 
Alexander Graebe
Alexander GraebeAlexander Graebe
Alexander Graebe
 
Вадим Смирнов
Вадим СмирновВадим Смирнов
Вадим Смирнов
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин Осипов
 
Raffaele Rialdi
Raffaele RialdiRaffaele Rialdi
Raffaele Rialdi
 
Максим Пугачев
Максим ПугачевМаксим Пугачев
Максим Пугачев
 
Rene Groeschke
Rene GroeschkeRene Groeschke
Rene Groeschke
 
Иван Бондаренко
Иван БондаренкоИван Бондаренко
Иван Бондаренко
 
Mete Atamel
Mete AtamelMete Atamel
Mete Atamel
 

CodeFest 2011. Романчук А. — Ускоряем биллинг в 20 раз: профилируем, оптимизируем, ленимся