SlideShare una empresa de Scribd logo
1 de 24
Descargar para leer sin conexión
Работа с легаси системами
Стабилизация, мониторинг, менеджмент
Докладчики: Дмитрий Куперман, Егор Волков
Дата: 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

Más contenido relacionado

La actualidad más candente

Нагрузочное тестирование по-живому
Нагрузочное тестирование по-живомуНагрузочное тестирование по-живому
Нагрузочное тестирование по-живому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
 
Владимир Кочетков. Как разработать защищенное веб-приложение и не сойти при э...
Владимир Кочетков. Как разработать защищенное веб-приложение и не сойти при э...Владимир Кочетков. Как разработать защищенное веб-приложение и не сойти при э...
Владимир Кочетков. Как разработать защищенное веб-приложение и не сойти при э...Positive Hack Days
 
Как разработать защищенное веб-приложение и не сойти при этом с ума? (PHDays 3)
Как разработать защищенное веб-приложение и не сойти при этом с ума? (PHDays 3)Как разработать защищенное веб-приложение и не сойти при этом с ума? (PHDays 3)
Как разработать защищенное веб-приложение и не сойти при этом с ума? (PHDays 3)Vladimir Kochetkov
 

La actualidad más candente (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)
 

Similar a 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
 

Similar a 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%
 

Más de Аліна Шепшелей

Vladimir Lozanov How to deliver high quality apps to the app store
Vladimir Lozanov	How to deliver high quality apps to the app storeVladimir Lozanov	How to deliver high quality apps to the app store
Vladimir Lozanov How to deliver high quality apps to the app storeАліна Шепшелей
 
Oleksandr Yefremov Continuously delivering mobile project
Oleksandr Yefremov Continuously delivering mobile projectOleksandr Yefremov Continuously delivering mobile project
Oleksandr Yefremov Continuously delivering mobile projectАліна Шепшелей
 
Alexander Voronov Test driven development in real world
Alexander Voronov Test driven development in real worldAlexander Voronov Test driven development in real world
Alexander Voronov Test driven development in real worldАліна Шепшелей
 
Vitalii Bondarenko HDinsight: spark. advanced in memory big-data analytics wi...
Vitalii Bondarenko HDinsight: spark. advanced in memory big-data analytics wi...Vitalii Bondarenko HDinsight: spark. advanced in memory big-data analytics wi...
Vitalii Bondarenko HDinsight: spark. advanced in memory big-data analytics wi...Аліна Шепшелей
 
Valerii Iakovenko Drones as the part of the present
Valerii Iakovenko	Drones as the part of the presentValerii Iakovenko	Drones as the part of the present
Valerii Iakovenko Drones as the part of the presentАліна Шепшелей
 
Anton Ivinskyi Application level metrics and performance tests
Anton Ivinskyi	Application level metrics and performance testsAnton Ivinskyi	Application level metrics and performance tests
Anton Ivinskyi Application level metrics and performance testsАліна Шепшелей
 
Миша Рыбачук Что такое дизайн?
Миша Рыбачук Что такое дизайн?Миша Рыбачук Что такое дизайн?
Миша Рыбачук Что такое дизайн?Аліна Шепшелей
 
Макс Семенчук Дизайнер, которому доверяют
 Макс Семенчук Дизайнер, которому доверяют Макс Семенчук Дизайнер, которому доверяют
Макс Семенчук Дизайнер, которому доверяютАліна Шепшелей
 
Anton Parkhomenko Boost your design workflow or git rebase for designers
Anton Parkhomenko Boost your design workflow or git rebase for designersAnton Parkhomenko Boost your design workflow or git rebase for designers
Anton Parkhomenko Boost your design workflow or git rebase for designersАліна Шепшелей
 
Andrew Veles Product design is about the process
Andrew Veles Product design is about the processAndrew Veles Product design is about the process
Andrew Veles Product design is about the processАліна Шепшелей
 
Kononenko Alina Designing for Apple Watch and Apple TV
Kononenko Alina Designing for Apple Watch and Apple TVKononenko Alina Designing for Apple Watch and Apple TV
Kononenko Alina Designing for Apple Watch and Apple TVАліна Шепшелей
 
Mihail Patalaha Aso: how to start and how to finish?
Mihail Patalaha Aso: how to start and how to finish?Mihail Patalaha Aso: how to start and how to finish?
Mihail Patalaha Aso: how to start and how to finish?Аліна Шепшелей
 
Gregory Shehet Undefined' on prod, or how to test a react app
Gregory Shehet Undefined' on  prod, or how to test a react appGregory Shehet Undefined' on  prod, or how to test a react app
Gregory Shehet Undefined' on prod, or how to test a react appАліна Шепшелей
 
Alexey Osipenko Basics of functional reactive programming
Alexey Osipenko Basics of functional reactive programmingAlexey Osipenko Basics of functional reactive programming
Alexey Osipenko Basics of functional reactive programmingАліна Шепшелей
 
