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

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

on

  • 993 views

 

Statistics

Views

Total Views
993
Views on SlideShare
831
Embed Views
162

Actions

Likes
0
Downloads
0
Comments
0

3 Embeds 162

http://codefest.ru 143
http://2011.codefest.ru 17
url_unknown 2

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

  • Ускоряем биллинг в 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
  • Самый страшный антипаттерн
    многопоточного программирования
  • Простое решение
    самого страшного антипаттерна многопоточного программирования