Найти тему
Git in Sky

Highload-проекты: как эффективно модернизировать инфраструктуру и не разориться

Оглавление

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

Компоненты современной ИТ-инфраструктуры: делаем модернизацию доступной в 7 шагов

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

7 шагов по модернизации инфраструктуры под Highload-сервисы:

  1. Описание инфраструктуры кодом
  2. Отказоустойчивая СУБД
  3. Единая система сбора и анализа логов
  4. Единая система резервного копирования с едиными политиками
  5. Облачные хранилища
  6. Единая система мониторинга и алертинга
  7. Настройка безопасности данных от несанкционированного доступа

1. Описываем инфраструктуру кодом

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

Ручное управление конфигурацией:

  • несогласованность: разные ВМ и среды ведут себя по-разному
  • на подготовку или восстановление сервера уходит много времени
  • отсутствует история изменений, затруднен аудит
  • значимый риск ошибок по причине «человеческого фактора»

Программируемая инфраструктура:

  • автоматическое, согласованное развертывание ВМ и сред
  • изменения в серверы вносит система
  • возможность ревью кода, документирования, подробного аудита
  • возможность управления десятками ВМ через одного оператора

Инфраструктура как код (Infrastructure-as-Code; Iac) — это современный подход в управлении виртуальными машинами (ВМ), подсистемами балансировки нагрузки, сетями и облачными сервисами. Такая модель настройки стирает границы между разработкой приложений и моделированием сред для них (бывают приложения, которые содержат скрипты, создающие и управляющие ВМ). Этот подход является частью DevOps и фундаментом облачных вычислений. Он позволяет улучшить качество продукта и сократить сроки его поставки, сделать инфраструктуру легко масштабируемой и автоматически воспроизводимой.

Создавать программируемую инфраструктуру мы рекомендуем с помощью системы управления конфигурациями Ansible и системы управления репозиториями кода Gitlab CI. Ansible позволяет автоматизировать развертывание и настройку ПО, а репозиторий Gitlab CI позволяет изменять и поставлять код из плейбука Ansible, не устанавливая локальных зависимостей — в нем и хранится вся инфраструктура и скрипты, с помощью которых она автоматически настраивается.

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

2. Строим отказоустойчивую СУБД

Основной современный способ создания отказоустойчивой СУБД — это переход от проприетарных систем (MSSQL) на Opensource-системы PostgreSQL, MySQL/MariaDB, MongoDB, Redis.

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

3. Единая система сбора и анализа логов

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

Существует множество проприетарных и открытых систем сбора и анализа логов с разной функциональностью. Инженеры Git in Sky для автоматизации процессов логирования  используют и рекомендуют ELK-стек, разработанный и поддерживаемый компанией Elastic. Этот во многом универсальный, масштабируемый и отказоустойчивый инструмент обеспечивает удобное и безопасное централизованное ведение журналов с разных серверов. ELK-стек состоит из трех компонентов:

  1. Elasticsearch — распределенная RESTful-система с функциями аналитической и поисковой систем, а также с функциями быстрого и масштабируемого нереляционного хранилища данных. Компонент может быстро обрабатывать большие журналы, индексировать системные логи по мере поступления и выполнять к ним запросы в режиме real-time.
  2. Logstash — конвейер парсинга логов. Компонент собирает данные одновременно из нескольких источников и обрабатывает их для дальнейшего использования в Elasticsearch. Позволяет централизовать обработку большого объема структурированных и неструктурированных данных и событий.
  3. Kibana — пользовательский интерфейс для работы с логами. Представляет собой веб-панель, которая визуализирует обработанные в Elasticsearch данные в диаграммы и графики. Позволяет проводить сложную аналитику, администрировать БД и управлять мониторингом.

О том, как установить и настроить Elasticsearch, Logstash и Kibana в Linux читайте здесь.

4. Централизованная система резервного копирования

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

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

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

5. Облачные хранилища

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

