Статьи

Отслеживание распределенных ошибок в безсерверных приложениях

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

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

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

ACME Фитнес магазин архитектуры

В течение последних месяцев команда CloudJourney.io работала над безсерверной версией ACME Fitness Shop. В настоящее время безсерверная версия имеет 24 лямбда-функции, которые работают вместе. Отслеживать, что они все делают и где все рушится, очень сложно. Вместо того, чтобы иметь один контейнер, который выполняет всю «работу с корзиной», теперь есть восемь различных функций Lambda.

ACME Fitness Shop безсерверная архитектура

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

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

Инструментарий Обработка ошибок

Инструментом, который мы выбрали для мониторинга ошибок для этого проекта, был Sentry.io. Для подключения к Sentry единственным требуемым значением является ключ клиента, который Sentry вызывает DSN. Чтобы сохранить это значение в безопасности и обязательно следовать рекомендациям, вы можете сохранить его в хранилище параметров AWS Systems Manager (SSM) и использовать при развертывании приложения с помощью CloudFormation (или SAM). 

SSM позволяет создавать иерархические группы для ваших параметров. Используя эту иерархическую функцию, мы назвали параметр /Sentry/Dsnв SSM. В шаблонах CloudFormation вы можете использовать параметр, например:


HAML