Roman Ugolnikov Migrationа and sourcecontrol for your db
Roman Ugolnikov Migrationа and sourcecontrol for your dbRoman Ugolnikov Migrationа and sourcecontrol for your db
Roman Ugolnikov Migrationа and sourcecontrol for your dbАліна Шепшелей
 

Más de Аліна Шепшелей (20)

Vladimir Lozanov How to deliver high quality apps to the app store
Vladimir Lozanov	How to deliver high quality apps to the app storeVladimir Lozanov	How to deliver high quality apps to the app store
Vladimir Lozanov How to deliver high quality apps to the app store
 
Oleksandr Yefremov Continuously delivering mobile project
Oleksandr Yefremov Continuously delivering mobile projectOleksandr Yefremov Continuously delivering mobile project
Oleksandr Yefremov Continuously delivering mobile project
 
Alexander Voronov Test driven development in real world
Alexander Voronov Test driven development in real worldAlexander Voronov Test driven development in real world
Alexander Voronov Test driven development in real world
 
Vitalii Bondarenko HDinsight: spark. advanced in memory big-data analytics wi...
Vitalii Bondarenko HDinsight: spark. advanced in memory big-data analytics wi...Vitalii Bondarenko HDinsight: spark. advanced in memory big-data analytics wi...
Vitalii Bondarenko HDinsight: spark. advanced in memory big-data analytics wi...
 
Valerii Iakovenko Drones as the part of the present
Valerii Iakovenko	Drones as the part of the presentValerii Iakovenko	Drones as the part of the present
Valerii Iakovenko Drones as the part of the present
 
Valerii Moisieienko Apache hbase workshop
Valerii Moisieienko	Apache hbase workshopValerii Moisieienko	Apache hbase workshop
Valerii Moisieienko Apache hbase workshop
 
Anton Ivinskyi Application level metrics and performance tests
Anton Ivinskyi	Application level metrics and performance testsAnton Ivinskyi	Application level metrics and performance tests
Anton Ivinskyi Application level metrics and performance tests
 
Миша Рыбачук Что такое дизайн?
Миша Рыбачук Что такое дизайн?Миша Рыбачук Что такое дизайн?
Миша Рыбачук Что такое дизайн?
 
Макс Семенчук Дизайнер, которому доверяют
 Макс Семенчук Дизайнер, которому доверяют Макс Семенчук Дизайнер, которому доверяют
Макс Семенчук Дизайнер, которому доверяют
 
Anton Parkhomenko Boost your design workflow or git rebase for designers
Anton Parkhomenko Boost your design workflow or git rebase for designersAnton Parkhomenko Boost your design workflow or git rebase for designers
Anton Parkhomenko Boost your design workflow or git rebase for designers
 
Andrew Veles Product design is about the process
Andrew Veles Product design is about the processAndrew Veles Product design is about the process
Andrew Veles Product design is about the process
 
Kononenko Alina Designing for Apple Watch and Apple TV
Kononenko Alina Designing for Apple Watch and Apple TVKononenko Alina Designing for Apple Watch and Apple TV
Kononenko Alina Designing for Apple Watch and Apple TV
 
Mihail Patalaha Aso: how to start and how to finish?
Mihail Patalaha Aso: how to start and how to finish?Mihail Patalaha Aso: how to start and how to finish?
Mihail Patalaha Aso: how to start and how to finish?
 
Gregory Shehet Undefined' on prod, or how to test a react app
Gregory Shehet Undefined' on  prod, or how to test a react appGregory Shehet Undefined' on  prod, or how to test a react app
Gregory Shehet Undefined' on prod, or how to test a react app
 
Alexey Osipenko Basics of functional reactive programming
Alexey Osipenko Basics of functional reactive programmingAlexey Osipenko Basics of functional reactive programming
Alexey Osipenko Basics of functional reactive programming
 
Vladimir Mikhel Scrapping the web
Vladimir Mikhel Scrapping the web Vladimir Mikhel Scrapping the web
Vladimir Mikhel Scrapping the web
 
Roman Ugolnikov Migrationа and sourcecontrol for your db
Roman Ugolnikov Migrationа and sourcecontrol for your dbRoman Ugolnikov Migrationа and sourcecontrol for your db
Roman Ugolnikov Migrationа and sourcecontrol for your db
 
Dmutro Panin JHipster
Dmutro Panin JHipster Dmutro Panin JHipster
Dmutro Panin JHipster
 
Alex Theedom Java ee revisits design patterns
Alex Theedom	Java ee revisits design patternsAlex Theedom	Java ee revisits design patterns
Alex Theedom Java ee revisits design patterns
 
Alexey Tokar To find a needle in a haystack
Alexey Tokar To find a needle in a haystackAlexey Tokar To find a needle in a haystack
Alexey Tokar To find a needle in a haystack
 

Último (9)

Cyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdfCyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdf
 
2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf
 
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdfMalware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
 
MS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdfMS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdf
 
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
 
CVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdfCVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdf
 
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
 
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdfСИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
 
Ransomware_Q3 2023. The report [RU].pdf
Ransomware_Q3 2023.  The report [RU].pdfRansomware_Q3 2023.  The report [RU].pdf
Ransomware_Q3 2023. The report [RU].pdf
 

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