Такое расширение и сужение вычислительных мощностей в зависимости от нагрузки позволяют получить только облачные технологии. Причем, в автоматическом режиме. Чаще всего в Highload-разработке требуется увеличение места для хранения данных. Благодаря автоматическому масштабированию хранилища (автоскейлингу) вам не придется переплачивать за простаивающие мощности — оплата производится только за фактически использованные ресурсы.

6. Единая система мониторинга и алертинга

Использование систем мониторинга событий позволяет в любой момент времени видеть состояние инфраструктуры и приложений, размещенных в ней. Наши инженеры рекомендуют использовать решения Grafana и Prometheus. Prometheus — это приложение с открытым исходным кодом, которое записывает метрики в базу данных временных рядов. Запись, запросы и оповещения происходят в режиме реального времени. Grafana занимается не только мониторингом, но и аналитикой, и визуализацией метрик. С помощью Grafana можно наблюдать за событиями в системах через наглядные программные «приборные панели» (дашборды).  В качестве системы алертинга мы рекомендуем использовать Alertmanager и Grafana. Каналы доставки алертов могут быть самыми разнообразными - от письма на электронную почту до сообщения в мессенджере.

Почему именно эти инструменты? Потому что они:

  • удобные
  • проверенные
  • бесплатные
  • быстрые
  • имеют крупные сообщества (где можно оперативно найти помощь по настройке ПО)
  • имеют большие возможности по интеграции

7. Реализуем защиту от несанкционированного доступа

Фишинг, уязвимости, вирусы, социальная инженерия — все эти возможности для атак злоумышленников на ИТ-систему компании нужно свести к минимуму.

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

  1. Ввести групповые политики. Это правила, в соответствии с которыми производят настройку рабочей среды в периметре домена для определенного набора пользователей. Политики позволяют централизованно управлять настройками и установкой ПО на серверах и клиентских компьютерах, подключенных к домену, полуавтоматически конфигурировать компьютеры под нужды отделов. Инструментом групповых политик для серверов на базе Windows является решение Active Directory, для серверов на базе Linux - решения на базе FreeIPA: ALD, ROSA.
  2. Использовать шифрование. Это подразумевает криптографическую защиту информации с помощью специальных средств (СКЗИ). Существует множество реализаций шифрования как сетевого трафика, так и данных.

Общие рекомендации, вне зависимости от применяемой технологии:

  • ни при каких обстоятельствах не передавать нешифрованные данные  по открытым каналам передачи данных;
  • использовать единые точки доступа к внутренней инфраструктуре, в виде VPN серверов с шифрованием передаваемых данных;
  • при возможности, использовать шифрование резервных копий данных.
  1. Установить контроль доступа. Системы контроля действий пользователей позволяют настраивать разрешения и привилегии учетным записям сотрудников. Для защиты персональных компьютеров применяют контроль аутентификации в ОС и на корпоративных ресурсах с помощью IAM-решений (Identity & Access Management). Для защиты серверов от несанкционированного доступа используют решения класса PAM (Privileged Access Management).
  2. Использовать VPN. Технологию Virtual Private Network (виртуальная частная сеть) используют для защищенного доступа удаленных сотрудников к корпоративным сервисам компании, а также для настройки интернет-туннеля между разрозненными компьютерами (например, из офисов в разных городах и странах).

Заключение

Подведем итог. При модернизации ИТ-инфраструктуры под высоконагруженную разработку настройку вычислительной инфраструктуры сегодня принято выполнять через готовые конфигурационные скрипты. Для этого используют Iac-подход. База данных должна быть отказоустойчивая, построенная на решениях с открытым исходным кодом. Важно использовать системы логирования, мониторинга (и алертинга) и централизованную систему резервного копирования. Для автомасштабирования мощностей нужны облачные хранилища. Также крайне важно произвести защиту информационной среды предприятия.

Реализовать такую модернизацию можно самостоятельно, но только в том случае, если в компании есть штат сильных DevOps-инженеров c компетенциями в Ansible, ELK, СУБД, миграции в облака, infSecOps. В случае отсутствия даже одной из перечисленных компетенций лучшим решением будет DevOps-аутсорс, где эти ответственные задачи будут