Как мы создаем платежные системы на Coinbase

Изучение компонентов высокого уровня целостности платежной системы

Анжела Чжу и Шалини Оруганти

Предпосылки

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

Корректность

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

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

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

Отказоустойчивость

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

Обычно система сквозных платежей охватывает клиентская сторона, серверные службы, внешние партнеры, где платежные транзакции обрабатываются на задней стороне. Все транзакции должны быть максимально атомарными. Но некоторые запросы от клиента к обслуживанию или от внутреннего к внешнему могут быть долгими, особенно в случаях тайм-аута или сбоя, и мы можем подтвердить окончательные результаты (успех / сбой) только через несколько минут или часов. Поэтому в некоторых из этих случаев мы будем инициировать повторные попытки от восходящего к нисходящему. Если вся сквозная попытка не обрабатывает повторные попытки должным образом, т. Е. Система идемпотентна, неизбежно возникнет ситуация, когда одна и та же транзакция обрабатывается дважды, что приведет к двойной оплате или двойной выплате.

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

Восстанавливаемость и отслеживаемость

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

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

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

Доступность и скорость интеграции

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

Еще одним важным аспектом международной платежной системы является географический охват. Скорость, с которой мы можем добавлять новые способы оплаты в новые юрисдикции, имеет решающее значение. Чтобы ускорить интеграцию, важно иметь правильные абстракции и уровни абстракции для захвата, но при этом скрывать определенные детали. Например, хорошо продуманная абстракция — это когда она может обрабатывать как push-платежи, так и pull-платежи; использоваться для обозначения внесения и выплаты; начисление и возврат; синхронизация платежей и асинхронных платежей и т. д.

Ремонтопригодность и масштабируемость системы

Поддержание обслуживаемости и масштабируемости платежных систем имеет первостепенное значение. Принцип KISS гласит: «Везде, где это возможно, следует избегать сложности в системе, поскольку простота гарантирует высочайший уровень принятия и взаимодействия с пользователем». Этот принцип особенно важен при проектировании платежных систем. Любая чрезмерно сложная логика или запутанный код могут вызвать загадочные ошибки в будущем.

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

Все выше и выше

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

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

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

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

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