Платежные сервисы в Базел монорепо

Как успешно перенести критически важный микросервис в монорепозиторий

Автор: Шалини Оруганти

TL; DR: Bazel monorepo — это инженерная инициатива Coinbase. Наша Payments — одна из первых команд, которая перенесла критически важный сервис Ruby on Rails для крупной платежной системы ЕС / Великобритании в монорепозиторий. Решив множество проблем, мы успешно перенесли наш сервис.

История вопроса

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

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

Мы постоянно думаем о способах улучшения наших систем и инструментов, имея в виду следующие высокоуровневые цели:

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

Ранее в этом году Coinbase Engineering решила использовать монорепозиторий Bazel. Команда Payments решила использовать функции безопасности, надежности и инструменты мирового класса, которые наша команда разработчиков по продуктивности разработала для монорепозитория Bazel путем миграции наших микросервисов. Наша первая инициатива заключалась в переносе критически важного сервиса Ruby on Rails для крупной платежной системы ЕС / Великобритании, которая обрабатывает ~ 2 миллиона платежей на сумму 3,5 миллиарда долларов в год в монорепозиторий.

Проблемы

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

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

Чтобы Чтобы преодолеть эти проблемы, мы начали с определения успешной миграции. Были определены следующие критерии:

  • Наш проект должен работать с новыми инструментами monorepo: Наш сервис — это приложение Ruby on Rails, и мы используем стандартные инструменты Rails для нашего SDLC. Однако в Monorepo мы используем Bazel для сборки и тестирования. Таким образом, необходимо было изменить множество наших конфигураций, чтобы они были совместимы с новыми инструментами.
  • CI нашего проекта должна работать в монорепозитории: количество шагов, которые мы делаем в наших проектах CI, увеличилось в монорепозитории. Нам нужно было потратить время на то, чтобы понять, что это за шаги. Monorepo также использовала другую систему CI. Наш проект миграции включал внесение изменений для успешной адаптации к новой системе CI и добавление конфигурации и кода для прохождения этих дополнительных шагов для перенесенной службы.
  • Наши развертывания служб должны работать из monorepo: Monorepo использует другой инструмент развертывания поэтому нам нужно было убедиться, что наш проект может быть успешно развернут в средах разработки, тестирования и производства с использованием новых инструментов.
  • Наш сервис подключается к тем же ресурсам AWS, что и раньше: в зависимости от платежной сети, которая перемещает деньги от плательщика к получателю платежи проходят через несколько состояний. Некоторые из этих состояний являются промежуточными, и мы не можем позволить себе потерять такую ​​информацию до того, как платеж достигнет своего конечного состояния. У нас также не было возможности спланировать миграцию данных в рамках этого проекта. Следовательно, жизненно важно, чтобы у нас были правильные инструменты для развертывания нашей службы из монорепозитория, который может подключаться к тому же кешу и базам данных.

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

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

Заключение

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

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

Если вы заинтересованы в решении сложных технических задач, подобных этой, Coinbase нанимает.

Этот веб-сайт содержит ссылки на сторонние веб-сайты или другой контент только в информационных целях («Сторонние сайты»). Сторонние сайты не находятся под контролем Coinbase, Inc. и ее дочерних компаний (далее «Coinbase»), и Coinbase не несет ответственности за содержание любых Сторонних сайтов, включая, помимо прочего, любые ссылки, содержащиеся в Сторонних сайтах. Сторонний сайт или любые изменения или обновления Стороннего сайта. Coinbase не несет ответственности за веб-трансляции или любые другие формы передачи, полученные с любых сторонних сайтов. Coinbase предоставляет вам эти ссылки только для удобства, и включение любой ссылки не означает одобрения, одобрения или рекомендации Coinbase сайта или какой-либо связи с его операторами.

Платежные услуги в Bazel monorepo изначально были опубликованы в Блог Coinbase на Medium, где люди продолжают разговор, выделяя эту историю и отвечая на нее.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *