Высоконагруженные системы в разработке социальных сетей на базе DST platform
Высоконагруженные системы в разработке социальных сетей на основе DST платформы. В этой статье, подготовленной разработчиками компании DST Global, мы рассмотрим высоконагруженные системы, возникающие при разработке социальных сетей, а также обсудим следующие аспекты:
1. Что подразумевается под высокой нагрузкой?
2. Проблемы и требования, связанные с высокими нагрузками.
3. Технологии, способные противостоять вызовам.
Мы кратко рассмотрим, как определить высоконагруженность системы, а затем обсудим, какие изменения в системных требованиях она влечёт за собой. На основе опыта расскажем, какие подходы и технологии помогают преодолевать такие трудности.
Прежде всего, давайте разберемся с определением. Какие системы можно отнести к высоконагруженным? Система считается «высоконагруженной», если она соответствует следующим критериям:
- Огромное количество запросов: обрабатывается миллионы запросов в сутки.
- Большая пользовательская база: поддержка миллионов активных пользователей.
- Масштабное управление данными: работа с терабайтами или даже петабайтами информации.
- Производительность и масштабируемость: высокая операционная эффективность при растущих нагрузках.
- Сложные операции: выполнение ресурсоемких вычислений или обработка данных.
- Надежность: достигнутый уровень доступности не ниже 99,9%.
- Географическое распределение: минимальная задержка в обслуживании пользователей по всему миру.
- Параллельная обработка: множество одновременных операций.
- Балансировка нагрузок: эффективное распределение трафика для предотвращения узких мест.
Определение высоконагруженной системы
Систему можно назвать высоконагруженной, если она отвечает следующим базовым требованиям:
- Использование ресурсов: больше 50%.
- Число запросов в секунду: более 10 тыс.
Если кратко определить высоконагруженную систему, то: это система, для которой стандартные методы обработки запросов, хранения данных и управления инфраструктурой становятся недостаточными, требуя нестандартных решений.
Управление такими системами сопровождается рядом проблем:
- Производительность: поддержание быстрой обработки и отклика.
- Управление данными: эффективное хранение и извлечение больших объемов информации.
- Масштабируемость: возможность масштабирования в любой момент времени.
- Надежность: поддержание работоспособности и доступности системы при высоких нагрузках и сбоях.
- Отказоустойчивость: запуск надежных систем, которые могут восстанавливаться после сбоев.
Высоконагруженные системы управления
Высоконагруженные системы управления — неотъемлемый тренд в ИТ-сфере. Этому термину уже почти десять лет, но четкого определения до сих пор нет. Высокая нагрузка означает, что интернет-проект устойчив к высоким нагрузкам. При разработке часто возникают трудности из-за повышенной нагрузки на аппаратную и программную часть. К высоконагруженным проектам относятся:
Системы разработки с высокой нагрузкой отвечают многим требованиям и могут обрабатывать несколько запросов одновременно.
Одного сервера недостаточно, когда приложение обрабатывает огромные, постоянно растущие данные. Наиболее значимые высоконагруженные проекты, такие как Google или Facebook, используют сотни серверов. Большие машины используются не только для обслуживания миллионов пользователей. Они обеспечивают быстрое восстановление после сбоев системы и практическую экспертизу проектов. Распределенные системы помогают высоконагруженным приложениям быстро восстановиться в случае выхода из строя некоторых серверов.
Если высоконагруженная система обладает широкими возможностями настройки и предоставляет ценные функции, она эффективно формирует аудиторию. Высокая нагрузка — это система с большим количеством пользователей и реальной аудиторией, растущей со временем.
Мгновенная реакция системы с высокой нагрузкой – ее отличительная и важная особенность. Когда пользователи ищут информацию, загружают/скачивают видео или совершают покупки в Интернете, они хотят получить результаты как можно быстрее. Если они будут ждать слишком долго, они будут использовать другие сайты. Приложения с высокой нагрузкой позволяют пользователям наслаждаться плавной работой. Они получают немедленные ответы, когда что-то ищут.
Система потребляет много ресурсов — процессор, оперативную память, дисковое пространство и т. д. Необходимо иметь ресурсы свободными и в достаточном количестве. Это вызывает парадокс высоконагруженной системы: чем быстрее они растут, тем жестче необходимость контроля над ресурсами.
Когда у приложения растет аудитория, естественно растет и количество запросов. И количество ресурсов, которые необходимо тратить на поддержание интерактивности, растёт.
Высокую нагрузку необходимо постоянно масштабировать. Настроить его на работу довольно сложно, но бизнес от этого получит прибыль.
Основные характеристики системы высокой нагрузки
Если вы решили создавать высоконагруженные приложения в веб-технологиях, важно учитывать несколько принципов.
- Доступность: время безотказной работы напрямую влияет на репутацию и производительность компании.
- Представление: скорость веб-ресурса влияет на удовлетворенность пользователей сервисом и его рейтинг в результатах поиска, что влияет на трафик.
- Надежность: запрос всегда должен возвращать пользователям одни и те же данные, чтобы гарантировать, что если какие-то данные будут записаны или введены в систему, можно будет рассчитывать на их неизменяемость и сохранность при последующем извлечении.
- Масштабируемость: можно говорить о различных параметрах системы: сколько дополнительного трафика она может обработать, насколько легко увеличить емкость хранилища, сколько транзакций можно обработать сверх текущей мощности.
- Управляемость: создание простой в использовании высоконагруженной системы имеет важное значение на более позднем этапе разработки проекта, легкая диагностика и понимание сути проблем, обновление или модификация.
Возможные проблемы с системой с высокой нагрузкой
В некоторых случаях проект может нуждаться в масштабировании. Запланируйте создание приложения или связанного программного обеспечения, которое потребует участия миллионов пользователей, например, для ввода данных или осуществления платежей. Масштабируемость приложения и высокая производительность не будут вызывать наименьшего беспокойства.
Вероятно, вы столкнетесь с несколькими проблемами:
- слишком медленная или долгая загрузка страниц;
- ошибки, обнаруженные случайно;
- отключение или долгое время соединения с веб-сервером;
- частичный/отсутствующий контент при загрузке (например, когда некоторые изображения не отображаются сразу);
- снижение активности пользователей и уход клиентов с сайта.
Высокая нагрузка возникает, когда физический сервер не может эффективно обрабатывать данные. Одновременная обработка 10 000 подключений уже считается высокой нагрузкой. Некоторые серверы с высокой нагрузкой предоставляют услуги тысячам или миллионам пользователей.
Важно учитывать и другие аспекты, необходимые для развертывания и обслуживания системы:
- количество времени, затраченное разработчиками на построение системы;
- усилие, необходимое для запуска системы;
Основные проблемы при проектировании высоконагруженных систем возникают в следующих сегментах:
- объемы данных, распределение и коррекция;
- использование программного обеспечения с открытым исходным кодом;
- поиск, обработка и анализ данных;
- информационное моделирование.
Гибкость является жизненно важной характеристикой любой быстро развивающейся технологии программного обеспечения. При создании крупномасштабных веб-приложений основное внимание следует уделять гибкой архитектуре, позволяющей легко вносить изменения и расширения. Это будет означать минимальные затраты, время и усилия.
Почему необходимы системы управления высокой нагрузкой?
Необходимо определить две вещи:
- насколько велика аудитория, с которой может столкнуться проект;
- понять, насколько большим и сложным будет работать структурированный набор данных проекта.
Некоторым типам проектов для функционирования потенциально необходимы высоконагруженные системы.
- Ресурсы контента: нет необходимости планировать высоконагруженную архитектуру. Лишь немногие информационные ресурсы перерастают возможности одного сервера, если система управления контентом хорошо настроена. Если это произойдет, добавление новых серверов пройдет безболезненно благодаря возможностям кэширования контента и отсутствию необходимости в сложных решениях.
- Маркетплейсы: важна широта ассортимента. Никаких особых решений не потребуется, если он не сможет вырасти до сотен тысяч позиций. В противном случае вам нужно подумать об эффективном кэшировании часто посещаемых товаров и категорий, а также о минимизации «тяжелых» запросов к базе данных.
- Социальные сети: оцените теоретически возможное количество участников и связи между ними. Все можно легко поместить в реляционную базу данных в небольшой региональной или конкретной социальной сети. Для более крупного проекта необходимо масштабируемое решение.
- Технологические проекты: уже на этапе разработки проекта становится понятно, какая архитектура ему подходит лучше всего и как ее развивать.
Балансировка приложений с высокой нагрузкой
Архитектура — это основа приложения. Принимая решение использовать или не использовать высоконагруженные системы, предприятия руководствуются своими потребностями. Но планирование имеет важное значение. Это то, чего бизнес не видит и от чего он не получает прямых выгод. Когда речь идет о высоконагруженных приложениях, возникает необходимость построения системы мониторинга, которая:
- контролировать жизнеспособность компонентов;
- генерировать и отображать данные для мониторинга работоспособности системы при высокой нагрузке.
Бизнес не всегда понимает, для чего нужна система контроля баланса.
Что происходит без системы высокой нагрузки
Высоконагруженное приложение может вести себя непредсказуемо и перестать работать в самый неожиданный пик нагрузки при максимальном зарабатывании денег. Поэтому экономия на системе мониторинга иллюзорна. Без него вы можете понести значительные убытки.
Как работает балансировка нагрузки
Это помогает системным администраторам управлять входящими запросами, сокращая время ожидания пользователей.
Пользователи получают более быстрое и бесперебойное обслуживание, поскольку нет ограничений на ответ одного сервера. Запросы отправляются на доступные ресурсы.
Поставщики оффшорных услуг имеют меньше простоев и более высокую пропускную способность. Даже если они столкнутся с полным сбоем сервера, это не повлияет на конечного пользователя, поскольку балансировщик нагрузки немедленно направит его запрос на работающий сервер.
Системные администраторы будут сталкиваться с меньшим количеством неисправных или недогруженных компонентов. Балансировка нагрузки состоит из нескольких устройств, которые по мере необходимости выполняют дополнительную работу.
DST Platform для высоконагруженных систем
DST Platform — это мощный серверный фреймворк на PHP с высокой гибкостью, предназначенный для создания разнообразных веб-проектов, от блогов до социальных сетей и корпоративных платформ. Его универсальность и устойчивость к большим нагрузкам делают его идеальным для сложных и масштабных решений.
Платформа использует модульную архитектуру, обеспечивающую API для взаимодействия с различными модулями. Минимальная структура позволяет легко добавлять новые функции и изменять дизайн с помощью тем оформления. Механизм таксономии в DST Platform позволяет организовать контент наиболее эффективно, что повышает удобство как для разработчиков, так и для пользователей.
Таксономия способствует структурированию информации на сайте за счет создания категорий и их ассоциации с модулями ввода и вывода данных, что улучшает управление контентом. Гибкость структуры позволяет адаптировать сайт под конкретные задачи бизнеса.
Высоконагруженные системы управления
Высоконагруженные системы стали неизбежностью в современном ИТ. Под них подпадают социальные сети, маркетплейсы, крупные порталы и другие крупные проекты, способные обрабатывать множество запросов одновременно.
Преимущества высоконагруженных систем
Высоконагруженные системы обеспечивают многочисленные преимущества для бизнеса и конечных пользователей:
- Большая аудитория: обработка огромного количества одновременных пользователей.
- Распределенные системы: использование множества серверов для повышения устойчивости и эффективности.
- Положительная динамика: способствует росту аудитории и улучшению пользовательского опыта.
- Интерактивные системы: мгновенный отклик на действия пользователя.
- Высокоресурсные системы: необходимы значительные вычислительные ресурсы.
При разработке высоконагруженных приложений необходимо учитывать следующие принципы:
- Доступность: безотказное время работы.
- Производительность: скорость работы ресурса.
- Надежность: консистенция и доступность данных.
- Масштабируемость: способность увеличения производительности и емкости системы.
- Управляемость: легкость диагностики и установки обновлений.
Высоконагруженные мобильные приложения
Для успешной работы мобильных приложений необходима мощная серверная инфраструктура, способная справляться с высокими нагрузками. Оптимизация системы помогает предотвратить проблемы, связанные с производительностью и масштабируемостью, а также уменьшить риски.
Ключевые требования к высоконагруженным системам
Среди основных требований к конструкциям с высокой нагрузкой:
- Гарантия сохранности данных.
Для решения проблем хранения данных в проектах с высокой нагрузкой часто используются специализированные базы данных и индивидуальные движки, обеспечивающие эффективное управление данными и оптимизацию производительности.
Кэширование и оптимизация кода
Кэширование и процесс компиляции кода, как в случае с компилятором KPHP, играют важную роль в повышении производительности системы. Оптимизация кода и кэширование предварительно рассчитанных данных помогают значительно уменьшить нагрузку на серверную часть.
Переход к микросервисной архитектуре, использующий различные языки программирования и технологии, позволяет ускорить разработку и развертывание новых функций, а также повысить гибкость системы.
Оптимизация хранения и доставки контента
Реализация динамического изменения размера изображений и переход на формат WebP помогают устранить узкие места и улучшить доставку контента.
Высоконагруженные системы представляют собой целый спектр проблем и рисков, которые вынуждают нас пересматривать традиционные инструменты и подходы. Основные неисправности внешних решений включают:
- Общая природа: эти решения предназначены для массового использования, а не для специализированных задач.
- Уязвимости: устранение уязвимостей может быть сложным и долгим процессом.
- Недостаточная устойчивость: при высоких нагрузках эти системы могут выходить из строя.
- Ограниченный контроль: контроль над системами ограничен.
- Проблемы масштабируемости: многие внешние решения плохо масштабируются.
Проблемы внешних решений часто связаны с тем, что они не разработаны для специфических задач, что может негативно сказываться на производительности. Несмотря на широкое тестирование благодаря большой базе пользователей, быстрое устранение проблем безопасности может вызвать сложности, а обновление до исправленной версии иногда приводит к несовместимостям.
Они также требуют постоянной настройки и мониторинга, что усложняет эксплуатацию, особенно если вы не являетесь экспертом этого решения. В конечном итоге, внешние решения могут не всегда эффективно масштабироваться для высоких нагрузок.
Требования к конструкции с высокой нагрузкой
С увеличением нагрузки растут требования к надежности, управлению данными и масштабируемости:
- Минимум простоя: сегодня, с высокой конкуренцией и высокими ожиданиями пользователей, время простоя негативно влияет на их удовлетворенность и рейтинг Net Promoter Score (NPS).
- Нулевая потеря данных: облачные службы должны гарантировать сохранность данных, поскольку пользователи перестали делать собственные резервные копии.
- Линейное масштабирование: необходимо возможность быстро масштабировать системы из-за резкого роста аудитории.
- Простота обслуживания: необходимо быстрое и частое выполнение новых функций для оставаться конкурентоспособными.
Такой стандарт, как «пять девяток» доступности (аптайм 99,999%), означает, что допустимое время простоя составляет около 5 минут в год.
Для средних проектов MySQL может быть достаточно. Однако для высоконагруженных систем требуется специализированное хранилище данных.
Команда начала разрабатывать собственные системы хранения, чтобы справиться с растущей сложностью нагрузок. Они создали множество микросервисов с базами данных, написанных на C и C++. Каждый из около 800 кластеров обладает собственной логикой, например, для сообщений, рекомендаций, фотографий и новостей.
Преимущества кастомных движков хранения
- Минимальное структурирование: данные хранятся в простых индексах, что минимизирует обработку.
- Эффективный доступ к данным: упрощенные структуры данных позволяют быстрее выполнять запросы.
- Оптимизация запросов: запросы оптимизированы для конкретных случаев использования.
- Спецификация производительности: каждый двигатель настроен для своей задачи.
- Масштабируемость: сегментирование данных и репликация позволяют эффективно масштабировать систему горизонтально.
Еще одним важным аспектом нашей высоконагруженной системы является кэширование. Все данные сильно кэшируются и часто вычисляются заранее.
Кэши сегментированы с использованием специальных оболочек для автоматического подсчета количества ключей на уровне кода. В больших системах, подобных нашей, кэширование переходит от простого повышения производительности как основной цели к снижению нагрузки на серверную часть.
Преимущества этой стратегии кэширования включают в себя:
- Предварительно рассчитанные данные. Многие результаты рассчитываются заранее, что сокращает время ответа.
- Автоматическое масштабирование на уровне кода. Наши специальные оболочки помогают эффективно управлять размером кэша.
- Снижает нагрузку на серверную часть. Предоставляя предварительно вычисленные результаты, мы значительно уменьшаем рабочую нагрузку на наши базы данных.
KPHP: оптимизация кода приложения
Следующей задачей стала оптимизация кода приложения. Он был написан на PHP и стал слишком медленным, но сменить язык было невозможно при миллионах строк кода в проекте.
Именно здесь в игру вступил KPHP. Целью компилятора KPHP является преобразование кода PHP в C++. Проще говоря, компилятор преобразует код PHP в C++. Этот подход повышает производительность без серьезных проблем, связанных с переписыванием всей кодовой базы.
Команда начала улучшать систему с узких мест, и для них важен был язык, а не сам код.
- В 2–40 раз быстрее в синтетических тестах
- В 10 раз быстрее в производственных средах
В реальных производственных средах KPHP оказался в 7–10 раз быстрее стандартного PHP.
KPHP был принят в качестве бэкенда. На данный момент он поддерживает функции PHP 7 и 8, что делает его совместимым с современными стандартами PHP. Вот некоторые ключевые преимущества:
- Удобство разработки: обеспечивает быструю компиляцию и эффективные циклы разработки.
- Поддержка PHP 7/8: соответствует современным стандартам PHP.
- Возможности открытого исходного кода:
- - Строгая типизация: уменьшает количество ошибок и повышает качество кода.
- - Общая память: для эффективного управления памятью.
- - Распараллеливание: несколько процессов могут выполняться одновременно.
- - Сопрограммы: обеспечивают эффективное параллельное программирование.
- - Встраивание: оптимизирует выполнение кода.
- - Поддержка NUMA: повышает производительность систем с неравномерным доступом к памяти.
Для дальнейшего повышения качества и надежности кода мы внедрили PHP-линтер Noverify. Этот инструмент специально разработан для больших баз кода и фокусируется на анализе различий git перед их отправкой.
Ключевые особенности Noverify включают в себя:
- Индексирует около 1 миллиона строк кода в секунду.
- Анализирует около 100 000 строк кода в секунду.
- Также может работать в стандартных проектах PHP.
Внедрив Noverify, мы значительно улучшили качество нашего кода и выявили потенциальные проблемы еще до того, как они попадут в производство.
По мере роста нашей системы мы также частично перешли на архитектуру микросервисов , чтобы ускорить выход на рынок. Этот сдвиг позволил нам разрабатывать сервисы на различных языках программирования, в первую очередь на Go и Java, с использованием gRPC для связи между сервисами.
К преимуществам этого перехода относятся:
- Сокращение времени выхода на рынок. Небольшие независимые услуги можно разрабатывать и развертывать быстрее.
- Языковая гибкость: мы можем разрабатывать сервисы на разных языках, выбирая лучший инструмент для каждой конкретной задачи.
- Большая гибкость разработки: каждая команда может работать над своим сервисом независимо, что ускоряет процесс разработки.
Устранение узких мест в хранении и доставке контента
После оптимизации баз данных и кода мы начали разбивать проект на оптимизированные микросервисы, и фокус сместился на устранение наиболее существенных узких мест в хранении и доставке контента.
Изображения стали критическим узким местом в социальной сети. Проблема в том, что одно и то же изображение необходимо отображать в разных размерах из-за требований интерфейса и разных платформ: мобильных устройств с Retina/без Retina, веб-сайтов и т. д.
Процессор изображений и формат WebP
Чтобы решить эту проблему, мы реализовали два ключевых решения:
- Обработчик изображений: мы отказались от предварительно обрезанных размеров и вместо этого реализовали динамическое изменение размера. Мы представили микросервис под названием Image Processor, который «на лету» генерирует необходимые размеры.
- Формат WebP. Мы перешли на предоставление изображений в формате WebP. Это изменение было очень экономически эффективным.
Результаты перехода с JPEG на WebP были значительными:
- Уменьшение размера фотографии на 40 %.
- Время доставки на 15% быстрее (улучшение на 50–100 мс)
Эти оптимизации привели к значительным улучшениям в нашей системе доставки контента. Всегда стоит выявить и оптимизировать самые большие узкие места для повышения производительности.
Общеотраслевые решения для высоких нагрузок
Хотя выбор технологий уникален для каждой компании с высокой нагрузкой, многие подходы частично совпадают и демонстрируют эффективность по всем направлениям. Мы обсудили некоторые стратегии, и стоит отметить, что многие другие технологические гиганты также используют аналогичные подходы для решения проблем с высокой нагрузкой.
- Netflix: Netflix использует комбинацию микросервисов и распределенной архитектуры для эффективной доставки контента. Они реализуют стратегии кэширования с использованием EVCache и разработали собственные решения для хранения данных.
- Яндекс. Являясь одной из крупнейших технологических компаний России, Яндекс использует различные собственные базы данных и решения для кэширования для управления своей поисковой системой и другими службами. Не могу не упомянуть здесь ClickHouse — узкоспециализированную базу данных, разработанную Яндексом под свои конкретные нужды. Это решение оказалось настолько быстрым и эффективным, что теперь его широко используют другие. Яндекс создал систему управления базами данных с открытым исходным кодом, которая хранит и обрабатывает данные по столбцам, а не по строкам. Высокопроизводительная обработка запросов делает его идеальным для обработки больших объемов данных и анализа в реальном времени.
- LinkedIn: LinkedIn реализует распределенную систему хранения под названием Espresso для удовлетворения потребностей в данных в реальном времени и использует кэширование с помощью Apache Kafka для управления обменом сообщениями с высокой пропускной способностью.
- Twitter (X): X использует специальное решение для хранения под названием Manhattan, предназначенное для обработки больших объемов твитов и пользовательских данных.
Создание и обслуживание высоконагруженных систем требует глубокого понимания проблем и постоянной оптимизации. Используя современные технологии и подходы, можно создавать надежные и масштабируемые системы, способные обрабатывать миллионы пользователей и запросов, обеспечивая стабильную работу и высокую производительность.
#dst #dstglobal #дст #дстглобал #dstplatform #ДСТПлатформ #Высоконагруженные #социальнаясеть #соцсеть #Яндекс #Микросервиснаяархитектура #Noverify #PHP #KPHP #EVCache #ClickHouse #Нагрузки #Тестирование #кэширование
Источник: https://dstglobal.ru/club/921-vysokonagruzhennye-sistemy-v-razrabotke-socialnyh-setei-na-baze-dst-platform