От 0 до миллионов: Руководство по масштабированию вашего приложения — Часть 2. Часть 3.

Llama 5.0 — Добавить кэш

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

Однако для некоторых приложений, требующих большого объема чтения, архитектура первичной реплики может быть не в состоянии должным образом обрабатывать всплески трафика. В нашем примере электронной коммерции внезапные распродажи, такие как распродажи в Черную пятницу в Соединенных Штатах, могут легко перегрузить базы данных. Если нагрузка достаточно велика, некоторые пользователи могут даже не загрузить страницу продаж.

Следующим логическим шагом для решения таких ситуаций является добавление уровня кэша для оптимизации операций чтения.

Redis — популярный кэш в памяти для этой цели. Redis снижает нагрузку на базу данных при чтении за счет кэширования часто используемых данных в памяти. Это обеспечивает более быстрый доступ к данным, поскольку они извлекаются из кэша, а не из более медленной базы данных. Уменьшая количество операций чтения, выполняемых в базе данных, Redis помогает снизить нагрузку на кластер баз данных и улучшить его общую масштабируемость. Как резюмируют ниже Джефф Дин и др., доступ в память осуществляется в 1000 раз быстрее, чем доступ к диску.

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

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

Существует еще один класс данных приложения, которые легко кэшируются: статическое содержимое приложения, такое как изображения, видео, таблицы стилей и пакеты приложений, которые обновляются нечасто. Они должны обслуживаться сетью доставки контента (CDN).

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

Сегментация Llama 6.0 — DB

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

Существует два способа сегментации базы данных: по горизонтали или вертикали.

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

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

Сегментирование базы данных имеет ряд существенных недостатков.

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

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

Источник: https://blog.bytebytego.com/p/from-0-to-millions-a-guide-to-scaling-7b4?utm_source=substack&utm_medium=email

От 0 до миллионов: Руководство по масштабированию вашего приложения — Часть 3.

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

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

Давайте начнем с краткого объяснения этих тенденций в области вычислительной техники, о которых мы упоминали.

Первая тенденция — это облачные вычисления. Облачные вычисления в своей самой базовой форме — это запуск приложений на вычислительных ресурсах, управляемых облачными провайдерами. При использовании облачных вычислений нам не нужно самим приобретать оборудование или управлять им.

Вторая тенденция — это бессерверные вычисления. Бессерверные вычисления основаны на удобстве облачных вычислений с еще большей автоматизацией. Это позволяет разработчикам создавать и запускать приложения без необходимости предоставления облачных серверов. Бессерверный поставщик управляет инфраструктурой и автоматически масштабирует вычислительные ресурсы в сторону увеличения или уменьшения по мере необходимости. Это обеспечивает отличный опыт для разработчиков, поскольку разработчики могут сосредоточиться на самом коде приложения, не беспокоясь о масштабировании.

Третий тренд развивается на волнах первых двух. Именно распространение фреймворков клиентских приложений и платформ для размещения интерфейсных приложений упрощает развертывание этих интерфейсных приложений.
Современные интерфейсные фреймворки и платформы для хостинга

Давайте подробнее рассмотрим третью тенденцию.

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

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

Традиционный способ создания веб-приложений, подобный тому, который мы обсуждали ранее для нашей компании электронной коммерции Llama, предполагал отправку новых HTML-страниц с сервера каждый раз, когда пользователь нажимал на ссылку или отправлял форму. Эта традиционная модель называется многостраничным приложением (MPA). Каждый запрос страницы обычно включает в себя полное обновление страницы, которое может быть медленным, а иногда и нарушающим работу пользователя.

В отличие от этого, SPA загружает начальный HTML-фрейм приложения, а затем отправляет запросы на сервер для получения данных по мере необходимости. Такой подход позволяет более эффективно использовать ресурсы сервера. Сервер не отправляет постоянно полные HTML-страницы и может вместо этого сосредоточиться на обслуживании данных через четко определенный API.

Другим преимуществом подхода SPA, ориентированного на API, является то, что один и тот же API часто используется совместно с мобильными приложениями, что упрощает обслуживание серверной части.

СПА-центры часто создаются с использованием фреймворков JavaScript, таких как React. Эти инструменты предоставляют набор абстракций и инструментов для создания сложных приложений, оптимизированных с точки зрения производительности и ремонтопригодности. Напротив, для создания MPA требуется более ориентированный на сервер подход, который может оказаться более сложным в масштабировании и обслуживании по мере усложнения приложения.

Рост популярности этих клиентских фреймворков привел к появлению на рынке широкого спектра платформ фронтэнд-хостинга производственного уровня. Некоторые популярные примеры включают Netify и Vercel. Аналогичные предложения есть у крупных облачных провайдеров.

Эти платформы хостинга справляются со сложностями создания и масштабного развертывания современных интерфейсных приложений. Разработчики загружают свой код в репозиторий, и оттуда все берут на себя платформы хостинга. Они автоматически создают пакет веб-приложений и связанные с ним ресурсы и распространяют их по CDN.

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

Вот как выглядит современный ландшафт интерфейса. Интерфейсное приложение построено с использованием современного фреймворка, такого как React. Клиентское приложение обслуживается масштабируемой платформой хостинга производственного уровня, и оно динамически извлекает данные из серверной части через четко определенный API.

Современные возможности серверной части

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

Каковы современные варианты построения серверной части? Сдвиг столь же драматичен.

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

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

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

Бессерверные вычисления основаны на экономически эффективной модели ценообразования с оплатой за использование. Здесь нет никаких предварительных обязательств.

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

Источник: https://blog.bytebytego.com/p/from-0-to-millions-a-guide-to-scaling-b53?utm_source=substack&utm_medium=email