Высокая загрузка. Лет 5-6 назад это было для меня главным модным словечком. С тех пор, как вышел фильм Социальная сеть, мне захотелось разработать такую ​​программу.

Тогда для меня не имело значения доменная зона: службы знакомств для основателей служб знакомств, нелегальные онлайн-казино или сайты, транслирующие сомнительный видеоконтент — все было бы в порядке. Я хотел быть частью команды, которая решает сложные инженерные задачи в масштабе и предоставляет продукт многим тысячам и миллионам пользователей одновременно.

Я прочитал десятки определений в Интернете из разных источников. Но я не понял, что значит highload. И теперь, после многих лет разработки различных проектов highload, я создал свое собственное определение highload.

Что Интернет говорит о Highload

Позвольте мне поделиться с вами агрегированием моих выводов из разных источников:

Высокая нагрузка начинается, когда один физический сервер становится не в состоянии обрабатывать данные.

Звучит разумно, не так ли? Но я не могу согласиться с определением, потому что оно не учитывает программное обеспечение для систем, которые вообще не могут масштабироваться. Как встроенные.

Если один экземпляр одновременно обслуживает 10 000 подключений — это высокая нагрузка.

Утверждение интересное и относится к проблеме C10K. Но я думаю, что это неправомерно исключает системы, которые обрабатывают меньше соединений.

Ваш проект считается высоконагруженным, если он обрабатывает более 100 динамических запросов в секунду.

Это не звучит достаточно серьезно, если мы подумаем об обычных HTTP-запросах, когда приложение немного переключается в базе данных. Но если обработка на бэкенде требует много работы процессора — почему бы и нет? В любом случае, давайте пропустим это, потому что оно не универсально.

Highload позволяет одновременно обслуживать тысячи и миллионы пользователей.

Это мнение распространено. Не так много проектов могут похвастаться такими цифрами. Я думаю, что наличие тонны клиентов не обязательно, чтобы быть высоконагруженной системой. Но точно хватит.

Высокая нагрузка начинается, когда обычные и очевидные решения перестают работать, и вам нужно придумывать какие-то хитрости, чтобы справиться с трафиком.

Мне нравится этот! Типа согласен с этим. Нашел это слишком поздно :).

Если ваша инфраструктура не может потреблять входящие потоки данных и требует горизонтального масштабирования — добро пожаловать в клуб Highload.

Горизонтальное масштабирование и высокая нагрузка очень часто идут рука об руку. Но это не правило для меня.

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

Это касается не только сайтов. И вам не нужна большая аудитория. С другой стороны идея хорошая.

Если вы используете одну очень мощную машину, ваш проект довольно высоконагруженный.

Да, это может быть правдой. И это тоже не обязательная функция.

Использование Lambda Architecture и Kafka увеличивает нагрузку на систему.

Мы можем перефразировать его в более общем виде: Использование технологии X или архитектурного паттерна Y увеличивает нагрузку на ваш проект. Я категорически не согласен с этим. Учащийся может сделать личный проект, который никогда не попадет в реальную производственную среду, за исключением тестирования его/ее друзьями с образцами данных, не относящимися к реальному миру. Нам нужно немного нагрузить систему реальными клиентами/набором данных, чтобы назвать ее highload.

Если вы развернуты в AWS, IBM Bluemix, Azure или Google Cloud Platform, вы поддерживаете высоконагруженный сервис.

Это определение не имеет большого смысла для меня. Как насчет локальных решений? Значит ли это, что они не могут быть в клубе Highload? Неа. Кстати, облачные вычисления предлагают множество сервисов для ускорения разработки и облегчения масштабирования.

Ну, Виач, что такое Highload?

Как вы, наверное, заметили, все перечисленные определения и куча других меня не полностью удовлетворили. Я представил весь опыт, который у меня был, чтобы сделать это заявление.

Что такое проект с высокой нагрузкой?

Проект, в котором неэффективное решение или крошечная ошибка оказывают огромное влияние на ваш бизнес. Ошибка приводит к увеличению стоимости $$$ или потере репутации компании.

С инженерной точки зрения нехватка ресурсов приводит к снижению производительности.

Мне нравится это определение больше других, потому что:

  • Ничего про цифры: серверы, подключения, запросы, пользователи. Функции могут варьироваться от проекта к проекту.
  • Мы не указываем технологии, поставщиков и шаблоны.
  • Инженеру легко определить, является ли проект высоконагруженным на данном этапе. Если вы уже не можете позволить себе принимать грубые решения без ущерба для вашего бизнеса — вы в безопасности. Пока что. В противном случае — будьте ответственны и осторожны.
  • Это обеспечивает лучшее объяснение заинтересованным сторонам бизнеса, почему ваша команда должна создавать одно решение, а не другое. Или получить бай-ин для предоставления некоторых дополнительных ресурсов. Помните, что все мы создаем программное обеспечение для решения какой-то реальной проблемы.

Подходит ли определение для каждого случая в мире? Я не уверен. Но это помогает мне определить, когда нам нужно потратить больше времени на оптимизацию, а когда этого следует избегать.

Скорее всего, бэкенд-программа, которую вы сделаете в 2017 году, будет состоять из нескольких компонентов. Некоторые части системы могут потребовать более целенаправленных усилий из-за высокой нагрузки, о которой я упоминал. Другая часть может быть в порядке с использованием тривиальных решений, скопированных из учебника.

Ваша цель как инженера — найти компромисс и решить это наилучшим образом для вашего бизнеса. Неважно, определяете ли вы проект как highload или нет ;).

Вы работаете над высоконагруженным проектом?

Что вы понимаете под высокой нагрузкой?

P.S. Некоторое время назад я сделал несколько докладов о highload, проверьте их, если вам интересно узнать больше по этой теме: