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

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

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

898

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
898
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Ускоряем биллинг в 20 раз.Профилируем, кэшируем, ленимся
    Алексей Романчук,
    Сибирьэнерго-Биллинг
  • 2. Что у нас есть
    Web приложение на Java (spring, hibernate)
    64 CPU cores
    32 Gb RAM
    Oracle
    24 CPU cores
    “Много дисков”raid
  • 3. Чего мы хотим добиться
    Расчет за 6 часов
    Планируемый объем 7 000 000 услуг
    325 услуг/с
  • 4. Что сделано
    Garbage Collector работает нормально
    Hibernate 2nd level cache
    Нетоткровенно медленных sql
    10-15 услуг/с
    5+ суток
  • 5. Как мы считаем
    1
    2
    3
    4
    ………………………………
    28
    29
    30
    31
    19
  • 6. Как мы считаем
    Электроэнергия
    Электроэнергия с учетом льгот
    Счет
    Показания счетчика
    Тариф
    Льготы
    База данных
  • 7. Профилирование
    Попытки все исправить в одном месте…
    … не работают
    Используем только реальные данные
    Профилируем все части системы
  • 8. Инструменты профилирования
  • 9. Профилируем!
  • 10. Что тормозит
    Районный коэффициент
    Показания счетчика
    Тариф
    Количество жильцов дома
    Количество льготников в доме
  • 11. Как мы считаем
    1
    2
    3
    4
    ………………………………
    28
    29
    30
    31
    19
  • 12. Кэширование?
    Что будем кэшировать?
    Сколько будем кэшировать / TTL?
    Где будем кэшировать?
    Время жизни кэша?
    Область действия кэша?
  • 13. Кэширование!
    Что? Некоторые расчетные параметры
    Сколько? Все!
    Где? RAM
    Время жизни?Время выполнения задачи
    Область действия кэша? Задача
  • 14. Статистика – наше все!
    Cache hit, cache miss, cache put
    Количество элементов и размер кэша
    Время вычисления элемента
    Время доступа к элементу кэша
    Общее время в рамках задачи
  • 15. Что нам дало кэширование
    75-80 услуг/c
    Увеличение скорости расчета в 6 раз
  • 16. Профилируем!
  • 17. Как мы считаем
  • 18. Алгоритмы расчета
  • 19. Алгоритмы расчета
  • 20. Ленимся
  • 21. Ленимся
    Алгоритмы должны остаться простыми
    Возможность изменять алгоритмы без перезапуска
    Минимальные изменения кода
  • 22. Javassist
    Инструментация на лету
    Высокая скорость по сравнению с proxy
    Неизменность исходного кода
    Сложность отладки
  • 23. Результаты
    170-190услуг/с
    Увеличение скоростирасчета в 3 раза
  • 24. Профилируем!
  • 25. Все?
  • 26. Что то не так
  • 27. WUUUUUT?!
    85%
  • 28. Как мы считаем
  • 29. Как мы считаем
  • 30. Кто нас блокирует?
    Наш код
    Log4J
    Hibernate
    Spring

  • 31. Самый страшный антипаттерн
    многопоточного программирования
    ненужный
    Блокирующий доступ на чтение
  • 32. Мы сами
    Почему?
    Антипаттерн
    Как исправить?
    Переписать нормально
  • 33. Log4J
    Почему?
    Частыe вызовы логгера
    Как исправить?
    Один расчет – один лог
  • 34. Hibernate, Spring framework
    Почему?
    Антипаттернв различных проявлениях
    Как исправить?
    Сделать патч. Применить патч. Завести баг.
  • 35. java.util.Calendar
    Почему?
    Антипаттерн c использованием
    Hashtable
    Как исправить?
    clone() вместо newInstance()
  • 36. Блокировки
    340 услуг/с
    Прирост скорости – 1.5 раза
    Log4J – 3-4%
    EhCache – 1%
  • 37. Чего мы добились
    15 услуг/c => 340 услуг/с
    1 человеко-месяц
    Кэширование – 6х
    Lazy вычисления – 3х
    Блокировки – 1.5х
  • 38. ?
    Алексей Романчук
    http://www.se-b.ru
    romanchuk@se-b.ru
    alexey.romanchuk@gmail.com
    @1esha
  • 39. Самый страшный антипаттерн
    многопоточного программирования
  • 40. Простое решение
    самого страшного антипаттерна многопоточного программирования

×