SlideShare uma empresa Scribd logo
1 de 24
Baixar para ler offline
Работа с легаси системами
Стабилизация, мониторинг, менеджмент
Докладчики: Дмитрий Куперман, Егор Волков
Дата: 3.09.2016
План
1. Что такое легаси - осмысление
2. Что с этим всем делать - подходы
3. А руками - девелоперские практики
4. Как это менеджить - приёмы управления легаси проектами
5. Да ладно, не всё так плохо - примеры весёлого кода
6. Примеры оптимизации - что стоит попробовать
7. Мониторинг приложений - JavaMelody
8. Мониторинг приложений - логи и ELK (ElasticSearch + Logstash + Kibana)
9. Мониторинг приложений - мониторинг и менеджмент JVM
2
Как работать с легаси и сохранить
психическое здоровье
Подходы, техники, примеры
Что такое легаси Дано:
1. Исто(е)рический код
2. Старые технологии
3. Неконсистентная архитектура
4. Недостаток или отсутствие документации
НО
5. ПРОДАКШН
a. Деньги
b. Надёжность (блажен кто верует)
c. Риски
Надо:
1. Разработка нового функционала
2. Багфиксинг
3. Стабилизация
4
Что с этим всем делать
1. Читать код (понять ход мыслей автора)
2. И смежный тоже
3. Докапываться до самой глубины (Call Hierarchy, Type
Hierarchy)
4. Дебажить, в том числе и либы, в том числе и
опенсорсные, которые потом, возможно, пересобирать
5. Искать старую докуметацию и носителей знаний
6. Документировать результаты своего reverse engineering-а
(flow diagrams, sequence diagrams)
a. Отдельные документы для технарей и бизнеса
b. Не забывать этой документацией пользоваться
5
А руками?
1. НЕ ПЕРЕПИСЫВАТЬ!
2. Реализовывать новый функционал. Писать консистентно с
существующим кодом
3. Отталкиваться от business value при оптимизации и
стабилизации.
4. Тестировать (manual + unit + automation)
5. Рефакторить, когда уже невмоготу или очень понемногу (тот
же business value)
6. Наладить взаимодействие с девопсами: релизная
процедура, outage alerting, отдельные environment-ы для
всего
7. Branching strategy
8. Code review and tools
6
Как это менеджить
1. Не всем девелоперам подходит
2. Тщательно подбирать команду по личностным
качествам - без чувства юмора и самоиронии
загнётесь. Без терпения - тоже.
3. Напоминать о всех вышеупомянутых техниках
4. Задавать дурные вопросы людям
5. Терпеливо объяснять новому менеджменту, что
“здесь так принято”
6. Выстроить процесс и следовать ему во избежание
увеличения энтропии
7. Оверэстимейтить - закладывать буферы на
сюрпризы (неочевидные зависимости - пример с
css)
8. Противостоять потоку бизнес-требований (баланс
бизнеса и стабилизации)
9. Вести technical debt
10. Отдельные маленькие проекты по стабилизации
11. Иметь SWAT-группу
7
Да ладно, не всё так плохо...
/**
* This is so wrong. This method, getInt, is
returning a long.
* This is required by some configuration
somewhere that uses autowire properties.
* Attempts to change this to an int return
value cause the application
* to fail on startup.
*/
public final long getInt(String str, int def)
generateItemList((DateTime) null,(DateTime) null);
Calendar.continuation_for_the_fucking_khtml_browser
= function() { ….. }
// (calendar.js from http://dynarch.com/jscal/)
8
Да ладно, не всё так плохо...
documentRow = new Chunk("Total:", new Font(bfVerdana, 8, Font.BOLD, COLOR_BLACK));
cell = new Cell(documentRow);
cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
cell.setBorder(Rectangle.NO_BORDER);
cell.setLeading(8); // wysokosc
documentTable.addCell(cell);
documentRow = new Chunk("Remaining:", new Font(bfVerdana, 8, Font.BOLD, COLOR_BLACK));
cell = new Cell(documentRow);
cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
cell.setBorder(Rectangle.NO_BORDER);
cell.setLeading(8); // wysokosc
documentTable.addCell(cell);
и так 95 раз…
9
Really? This can happen?
} catch(CustomValidationException cve) {
try {
servletResponse.sendError(HttpServletResponse.SC_BAD_REQUEST,
cve.getMessage());
} catch(IOException ioe) {
// really? this can happen? wtf am i supposed to do now? my whole server is
crashing.
LOGGER.warn("Unable to send error response!", ioe);
}
10
Примеры оптимизации
1. Уход от ежедневных рестартов
2. Добавление скриптов,
перезапускающих Эйры - антипаттерн
3. Уход от Зукипера
4. Переход на sessionless BFM
5. Переход на Sabre Orchestrated API
6. Slow SQL queries
7. Проход по всем логам и составление
prodLogExceptions эпика
8. Фикс багов заменой библиотек на новые
a. Spring -
org.springframework.http.MediaType
b. Jackson JSON DeSerializer в Java 7
9. Третьесторонние зависимости (frontend
(TWRS, CY, GTM, ATM), backend, dead links
scanning)
10. Cтабилизационный проект, внедрение
мониторинга JVM и аггрегации логов, о
чём ниже
11
Мониторинг Java-приложений
JavaMelody, ELK, etc.
Мониторинг приложения: JavaMelody
Что это?
JavaMelody - это инструмент для мониторинга Java-
приложений (спасибо, Кэп!).
Интегрируется либо в application server, либо в ваш
application.
В реальном времени собирает метрики:
1. CPU usage, RAM usage (Heap/Perm gen), Thread
count, HTTP activity;
2. MySQL connections, transactions per minute, running
queries, min/max query time, статистика самых
популярных и самых медленных запросов
(проксирование JDBC драйвера);
3. Thread info in details: какие потоки, что делают,
какой код их вызвал;
4. Hibernate L2 cache: посмотреть какой кеш, где, что
в нём и (при необходимости) грохнуть его;
5. Логи: самые популярные entry, сортировка по типу;
6. System load, disc usage, free disc space, etc.
13
Мониторинг приложения: JavaMelody
1. Real-time application health monitoring (is it dead yet?);
2. Возможность быстро реагировать на outage’ы и решать
сиюминутные проблемы;
3. Логи не всегда показывают всю картину произошедшего,
можно посмотреть что было с приложением в
определённый момент времени;
4. Возможность предусмотреть многие проблемы ещё до
того, как сработает dev-ops alerting (он же у вас есть,
правда?);
5. Графики более наглядны для менеджеров и прочих
бизнесов;
6. Легче ответить на вопросы клиента а-ля “почему мы
потеряли много килобаксов денег?”;
7. Дев-опсы скажут вам спасибо!
Зачем мне всё это?
14
Мониторинг приложения: JavaMelody
Threads
Memory
1. Видна нагрузка на сервер
2. Пики (очевидно) в вечернее время.
1. “Пила” показывает как приложение ест
память, можно копать глубже
2. Кореллирует по времени с GC-graph’
ом
3. Проседания справа - деплойменты
15
Мониторинг приложения: JavaMelody
Web Server Administration Server
16
Что это и зачем мне это?
Elasticsearch + Logstash + Kibana - стек
технологий для аггрегации, анализа и
визуализации данных из логов.
1. Статистические данные в реальном
времени из логов приложения;
2. Настраиваемые выборки под
конкретные условия и ситуации;
3. Ещё больше цветастых графиков,
понятных даже вашему менеджеру;
4. Полезно не только с технической
стороны, но и со стороны бизнеса;
5. Лишний повод привести в порядок
логгирование в вашем приложении;
Мониторинг приложения: Логи и ELK
17
Мониторинг приложения: Логи и ELK - бизнес
18
Мониторинг приложения: Логи и ELK - девелопер
19
Мониторинг приложения: JMC, MAT, VisualVM...
Кто все эти люди?
1. Java Mission Control (Starting with the release of
Oracle JDK 7 Update 40 (7u40), Java Mission
Control is bundled with the HotSpot JVM),Flight
Recorder requires commercial license;
2. Heap Dump Memory Analyzer Tool и
-XX:+HeapDumpOnOutOfMemoryError, для
случаев, когда “Что упало - то пропало” нас не
устраивает;
3. VisualVM (since JDK version 6, update 7);
4. Solaris Studio Performance Analyzer (linux
and solaris only);
20
Time for an update!
А давайте обновим фреймворки!
1. Обновление JDBC-драйвера, Tomcat
threadpool’а и прочих штук - полезно;
2. Неочевидные изменения под капотом
фреймворков могут привести к конфликтам
библиотек;
3. “Работает - не трогай!” не всегда
справедливо;
4. Отдельная история с application server’ами и
версией Java - ВНИМАТЕЛЬНО читать
change-log’и;
21
Полезные ссылки
Victor Polischuk. Legacy Projects. How To Win The Race.
http://jeeconf.com/archive/materials-2014/legacy-projects/
Michael Feathers. Working Effectively with Legacy Code
http://www.slideshare.net/nashjain/working-effectively-with-legacy-code-presentation
22
Вопросы
23
Спасибо за внимание!
24

Mais conteúdo relacionado

Mais procurados

Нагрузочное тестирование по-живому
Нагрузочное тестирование по-живомуНагрузочное тестирование по-живому
Нагрузочное тестирование по-живомуAnton Stepanenko
 
Логгирование. Зачем? Когда? Сколько?
Логгирование. Зачем? Когда? Сколько?Логгирование. Зачем? Когда? Сколько?
Логгирование. Зачем? Когда? Сколько?Ivan Fedorov
 
Как перестать хранить секреты в git и начать использовать Hashicorp Vault
Как перестать хранить секреты в git и начать использовать Hashicorp VaultКак перестать хранить секреты в git и начать использовать Hashicorp Vault
Как перестать хранить секреты в git и начать использовать Hashicorp VaultOleg Mykolaichenko
 
Интернет-магазин на javascript
Интернет-магазин на javascriptИнтернет-магазин на javascript
Интернет-магазин на javascriptNickolay Chernobaev
 
КГТУ Лекция 6: Обеспечение Качества Программного Обеспечения
КГТУ Лекция 6: Обеспечение Качества Программного Обеспечения КГТУ Лекция 6: Обеспечение Качества Программного Обеспечения
КГТУ Лекция 6: Обеспечение Качества Программного Обеспечения Iosif Itkin
 
Валерий Блонский (Казахстан), PACIFICA. Как угнать Ботнет
Валерий Блонский (Казахстан), PACIFICA. Как угнать БотнетВалерий Блонский (Казахстан), PACIFICA. Как угнать Ботнет
Валерий Блонский (Казахстан), PACIFICA. Как угнать БотнетKazHackStan
 
Agile Vector - внедрение agile разработки в Райффайзенбанке
Agile Vector - внедрение agile разработки в РайффайзенбанкеAgile Vector - внедрение agile разработки в Райффайзенбанке
Agile Vector - внедрение agile разработки в РайффайзенбанкеAlexey Deryushkin
 
Тестирование высоконагруженных облачных веб-сервисов в Amazon - подводные кам...
Тестирование высоконагруженных облачных веб-сервисов в Amazon - подводные кам...Тестирование высоконагруженных облачных веб-сервисов в Amazon - подводные кам...
Тестирование высоконагруженных облачных веб-сервисов в Amazon - подводные кам...SQALab
 
Скажи мне правду, Scrum, когда тестировать нам?
Скажи мне правду, Scrum, когда тестировать нам?Скажи мне правду, Scrum, когда тестировать нам?
Скажи мне правду, Scrum, когда тестировать нам?SQALab
 
Наталья Медведева - Тестировщик на все руки в Scrum-команде
Наталья Медведева - Тестировщик на все руки в Scrum-командеНаталья Медведева - Тестировщик на все руки в Scrum-команде
Наталья Медведева - Тестировщик на все руки в Scrum-командеSQALab
 
HappyDev-lite-2016-осень, день 2 01 Денис Нелюбин. Жизнь после релиза
HappyDev-lite-2016-осень, день 2 01 Денис Нелюбин. Жизнь после релизаHappyDev-lite-2016-осень, день 2 01 Денис Нелюбин. Жизнь после релиза
HappyDev-lite-2016-осень, день 2 01 Денис Нелюбин. Жизнь после релизаHappyDev-lite
 
Валерий Боронин (Россия), Positive Technologies. SSDL для руководителей: как ...
Валерий Боронин (Россия), Positive Technologies. SSDL для руководителей: как ...Валерий Боронин (Россия), Positive Technologies. SSDL для руководителей: как ...
Валерий Боронин (Россия), Positive Technologies. SSDL для руководителей: как ...KazHackStan
 
Как разработать защищенное веб-приложение и не сойти при этом с ума? (PHDays 3)
Как разработать защищенное веб-приложение и не сойти при этом с ума? (PHDays 3)Как разработать защищенное веб-приложение и не сойти при этом с ума? (PHDays 3)
Как разработать защищенное веб-приложение и не сойти при этом с ума? (PHDays 3)Vladimir Kochetkov
 
Владимир Кочетков. Как разработать защищенное веб-приложение и не сойти при э...
Владимир Кочетков. Как разработать защищенное веб-приложение и не сойти при э...Владимир Кочетков. Как разработать защищенное веб-приложение и не сойти при э...
Владимир Кочетков. Как разработать защищенное веб-приложение и не сойти при э...Positive Hack Days
 

Mais procurados (16)

Нагрузочное тестирование по-живому
Нагрузочное тестирование по-живомуНагрузочное тестирование по-живому
Нагрузочное тестирование по-живому
 
Логгирование. Зачем? Когда? Сколько?
Логгирование. Зачем? Когда? Сколько?Логгирование. Зачем? Когда? Сколько?
Логгирование. Зачем? Когда? Сколько?
 
Как перестать хранить секреты в git и начать использовать Hashicorp Vault
Как перестать хранить секреты в git и начать использовать Hashicorp VaultКак перестать хранить секреты в git и начать использовать Hashicorp Vault
Как перестать хранить секреты в git и начать использовать Hashicorp Vault
 
Интернет-магазин на javascript
Интернет-магазин на javascriptИнтернет-магазин на javascript
Интернет-магазин на javascript
 
КГТУ Лекция 6: Обеспечение Качества Программного Обеспечения
КГТУ Лекция 6: Обеспечение Качества Программного Обеспечения КГТУ Лекция 6: Обеспечение Качества Программного Обеспечения
КГТУ Лекция 6: Обеспечение Качества Программного Обеспечения
 
Валерий Блонский (Казахстан), PACIFICA. Как угнать Ботнет
Валерий Блонский (Казахстан), PACIFICA. Как угнать БотнетВалерий Блонский (Казахстан), PACIFICA. Как угнать Ботнет
Валерий Блонский (Казахстан), PACIFICA. Как угнать Ботнет
 
Software Testing
Software TestingSoftware Testing
Software Testing
 
Agile Vector - внедрение agile разработки в Райффайзенбанке
Agile Vector - внедрение agile разработки в РайффайзенбанкеAgile Vector - внедрение agile разработки в Райффайзенбанке
Agile Vector - внедрение agile разработки в Райффайзенбанке
 
Тестирование высоконагруженных облачных веб-сервисов в Amazon - подводные кам...
Тестирование высоконагруженных облачных веб-сервисов в Amazon - подводные кам...Тестирование высоконагруженных облачных веб-сервисов в Amazon - подводные кам...
Тестирование высоконагруженных облачных веб-сервисов в Amazon - подводные кам...
 
Скажи мне правду, Scrum, когда тестировать нам?
Скажи мне правду, Scrum, когда тестировать нам?Скажи мне правду, Scrum, когда тестировать нам?
Скажи мне правду, Scrum, когда тестировать нам?
 
Наталья Медведева - Тестировщик на все руки в Scrum-команде
Наталья Медведева - Тестировщик на все руки в Scrum-командеНаталья Медведева - Тестировщик на все руки в Scrum-команде
Наталья Медведева - Тестировщик на все руки в Scrum-команде
 
Как работать с legacy проектом, которому больше10 лет? |Денис Воскобойник
Как работать с legacy проектом, которому больше10 лет? |Денис ВоскобойникКак работать с legacy проектом, которому больше10 лет? |Денис Воскобойник
Как работать с legacy проектом, которому больше10 лет? |Денис Воскобойник
 
HappyDev-lite-2016-осень, день 2 01 Денис Нелюбин. Жизнь после релиза
HappyDev-lite-2016-осень, день 2 01 Денис Нелюбин. Жизнь после релизаHappyDev-lite-2016-осень, день 2 01 Денис Нелюбин. Жизнь после релиза
HappyDev-lite-2016-осень, день 2 01 Денис Нелюбин. Жизнь после релиза
 
Валерий Боронин (Россия), Positive Technologies. SSDL для руководителей: как ...
Валерий Боронин (Россия), Positive Technologies. SSDL для руководителей: как ...Валерий Боронин (Россия), Positive Technologies. SSDL для руководителей: как ...
Валерий Боронин (Россия), Positive Technologies. SSDL для руководителей: как ...
 
Как разработать защищенное веб-приложение и не сойти при этом с ума? (PHDays 3)
Как разработать защищенное веб-приложение и не сойти при этом с ума? (PHDays 3)Как разработать защищенное веб-приложение и не сойти при этом с ума? (PHDays 3)
Как разработать защищенное веб-приложение и не сойти при этом с ума? (PHDays 3)
 
Владимир Кочетков. Как разработать защищенное веб-приложение и не сойти при э...
Владимир Кочетков. Как разработать защищенное веб-приложение и не сойти при э...Владимир Кочетков. Как разработать защищенное веб-приложение и не сойти при э...
Владимир Кочетков. Как разработать защищенное веб-приложение и не сойти при э...
 

Destaque

Presentación empresa Emtelco S.A.S
Presentación empresa Emtelco S.A.SPresentación empresa Emtelco S.A.S
Presentación empresa Emtelco S.A.Semtelco
 
Literatura Paredes 2_A
Literatura Paredes 2_ALiteratura Paredes 2_A
Literatura Paredes 2_Abris paredes
 
Mitocondrias Paredes 2_A
Mitocondrias Paredes 2_AMitocondrias Paredes 2_A
Mitocondrias Paredes 2_Abris paredes
 
УЗИ при послеоперационных перитонитах
УЗИ при послеоперационных перитонитахУЗИ при послеоперационных перитонитах
УЗИ при послеоперационных перитонитахСоломаха Анна
 
Eπισκεφτείτε τα υπέροχα ελληνικά νησιά
Eπισκεφτείτε τα υπέροχα ελληνικά νησιάEπισκεφτείτε τα υπέροχα ελληνικά νησιά
Eπισκεφτείτε τα υπέροχα ελληνικά νησιά70athinon
 
SE2016 JS Gregory Shehet "Undefined on prod, or how to test a react application"
SE2016 JS Gregory Shehet "Undefined on prod, or how to test a react application"SE2016 JS Gregory Shehet "Undefined on prod, or how to test a react application"
SE2016 JS Gregory Shehet "Undefined on prod, or how to test a react application"Inhacking
 
SE2016 BigData Volodymyr Getmanskyi "How to build a dynamic pricing model usi...
SE2016 BigData Volodymyr Getmanskyi "How to build a dynamic pricing model usi...SE2016 BigData Volodymyr Getmanskyi "How to build a dynamic pricing model usi...
SE2016 BigData Volodymyr Getmanskyi "How to build a dynamic pricing model usi...Inhacking
 

Destaque (13)

Presentación empresa Emtelco S.A.S
Presentación empresa Emtelco S.A.SPresentación empresa Emtelco S.A.S
Presentación empresa Emtelco S.A.S
 
Javabeans
JavabeansJavabeans
Javabeans
 
Literatura Paredes 2_A
Literatura Paredes 2_ALiteratura Paredes 2_A
Literatura Paredes 2_A
 
Java ide
Java ideJava ide
Java ide
 
Javabeginners
JavabeginnersJavabeginners
Javabeginners
 
Concurency
ConcurencyConcurency
Concurency
 
6java switch
6java switch6java switch
6java switch
 
Mitocondrias Paredes 2_A
Mitocondrias Paredes 2_AMitocondrias Paredes 2_A
Mitocondrias Paredes 2_A
 
УЗИ при послеоперационных перитонитах
УЗИ при послеоперационных перитонитахУЗИ при послеоперационных перитонитах
УЗИ при послеоперационных перитонитах
 
Seminario 7-final
Seminario 7-finalSeminario 7-final
Seminario 7-final
 
Eπισκεφτείτε τα υπέροχα ελληνικά νησιά
Eπισκεφτείτε τα υπέροχα ελληνικά νησιάEπισκεφτείτε τα υπέροχα ελληνικά νησιά
Eπισκεφτείτε τα υπέροχα ελληνικά νησιά
 
SE2016 JS Gregory Shehet "Undefined on prod, or how to test a react application"
SE2016 JS Gregory Shehet "Undefined on prod, or how to test a react application"SE2016 JS Gregory Shehet "Undefined on prod, or how to test a react application"
SE2016 JS Gregory Shehet "Undefined on prod, or how to test a react application"
 
SE2016 BigData Volodymyr Getmanskyi "How to build a dynamic pricing model usi...
SE2016 BigData Volodymyr Getmanskyi "How to build a dynamic pricing model usi...SE2016 BigData Volodymyr Getmanskyi "How to build a dynamic pricing model usi...
SE2016 BigData Volodymyr Getmanskyi "How to build a dynamic pricing model usi...
 

Semelhante a SE2016 Java Dmitriy Kouperman "Working with legacy systems. Stabilization, monitoring, management"

Mobile Monday Kiev#1 - How to save time in Mobile Apps Development
Mobile Monday Kiev#1 - How to save time in Mobile Apps DevelopmentMobile Monday Kiev#1 - How to save time in Mobile Apps Development
Mobile Monday Kiev#1 - How to save time in Mobile Apps DevelopmentIntersog
 
Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления п...
Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления п...Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления п...
Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления п...Provectus
 
Нюансы запуска приложений в Kubernetes
Нюансы запуска приложений в KubernetesНюансы запуска приложений в Kubernetes
Нюансы запуска приложений в KubernetesАндрей Новиков
 
Костянтин Чаус — Monitoring of huge Drupal site. Tools and tips
Костянтин Чаус — Monitoring of huge Drupal site. Tools and tipsКостянтин Чаус — Monitoring of huge Drupal site. Tools and tips
Костянтин Чаус — Monitoring of huge Drupal site. Tools and tipsLEDC 2016
 
Software craftsmanship meetup #9. Логирование, мониторинг, оповещение
Software craftsmanship meetup #9. Логирование, мониторинг, оповещениеSoftware craftsmanship meetup #9. Логирование, мониторинг, оповещение
Software craftsmanship meetup #9. Логирование, мониторинг, оповещениеPavel Veinik
 
Разговор про Java 9. Extended version
Разговор про Java 9. Extended versionРазговор про Java 9. Extended version
Разговор про Java 9. Extended versionIvan Krylov
 
Построение систем автоматического протоколирования Си/Си++ кода
Построение систем автоматического протоколирования Си/Си++ кодаПостроение систем автоматического протоколирования Си/Си++ кода
Построение систем автоматического протоколирования Си/Си++ кодаTatyanazaxarova
 
Dz Java Hi Load 0.4
Dz Java Hi Load 0.4Dz Java Hi Load 0.4
Dz Java Hi Load 0.4HighLoad2009
 
Реверс-инжиниринг требований в проекте по миграции КИС. Алексей Смирнов
Реверс-инжиниринг требований в проекте по миграции КИС.  Алексей СмирновРеверс-инжиниринг требований в проекте по миграции КИС.  Алексей Смирнов
Реверс-инжиниринг требований в проекте по миграции КИС. Алексей СмирновAlexander Baikin
 
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...Ontico
 
ITGM8. Илья Коробицын (Grid Dinamics) Автоматизатор, копай глубже, копай шире!
ITGM8. Илья Коробицын (Grid Dinamics) Автоматизатор, копай глубже, копай шире!ITGM8. Илья Коробицын (Grid Dinamics) Автоматизатор, копай глубже, копай шире!
ITGM8. Илья Коробицын (Grid Dinamics) Автоматизатор, копай глубже, копай шире!SPB SQA Group
 
[jeeconf-2011] Java Platform Performance BoF
[jeeconf-2011] Java Platform Performance BoF[jeeconf-2011] Java Platform Performance BoF
[jeeconf-2011] Java Platform Performance BoFAleksey Shipilev
 
дерюшкин Agile vector
дерюшкин   Agile vectorдерюшкин   Agile vector
дерюшкин Agile vectorMagneta AI
 
Расширяемая платформа для создания и управления автоматизированными тестами н...
Расширяемая платформа для создания и управления автоматизированными тестами н...Расширяемая платформа для создания и управления автоматизированными тестами н...
Расширяемая платформа для создания и управления автоматизированными тестами н...jazzteam
 
Наталья Чуфырина, Mail.Ru Group, «Как создать команду по автоматизации тестир...
Наталья Чуфырина, Mail.Ru Group, «Как создать команду по автоматизации тестир...Наталья Чуфырина, Mail.Ru Group, «Как создать команду по автоматизации тестир...
Наталья Чуфырина, Mail.Ru Group, «Как создать команду по автоматизации тестир...Mail.ru Group
 
D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"Dev2Dev
 
Software craftsmanship #5 кэши и микросервисы
Software craftsmanship #5 кэши и микросервисыSoftware craftsmanship #5 кэши и микросервисы
Software craftsmanship #5 кэши и микросервисыPavel Veinik
 
михаил сухов (мегаплан) мобильные приложения мегаплана от 0 до 100%
михаил сухов (мегаплан)   мобильные приложения мегаплана от 0 до 100%михаил сухов (мегаплан)   мобильные приложения мегаплана от 0 до 100%
михаил сухов (мегаплан) мобильные приложения мегаплана от 0 до 100%PCampRussia
 

Semelhante a SE2016 Java Dmitriy Kouperman "Working with legacy systems. Stabilization, monitoring, management" (20)

Mobile Monday Kiev#1 - How to save time in Mobile Apps Development
Mobile Monday Kiev#1 - How to save time in Mobile Apps DevelopmentMobile Monday Kiev#1 - How to save time in Mobile Apps Development
Mobile Monday Kiev#1 - How to save time in Mobile Apps Development
 
Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления п...
Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления п...Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления п...
Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления п...
 
Нюансы запуска приложений в Kubernetes
Нюансы запуска приложений в KubernetesНюансы запуска приложений в Kubernetes
Нюансы запуска приложений в Kubernetes
 
Костянтин Чаус — Monitoring of huge Drupal site. Tools and tips
Костянтин Чаус — Monitoring of huge Drupal site. Tools and tipsКостянтин Чаус — Monitoring of huge Drupal site. Tools and tips
Костянтин Чаус — Monitoring of huge Drupal site. Tools and tips
 
Software craftsmanship meetup #9. Логирование, мониторинг, оповещение
Software craftsmanship meetup #9. Логирование, мониторинг, оповещениеSoftware craftsmanship meetup #9. Логирование, мониторинг, оповещение
Software craftsmanship meetup #9. Логирование, мониторинг, оповещение
 
Разговор про Java 9. Extended version
Разговор про Java 9. Extended versionРазговор про Java 9. Extended version
Разговор про Java 9. Extended version
 
Построение систем автоматического протоколирования Си/Си++ кода
Построение систем автоматического протоколирования Си/Си++ кодаПостроение систем автоматического протоколирования Си/Си++ кода
Построение систем автоматического протоколирования Си/Си++ кода
 
Dz Java Hi Load 0.4
Dz Java Hi Load 0.4Dz Java Hi Load 0.4
Dz Java Hi Load 0.4
 
Team workflow
Team workflowTeam workflow
Team workflow
 
Реверс-инжиниринг требований в проекте по миграции КИС. Алексей Смирнов
Реверс-инжиниринг требований в проекте по миграции КИС.  Алексей СмирновРеверс-инжиниринг требований в проекте по миграции КИС.  Алексей Смирнов
Реверс-инжиниринг требований в проекте по миграции КИС. Алексей Смирнов
 
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
 
ITGM8. Илья Коробицын (Grid Dinamics) Автоматизатор, копай глубже, копай шире!
ITGM8. Илья Коробицын (Grid Dinamics) Автоматизатор, копай глубже, копай шире!ITGM8. Илья Коробицын (Grid Dinamics) Автоматизатор, копай глубже, копай шире!
ITGM8. Илья Коробицын (Grid Dinamics) Автоматизатор, копай глубже, копай шире!
 
[jeeconf-2011] Java Platform Performance BoF
[jeeconf-2011] Java Platform Performance BoF[jeeconf-2011] Java Platform Performance BoF
[jeeconf-2011] Java Platform Performance BoF
 
дерюшкин Agile vector
дерюшкин   Agile vectorдерюшкин   Agile vector
дерюшкин Agile vector
 
Расширяемая платформа для создания и управления автоматизированными тестами н...
Расширяемая платформа для создания и управления автоматизированными тестами н...Расширяемая платформа для создания и управления автоматизированными тестами н...
Расширяемая платформа для создания и управления автоматизированными тестами н...
 
Наталья Чуфырина, Mail.Ru Group, «Как создать команду по автоматизации тестир...
Наталья Чуфырина, Mail.Ru Group, «Как создать команду по автоматизации тестир...Наталья Чуфырина, Mail.Ru Group, «Как создать команду по автоматизации тестир...
Наталья Чуфырина, Mail.Ru Group, «Как создать команду по автоматизации тестир...
 
Java 9 - кратко о новом
Java 9 -  кратко о новомJava 9 -  кратко о новом
Java 9 - кратко о новом
 
D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"
 
Software craftsmanship #5 кэши и микросервисы
Software craftsmanship #5 кэши и микросервисыSoftware craftsmanship #5 кэши и микросервисы
Software craftsmanship #5 кэши и микросервисы
 
михаил сухов (мегаплан) мобильные приложения мегаплана от 0 до 100%
михаил сухов (мегаплан)   мобильные приложения мегаплана от 0 до 100%михаил сухов (мегаплан)   мобильные приложения мегаплана от 0 до 100%
михаил сухов (мегаплан) мобильные приложения мегаплана от 0 до 100%
 

Mais de Inhacking

SE2016 Fundraising Roman Kravchenko "Investment in Ukrainian IoT-Startups"
SE2016 Fundraising Roman Kravchenko "Investment in Ukrainian IoT-Startups"SE2016 Fundraising Roman Kravchenko "Investment in Ukrainian IoT-Startups"
SE2016 Fundraising Roman Kravchenko "Investment in Ukrainian IoT-Startups"Inhacking
 
SE2016 Fundraising Wlodek Laskowski "Insider guide to successful fundraising ...
SE2016 Fundraising Wlodek Laskowski "Insider guide to successful fundraising ...SE2016 Fundraising Wlodek Laskowski "Insider guide to successful fundraising ...
SE2016 Fundraising Wlodek Laskowski "Insider guide to successful fundraising ...Inhacking
 
SE2016 Fundraising Andrey Sobol "Blockchain Crowdfunding or "Mommy, look, I l...
SE2016 Fundraising Andrey Sobol "Blockchain Crowdfunding or "Mommy, look, I l...SE2016 Fundraising Andrey Sobol "Blockchain Crowdfunding or "Mommy, look, I l...
SE2016 Fundraising Andrey Sobol "Blockchain Crowdfunding or "Mommy, look, I l...Inhacking
 
SE2016 Company Development Valentin Dombrovsky "Travel startups challenges an...
SE2016 Company Development Valentin Dombrovsky "Travel startups challenges an...SE2016 Company Development Valentin Dombrovsky "Travel startups challenges an...
SE2016 Company Development Valentin Dombrovsky "Travel startups challenges an...Inhacking
 
SE2016 Company Development Vadym Gorenko "How to pass the death valley"
SE2016 Company Development Vadym Gorenko  "How to pass the death valley"SE2016 Company Development Vadym Gorenko  "How to pass the death valley"
SE2016 Company Development Vadym Gorenko "How to pass the death valley"Inhacking
 
SE2016 Marketing&PR Jan Keil "Do the right thing marketing for startups"
SE2016 Marketing&PR Jan Keil "Do the right thing marketing for startups"SE2016 Marketing&PR Jan Keil "Do the right thing marketing for startups"
SE2016 Marketing&PR Jan Keil "Do the right thing marketing for startups"Inhacking
 
SE2016 PR&Marketing Mikhail Patalakha "ASO how to start and how to finish"
SE2016 PR&Marketing Mikhail Patalakha "ASO how to start and how to finish"SE2016 PR&Marketing Mikhail Patalakha "ASO how to start and how to finish"
SE2016 PR&Marketing Mikhail Patalakha "ASO how to start and how to finish"Inhacking
 
SE2016 UI/UX Alina Kononenko "Designing for Apple Watch and Apple TV"
SE2016 UI/UX Alina Kononenko "Designing for Apple Watch and Apple TV"SE2016 UI/UX Alina Kononenko "Designing for Apple Watch and Apple TV"
SE2016 UI/UX Alina Kononenko "Designing for Apple Watch and Apple TV"Inhacking
 
SE2016 Management Mikhail Lebedinkiy "iAIST the first pure ukrainian corporat...
SE2016 Management Mikhail Lebedinkiy "iAIST the first pure ukrainian corporat...SE2016 Management Mikhail Lebedinkiy "iAIST the first pure ukrainian corporat...
SE2016 Management Mikhail Lebedinkiy "iAIST the first pure ukrainian corporat...Inhacking
 
SE2016 Management Anna Lavrova "Gladiator in the suit crisis is our brand!"
SE2016 Management Anna Lavrova "Gladiator in the suit  crisis is our brand!"SE2016 Management Anna Lavrova "Gladiator in the suit  crisis is our brand!"
SE2016 Management Anna Lavrova "Gladiator in the suit crisis is our brand!"Inhacking
 
SE2016 Management Aleksey Solntsev "Management of the projects in the conditi...
SE2016 Management Aleksey Solntsev "Management of the projects in the conditi...SE2016 Management Aleksey Solntsev "Management of the projects in the conditi...
SE2016 Management Aleksey Solntsev "Management of the projects in the conditi...Inhacking
 
SE2016 Management Vitalii Laptenok "Processes and planning for a product comp...
SE2016 Management Vitalii Laptenok "Processes and planning for a product comp...SE2016 Management Vitalii Laptenok "Processes and planning for a product comp...
SE2016 Management Vitalii Laptenok "Processes and planning for a product comp...Inhacking
 
SE2016 Management Yana Prolis "Please don't burn down!"
SE2016 Management Yana Prolis "Please don't burn down!"SE2016 Management Yana Prolis "Please don't burn down!"
SE2016 Management Yana Prolis "Please don't burn down!"Inhacking
 
SE2016 Management Marina Bril "Management at marketing teams and performance"
SE2016 Management Marina Bril "Management at marketing teams and performance"SE2016 Management Marina Bril "Management at marketing teams and performance"
SE2016 Management Marina Bril "Management at marketing teams and performance"Inhacking
 
SE2016 iOS Anton Fedorchenko "Swift for Server-side Development"
SE2016 iOS Anton Fedorchenko "Swift for Server-side Development"SE2016 iOS Anton Fedorchenko "Swift for Server-side Development"
SE2016 iOS Anton Fedorchenko "Swift for Server-side Development"Inhacking
 
SE2016 iOS Alexander Voronov "Test driven development in real world"
SE2016 iOS Alexander Voronov "Test driven development in real world"SE2016 iOS Alexander Voronov "Test driven development in real world"
SE2016 iOS Alexander Voronov "Test driven development in real world"Inhacking
 
SE2016 JS Alexey Osipenko "Basics of functional reactive programming"
SE2016 JS Alexey Osipenko "Basics of functional reactive programming"SE2016 JS Alexey Osipenko "Basics of functional reactive programming"
SE2016 JS Alexey Osipenko "Basics of functional reactive programming"Inhacking
 
SE2016 Java Vladimir Mikhel "Scrapping the web"
SE2016 Java Vladimir Mikhel "Scrapping the web"SE2016 Java Vladimir Mikhel "Scrapping the web"
SE2016 Java Vladimir Mikhel "Scrapping the web"Inhacking
 
SE2016 Java Valerii Moisieienko "Apache HBase Workshop"
SE2016 Java Valerii Moisieienko "Apache HBase Workshop"SE2016 Java Valerii Moisieienko "Apache HBase Workshop"
SE2016 Java Valerii Moisieienko "Apache HBase Workshop"Inhacking
 
SE2016 Java Roman Ugolnikov "Migration and source control for your DB"
SE2016 Java Roman Ugolnikov "Migration and source control for your DB"SE2016 Java Roman Ugolnikov "Migration and source control for your DB"
SE2016 Java Roman Ugolnikov "Migration and source control for your DB"Inhacking
 

Mais de Inhacking (20)

SE2016 Fundraising Roman Kravchenko "Investment in Ukrainian IoT-Startups"
SE2016 Fundraising Roman Kravchenko "Investment in Ukrainian IoT-Startups"SE2016 Fundraising Roman Kravchenko "Investment in Ukrainian IoT-Startups"
SE2016 Fundraising Roman Kravchenko "Investment in Ukrainian IoT-Startups"
 
SE2016 Fundraising Wlodek Laskowski "Insider guide to successful fundraising ...
SE2016 Fundraising Wlodek Laskowski "Insider guide to successful fundraising ...SE2016 Fundraising Wlodek Laskowski "Insider guide to successful fundraising ...
SE2016 Fundraising Wlodek Laskowski "Insider guide to successful fundraising ...
 
SE2016 Fundraising Andrey Sobol "Blockchain Crowdfunding or "Mommy, look, I l...
SE2016 Fundraising Andrey Sobol "Blockchain Crowdfunding or "Mommy, look, I l...SE2016 Fundraising Andrey Sobol "Blockchain Crowdfunding or "Mommy, look, I l...
SE2016 Fundraising Andrey Sobol "Blockchain Crowdfunding or "Mommy, look, I l...
 
SE2016 Company Development Valentin Dombrovsky "Travel startups challenges an...
SE2016 Company Development Valentin Dombrovsky "Travel startups challenges an...SE2016 Company Development Valentin Dombrovsky "Travel startups challenges an...
SE2016 Company Development Valentin Dombrovsky "Travel startups challenges an...
 
SE2016 Company Development Vadym Gorenko "How to pass the death valley"
SE2016 Company Development Vadym Gorenko  "How to pass the death valley"SE2016 Company Development Vadym Gorenko  "How to pass the death valley"
SE2016 Company Development Vadym Gorenko "How to pass the death valley"
 
SE2016 Marketing&PR Jan Keil "Do the right thing marketing for startups"
SE2016 Marketing&PR Jan Keil "Do the right thing marketing for startups"SE2016 Marketing&PR Jan Keil "Do the right thing marketing for startups"
SE2016 Marketing&PR Jan Keil "Do the right thing marketing for startups"
 
SE2016 PR&Marketing Mikhail Patalakha "ASO how to start and how to finish"
SE2016 PR&Marketing Mikhail Patalakha "ASO how to start and how to finish"SE2016 PR&Marketing Mikhail Patalakha "ASO how to start and how to finish"
SE2016 PR&Marketing Mikhail Patalakha "ASO how to start and how to finish"
 
SE2016 UI/UX Alina Kononenko "Designing for Apple Watch and Apple TV"
SE2016 UI/UX Alina Kononenko "Designing for Apple Watch and Apple TV"SE2016 UI/UX Alina Kononenko "Designing for Apple Watch and Apple TV"
SE2016 UI/UX Alina Kononenko "Designing for Apple Watch and Apple TV"
 
SE2016 Management Mikhail Lebedinkiy "iAIST the first pure ukrainian corporat...
SE2016 Management Mikhail Lebedinkiy "iAIST the first pure ukrainian corporat...SE2016 Management Mikhail Lebedinkiy "iAIST the first pure ukrainian corporat...
SE2016 Management Mikhail Lebedinkiy "iAIST the first pure ukrainian corporat...
 
SE2016 Management Anna Lavrova "Gladiator in the suit crisis is our brand!"
SE2016 Management Anna Lavrova "Gladiator in the suit  crisis is our brand!"SE2016 Management Anna Lavrova "Gladiator in the suit  crisis is our brand!"
SE2016 Management Anna Lavrova "Gladiator in the suit crisis is our brand!"
 
SE2016 Management Aleksey Solntsev "Management of the projects in the conditi...
SE2016 Management Aleksey Solntsev "Management of the projects in the conditi...SE2016 Management Aleksey Solntsev "Management of the projects in the conditi...
SE2016 Management Aleksey Solntsev "Management of the projects in the conditi...
 
SE2016 Management Vitalii Laptenok "Processes and planning for a product comp...
SE2016 Management Vitalii Laptenok "Processes and planning for a product comp...SE2016 Management Vitalii Laptenok "Processes and planning for a product comp...
SE2016 Management Vitalii Laptenok "Processes and planning for a product comp...
 
SE2016 Management Yana Prolis "Please don't burn down!"
SE2016 Management Yana Prolis "Please don't burn down!"SE2016 Management Yana Prolis "Please don't burn down!"
SE2016 Management Yana Prolis "Please don't burn down!"
 
SE2016 Management Marina Bril "Management at marketing teams and performance"
SE2016 Management Marina Bril "Management at marketing teams and performance"SE2016 Management Marina Bril "Management at marketing teams and performance"
SE2016 Management Marina Bril "Management at marketing teams and performance"
 
SE2016 iOS Anton Fedorchenko "Swift for Server-side Development"
SE2016 iOS Anton Fedorchenko "Swift for Server-side Development"SE2016 iOS Anton Fedorchenko "Swift for Server-side Development"
SE2016 iOS Anton Fedorchenko "Swift for Server-side Development"
 
SE2016 iOS Alexander Voronov "Test driven development in real world"
SE2016 iOS Alexander Voronov "Test driven development in real world"SE2016 iOS Alexander Voronov "Test driven development in real world"
SE2016 iOS Alexander Voronov "Test driven development in real world"
 
SE2016 JS Alexey Osipenko "Basics of functional reactive programming"
SE2016 JS Alexey Osipenko "Basics of functional reactive programming"SE2016 JS Alexey Osipenko "Basics of functional reactive programming"
SE2016 JS Alexey Osipenko "Basics of functional reactive programming"
 
SE2016 Java Vladimir Mikhel "Scrapping the web"
SE2016 Java Vladimir Mikhel "Scrapping the web"SE2016 Java Vladimir Mikhel "Scrapping the web"
SE2016 Java Vladimir Mikhel "Scrapping the web"
 
SE2016 Java Valerii Moisieienko "Apache HBase Workshop"
SE2016 Java Valerii Moisieienko "Apache HBase Workshop"SE2016 Java Valerii Moisieienko "Apache HBase Workshop"
SE2016 Java Valerii Moisieienko "Apache HBase Workshop"
 
SE2016 Java Roman Ugolnikov "Migration and source control for your DB"
SE2016 Java Roman Ugolnikov "Migration and source control for your DB"SE2016 Java Roman Ugolnikov "Migration and source control for your DB"
SE2016 Java Roman Ugolnikov "Migration and source control for your DB"
 

SE2016 Java Dmitriy Kouperman "Working with legacy systems. Stabilization, monitoring, management"

  • 1. Работа с легаси системами Стабилизация, мониторинг, менеджмент Докладчики: Дмитрий Куперман, Егор Волков Дата: 3.09.2016
  • 2. План 1. Что такое легаси - осмысление 2. Что с этим всем делать - подходы 3. А руками - девелоперские практики 4. Как это менеджить - приёмы управления легаси проектами 5. Да ладно, не всё так плохо - примеры весёлого кода 6. Примеры оптимизации - что стоит попробовать 7. Мониторинг приложений - JavaMelody 8. Мониторинг приложений - логи и ELK (ElasticSearch + Logstash + Kibana) 9. Мониторинг приложений - мониторинг и менеджмент JVM 2
  • 3. Как работать с легаси и сохранить психическое здоровье Подходы, техники, примеры
  • 4. Что такое легаси Дано: 1. Исто(е)рический код 2. Старые технологии 3. Неконсистентная архитектура 4. Недостаток или отсутствие документации НО 5. ПРОДАКШН a. Деньги b. Надёжность (блажен кто верует) c. Риски Надо: 1. Разработка нового функционала 2. Багфиксинг 3. Стабилизация 4
  • 5. Что с этим всем делать 1. Читать код (понять ход мыслей автора) 2. И смежный тоже 3. Докапываться до самой глубины (Call Hierarchy, Type Hierarchy) 4. Дебажить, в том числе и либы, в том числе и опенсорсные, которые потом, возможно, пересобирать 5. Искать старую докуметацию и носителей знаний 6. Документировать результаты своего reverse engineering-а (flow diagrams, sequence diagrams) a. Отдельные документы для технарей и бизнеса b. Не забывать этой документацией пользоваться 5
  • 6. А руками? 1. НЕ ПЕРЕПИСЫВАТЬ! 2. Реализовывать новый функционал. Писать консистентно с существующим кодом 3. Отталкиваться от business value при оптимизации и стабилизации. 4. Тестировать (manual + unit + automation) 5. Рефакторить, когда уже невмоготу или очень понемногу (тот же business value) 6. Наладить взаимодействие с девопсами: релизная процедура, outage alerting, отдельные environment-ы для всего 7. Branching strategy 8. Code review and tools 6
  • 7. Как это менеджить 1. Не всем девелоперам подходит 2. Тщательно подбирать команду по личностным качествам - без чувства юмора и самоиронии загнётесь. Без терпения - тоже. 3. Напоминать о всех вышеупомянутых техниках 4. Задавать дурные вопросы людям 5. Терпеливо объяснять новому менеджменту, что “здесь так принято” 6. Выстроить процесс и следовать ему во избежание увеличения энтропии 7. Оверэстимейтить - закладывать буферы на сюрпризы (неочевидные зависимости - пример с css) 8. Противостоять потоку бизнес-требований (баланс бизнеса и стабилизации) 9. Вести technical debt 10. Отдельные маленькие проекты по стабилизации 11. Иметь SWAT-группу 7
  • 8. Да ладно, не всё так плохо... /** * This is so wrong. This method, getInt, is returning a long. * This is required by some configuration somewhere that uses autowire properties. * Attempts to change this to an int return value cause the application * to fail on startup. */ public final long getInt(String str, int def) generateItemList((DateTime) null,(DateTime) null); Calendar.continuation_for_the_fucking_khtml_browser = function() { ….. } // (calendar.js from http://dynarch.com/jscal/) 8
  • 9. Да ладно, не всё так плохо... documentRow = new Chunk("Total:", new Font(bfVerdana, 8, Font.BOLD, COLOR_BLACK)); cell = new Cell(documentRow); cell.setHorizontalAlignment(Element.ALIGN_RIGHT); cell.setBorder(Rectangle.NO_BORDER); cell.setLeading(8); // wysokosc documentTable.addCell(cell); documentRow = new Chunk("Remaining:", new Font(bfVerdana, 8, Font.BOLD, COLOR_BLACK)); cell = new Cell(documentRow); cell.setHorizontalAlignment(Element.ALIGN_RIGHT); cell.setBorder(Rectangle.NO_BORDER); cell.setLeading(8); // wysokosc documentTable.addCell(cell); и так 95 раз… 9
  • 10. Really? This can happen? } catch(CustomValidationException cve) { try { servletResponse.sendError(HttpServletResponse.SC_BAD_REQUEST, cve.getMessage()); } catch(IOException ioe) { // really? this can happen? wtf am i supposed to do now? my whole server is crashing. LOGGER.warn("Unable to send error response!", ioe); } 10
  • 11. Примеры оптимизации 1. Уход от ежедневных рестартов 2. Добавление скриптов, перезапускающих Эйры - антипаттерн 3. Уход от Зукипера 4. Переход на sessionless BFM 5. Переход на Sabre Orchestrated API 6. Slow SQL queries 7. Проход по всем логам и составление prodLogExceptions эпика 8. Фикс багов заменой библиотек на новые a. Spring - org.springframework.http.MediaType b. Jackson JSON DeSerializer в Java 7 9. Третьесторонние зависимости (frontend (TWRS, CY, GTM, ATM), backend, dead links scanning) 10. Cтабилизационный проект, внедрение мониторинга JVM и аггрегации логов, о чём ниже 11
  • 13. Мониторинг приложения: JavaMelody Что это? JavaMelody - это инструмент для мониторинга Java- приложений (спасибо, Кэп!). Интегрируется либо в application server, либо в ваш application. В реальном времени собирает метрики: 1. CPU usage, RAM usage (Heap/Perm gen), Thread count, HTTP activity; 2. MySQL connections, transactions per minute, running queries, min/max query time, статистика самых популярных и самых медленных запросов (проксирование JDBC драйвера); 3. Thread info in details: какие потоки, что делают, какой код их вызвал; 4. Hibernate L2 cache: посмотреть какой кеш, где, что в нём и (при необходимости) грохнуть его; 5. Логи: самые популярные entry, сортировка по типу; 6. System load, disc usage, free disc space, etc. 13
  • 14. Мониторинг приложения: JavaMelody 1. Real-time application health monitoring (is it dead yet?); 2. Возможность быстро реагировать на outage’ы и решать сиюминутные проблемы; 3. Логи не всегда показывают всю картину произошедшего, можно посмотреть что было с приложением в определённый момент времени; 4. Возможность предусмотреть многие проблемы ещё до того, как сработает dev-ops alerting (он же у вас есть, правда?); 5. Графики более наглядны для менеджеров и прочих бизнесов; 6. Легче ответить на вопросы клиента а-ля “почему мы потеряли много килобаксов денег?”; 7. Дев-опсы скажут вам спасибо! Зачем мне всё это? 14
  • 15. Мониторинг приложения: JavaMelody Threads Memory 1. Видна нагрузка на сервер 2. Пики (очевидно) в вечернее время. 1. “Пила” показывает как приложение ест память, можно копать глубже 2. Кореллирует по времени с GC-graph’ ом 3. Проседания справа - деплойменты 15
  • 17. Что это и зачем мне это? Elasticsearch + Logstash + Kibana - стек технологий для аггрегации, анализа и визуализации данных из логов. 1. Статистические данные в реальном времени из логов приложения; 2. Настраиваемые выборки под конкретные условия и ситуации; 3. Ещё больше цветастых графиков, понятных даже вашему менеджеру; 4. Полезно не только с технической стороны, но и со стороны бизнеса; 5. Лишний повод привести в порядок логгирование в вашем приложении; Мониторинг приложения: Логи и ELK 17
  • 19. Мониторинг приложения: Логи и ELK - девелопер 19
  • 20. Мониторинг приложения: JMC, MAT, VisualVM... Кто все эти люди? 1. Java Mission Control (Starting with the release of Oracle JDK 7 Update 40 (7u40), Java Mission Control is bundled with the HotSpot JVM),Flight Recorder requires commercial license; 2. Heap Dump Memory Analyzer Tool и -XX:+HeapDumpOnOutOfMemoryError, для случаев, когда “Что упало - то пропало” нас не устраивает; 3. VisualVM (since JDK version 6, update 7); 4. Solaris Studio Performance Analyzer (linux and solaris only); 20
  • 21. Time for an update! А давайте обновим фреймворки! 1. Обновление JDBC-драйвера, Tomcat threadpool’а и прочих штук - полезно; 2. Неочевидные изменения под капотом фреймворков могут привести к конфликтам библиотек; 3. “Работает - не трогай!” не всегда справедливо; 4. Отдельная история с application server’ами и версией Java - ВНИМАТЕЛЬНО читать change-log’и; 21
  • 22. Полезные ссылки Victor Polischuk. Legacy Projects. How To Win The Race. http://jeeconf.com/archive/materials-2014/legacy-projects/ Michael Feathers. Working Effectively with Legacy Code http://www.slideshare.net/nashjain/working-effectively-with-legacy-code-presentation 22