Оптимизация скорости работы приложений
Всем привет, работаю java разработчиком почти 10 лет, хотел бы в этом посте описать, в какие моменты разработчик задумывается о скорости работы программы, в создании которой он участвует.
"То, что нельзя измерить, нельзя улучить" - для начала нужно понять, что измерять и как. Обычно требуется учитывать два основных параметра: длительность формирования ответа и количество запросов в единицу времени. Может быть неочевидно, но эти два параметра конфликтуют между собой, так что участвуют в принятии компромиссного решения вместе.
Обычно, когда проект стартует и поток пользователей небольшой, скорость работы определяется на глаз - экран загрузился за секунду и нормально. Разработчики на этом этапе заботятся только об одной "рутинной" процедуре - учете алгоритмической сложности. То есть правильно выбирают структуры данных, не забывают про индексы в бд.
Когда поток пользователей становится средним, разработчики начинают задумываться о масштабировании. Появляются пулы потоков, что заставляет более строго относиться к локальности данных. Добавляются метрики и вывод графиков производительности на монитор сопровождения. На этом этапе начинают внедрять кеши, производить денормализацию данных, распределять нагрузку по нескольким копиям сервиса и добавлять памяти.
При дальнейшем росте проекта внедряется нагрузочное тестирование, и сервис не может провести обновление, если оно ухудшает перформанс. Если пользователи распределены по разным регионам, могут использоваться локальные сервера для сокращения времени сетевого ответа. Код начинает терять в читаемости за счет эффективности, может быть использован реактивный подход для более плотной набивки тредов. В отдельных случаях может потребоваться разбираться с параметрами сборщика мусора.
Хочу заметить, что при любом размере проекта основным приоритетом являются фичи, а нагрузка является нефункциональным требованием с меньшим приоритетом. Поэтому обычно на нее обращают внимание когда программа начинает заметно тормозить. Спасибо за внимание!
Лига программистов
1.7K постов11.6K подписчиков
Правила сообщества
- Будьте взаимовежливы, аргументируйте критику
- Приветствуются любые посты по тематике программирования
- Если ваш пост содержит ссылки на внешние ресурсы - он должен быть самодостаточным. Вариации на тему "далее читайте в моей телеге" будут удаляться из сообщества