Тестирование является взаимосвязанной задачей; базы данных тоже

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

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

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

Автоматизируйте ваши тесты

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

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

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

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

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

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

Создайте наблюдаемость вокруг баз данных

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

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

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

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

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

Каждый должен участвовать

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

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

Source:
https://dzone.com/articles/testing-is-a-cross-cutting-concern-so-are-databases