Сборка высокодоступного приложения с функциями веб-обработки и хранения данных с помощью MongoDB и стека Elk

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

Это тестовое приложение высокой доступности было разработано как гипотетическое средство, которое потенциально может предложить:

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

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

1: Создание фронт-энда и настройка частной сети

Типичная многоуровневая установка отделяет уровень представления от логики приложения. Разделение функций приложений на уровни упрощает процессы устранения неполадок и масштабирования в будущем.

При выборе серверов и ресурсов нужно учитывать следующие факторы:

  • Как приложение работает с изображениями и медиа-активами?
  • Каковы вычислительные требования?
  • Какой тип и объем трафика вы ожидаете получить?
  • Каковы планы по мониторингу?

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

Читайте также:

2: Настройка балансировщика нагрузки для серверов фронтэнда

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

Чтобы оптимизировать настройку балансировщиков, рассмотрите такие факторы:

  • Будете ли вы хранить информацию о состоянии запросов и пользователей?
  • Нужно ли вам перенаправлять запросы на основе загрузки ЦП?

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

Читайте также:

3: Создание серверов бэкэнда с поддержкой частной сети

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

Также на этом уровне важен мониторинг, который может решить такие проблемы:

  • Какой тип обработки приложение применяет к изображениям и медиа-активам?
  • Загружаете ли вы данные из этих активов или же просто извлекаете или комбинируете их?
  • Какой объем и тип потребительских транзакций вы получаете?

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

Читайте также:

4: Установка HAProxy

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

Читайте также: Основы работы с HAProxy и базовые понятия балансировки нагрузки

5: Создание базы данных SQL

Для определенного сегмента данных приложения следует использовать базу данных SQL. Эта БД необходима для хранения текущих данных, которые должны быть точными и согласованными. Такие вещи, как транзакции продаж, данные входа/выхода из системы и изменения пароля, являются однообразными по своей структуре и должны быть защищены, а это – разумный аргумент в пользу базы данных SQL.

Опять же, здесь вам понадобятся метрики: сколько транзакционных или защищенных запросов обрабатывает приложение? Если загрузка приложения высока, вы можете рассмотреть возможность использования таких инструментов, как ProxySQL, для балансировки входящих запросов. Для повышения производительности и обеспечения высокой доступности можно настроить репликацию между базами данных SQL. Это также будет полезно, если вам необходимо масштабировать обработку данных.

Читайте также:

6: Создание базы данных NoSQL

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

Факторы, которые могут оптимизировать производительность, в зависимости от нагрузки и типа запроса, включают в себя: использование балансировки нагрузки для управления трафиком между базами данных, распределение данных между БД и средствами хранения данных, а также добавление или уничтожение баз данных (а не их тиражирование).

Читайте также:

7: Добавление блочного хранилища

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

Читайте также: Сервисы хранения объектов и блочные сервисы хранения: краткий обзор

8: Создание стека Elastic/ELK

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

Этот стек включает в себя компоненты, которые собирают и визуализируют логи: Logstash обрабатывает журналы; Elasticsearch хранит их; Kibana отвечает за поиск и визуализацию. Если вы разместите этот пакет на плавающем IP-адресе, вы сможете получить доступ к нему удаленно по статическому IP-адресу. Кроме того, если вы включите стек в частную сеть, у вас будет еще одно преимущество безопасности: агентам не нужно будет передавать информацию в стек через Интернет.

Читайте также:

9: Настройка хранилища объектов

При хранении статических активов приложения нужно обеспечить их доступность и высокуя производительность. Сервисы хранения объектов могут удовлетворить эту потребность. В частности, если вы хотите хранить большие объекты в базах данных, с притоком данных они могут столкнуться с проблемами производительности, а это повлияет на размеры резервных копий. В этом случае нужно перемещать данные в хранилище объектов. Сохраняя URL-адрес в базе данных, можно связать ресурсы с БД, не влияя на ее объем. Это оптимальное решение для статических данных предлагает дополнительные возможности масштабирования.

Читайте также: Сервисы хранения объектов и блочные сервисы хранения: краткий обзор

10: Настройка DNS-записей

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

Читайте также:

11: Планирование восстановления

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

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

Читайте также:

Заключение

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

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

Tags: , , , ,