Узкие места в разработке

Узкие места в разработке

Приложение упирается в лимиты ресурсов

Одно приложение обрабатывает большой объём данных —  например, json c 100 000 объектов. Ресурсов не хватает.

Причина проблемы

Приложение написано так, чтобы обрабатывать большой объём данных за раз. Разработчик:

  • сэкономил время на декомпозиции кода;
  • тестировал код в простых и маленьких объемах, забыв о будущих масштабах.

Что делать, чтобы избежать

Пакетная обработка. Изначально организуйте код так, чтобы он мог обрабатывать данные параллельно пакетами.

Запрос обрабатывается долго

Запрос работает корректно, но медленно из-за большого объёма обрабатываемых данных. Другие процессы или пользователь долго ждут ответа или запрос возвращает timeout.

Причина проблемы

Приложение написано так, чтобы обрабатывать большой объем данных за раз (отсюда долгая обработка). В системе постоянно растёт количество данных, из-за чего их обработка занимает всё больше времени.

Что делать, чтобы избежать

Асинхронная обработка. Возвращайте в ответ на запрос не результат, а статус «запрос принят». Сам запрос должен обрабатываться асинхронно.

Единая точка отказа (SPOF)

В системе есть часть, отказ которой приводит к остановке всей системы.

Причина проблемы

Сильная связанность сервисов.

Что делать, чтобы избежать

Выстраивайте взаимодействие сервисов по принципу асинхронного обмена сообщениями.

Сервис «захлебывается» большим потоком сообщений

и не успевает быстро обработать всё, что должен. Очередь на вход растёт.

Причина проблемы:

Сервис не имеет возможности горизонтально масштабироваться для увеличения своей пропускной способности.

Что делать, чтобы избежать

Заложите возможность увеличения количества копий сервиса.

Связь «точка — точка»

Приложения связаны напрямую. Когда приложение A релизится, в приложении B перестаёт работать часть функций.

Причина проблемы

Сильная связанность сервисов.

Что делать, чтобы избежать

Используйте промежуточный слой и контракты.

Deadlock

Приложения перестают функционировать из-за того, что мешают друг другу получить доступ к общим ресурсам.

Причина проблемы

Блокировка ресурсов не регламентирована.

Что делать, чтобы избежать

Устанавливайте предельное время блокирования ресурса и не расширяйте его принудительно во время разработки.

Задавайте себе эти вопросы, чтобы избежать узких мест

  1. Сможете ли вы объяснить логику кода бизнесу без технических терминов? Нет ⇒ Логика кода слишком сложная.
  2. Бизнес понимает выбранный вами нейминг объектов и классов? Нет? ⇒ Измените нейминг в соответствии с предметной областью приложения. Объекты и классы должны называться так же, как и в бизнес-процессах.
  3. Есть ли места, в которые может прийти большое количество данных, и это приведёт к проблемам? Да ⇒ Продумайте, как можно изменить код и обрабатывать данные пакетами контролируемого размера. Продумайте возможности горизонтального масштабирования.
  4. Как связаны приложения?
  5. Есть ли сервис, на котором завязана вся работоспособность приложения? Да ⇒ Уменьшите связанность сервисов внутри приложения.

Другие статьи

Смотреть все

Цели проекта

Читать

Узкие места в разработке

Читать

Колесо баланса — ретро и пожелание

Читать

Ваша заявка отправлена успешно

Отправить снова

Базовый курс управления и построения IT-контура компании. Поток 05.09.23

Контакты

С вами свяжется модератор курса Алексей Клоков