Рубрики
Uncategorized

Идеальная среда Dev с использованием AWS для больших баз данных

В начале продукта база данных довольно маленькая, в основном пустая или заполнена фиктивными данными … Теги с производительностью, DEVOPS, AWS, базой данных.

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

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

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

Первые дни

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

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

Ноль до одного

Стратегия данных MetroLeads построена на модели схемы. Хотя мы знаем форму данных, мы редко можем рассчитывать на его полную или последовательную. Поскольку данные проходят через конвейер данных, он нормализуется для потребления различными заинтересованными сторонами. Когда продукт включал в себя такие функции, как 3-я партийная интеграция, принесенные модели поставщика, ситуация была усугублена. Данные выросли экспоненциально для размещения на ноутбуке разработчика. Требование согласованной базы данных для нескольких микроэвиксов для прохода увеличилась дальше.

Чтобы бороться с этой ситуацией, мы представили «Усадочный процесс». Усадка была способ запустить конкретную резервную копию через перерабатывающий трубопровод, который:

  • Удалены все данные клиента
  • Anonymize или скраб, оставшиеся данные для удаления следов любого PII (лично идентифицируемая информация)
  • Листья тестирования песочницы нетронутыми
  • Уменьшено количество событий по времени E.G. держать только события последних 7 дней

Разработчики имеют свои собственные производственные счета, которые подключены к манекенным поставщикам и стекам связи QA. Для е.Г. Мы используем поддельные генераторы данных, такие как Mockaroo который является моим личным фаворитом и комбинацией функций Excel для генерации больших полезных нагрузок импорта.

MetroLeads предоставляет песочницу для каждой организации. Это позволяет нам удалить все данные организации клиентов в режиме ожидания во время процесса сокращения.

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

Расширение вверх

Мы провели этот процесс на нашем сервере инструментов, которые пошли от M3.Medium к M4.2XLarge обрабатывать одновременные запросы. Мы оказались временем их, так что нагрузка не сокрушила сервер. Это не было масштабируемым, хотя вполне работало довольно долго.

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

Общий раствор

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

MetroLeads использует сочетание источника Истины БД (Кассандра), поисковой системы (Elasticsearch), автобуса сообщения (rabritmq) и локальной кэширования (Redis). Мы решили настроить общую базу данных для всех разработчиков в регионе Мумбаи. Идея состояла в том, чтобы настроить всю нашу базу данных в AWS и сохранить только Redis Local для ноутбука разработчика. Как и ожидалось, это работало очень хорошо для 80% наших сценариев на основе UI. Поток обработки событий всегда был предназначен для обработки задержек, так что никогда не было проблемой.

Мы быстро изменили нашу документацию на борту, чтобы не требовать никаких установок базы данных. Установите только ваши серверы Python с Redis и подключитесь к общему серверу AWS, который размещал все оставшиеся базы данных.

Необщее решение

Время от времени несколько разработчиков будут работать на наборе данных и будут непреднамеренно перезаписать изменения. Поскольку у нас уже было план для настройки удаленной базы данных, мы настроили план, чтобы восстановить базу данных Shrunk на любой сервер выбора. Это приводит к интересной настройке; Разработчики будут запустить свои собственные серверы в ближайшем регионе и восстановить план на нем. С большими базами данных у этого было две проблемы:

  • Увеличение стоимости запущенных серверов
  • Устаревшие данные как разработчики восстановит их копию реже

После сеанса мозгового штурма мы прибегали к:

  • Запустите только точные экземпляры для не общих серверов
  • Используйте переадресацию локальных портов для переключения между общими и не общими серверами
  • Убить не общих серверов как можно раньше

Переадресация порта была отличная идея. Это позволит переключаться между серверами разработки без изменения конфига каждый раз. Мы видели local.env , local.dev1.env , local.dev2.env. слишком много раз. С портом вперед вы всегда указываете на localhost: 9160 Но в зависимости от того, к какому серверу вы подключили, он будет направляться соответствующим образом. На Mac мы рекомендуем использовать Core Tunnel Отказ

QA и другие среды

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

Вывод

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

Надеюсь, вам понравилась статья.

Оригинал: «https://dev.to/arifamirani/the-perfect-dev-environment-using-aws-for-large-databases-jkc»