Как масштабируемость walletnotify кошелька с полным узлом

Я думаю о том, как крупные биржи обрабатывают клиентские депозиты. Похоже, есть два доступных решения: одно — использовать API-интерфейс для внешних уведомлений, например API-интерфейс для уведомлений blockchain.info, а другое — запустить полный узел и использовать функцию walletnotify. Поскольку первый подход приводит к зависимости от стороннего сервиса, он также не поддерживает уведомление тестовой сети, которое мы используем во время разработки, поэтому я пытаюсь запустить полный узел. Мой вопрос в том, насколько это масштабируемо? Предположим, что есть 10 000 пользователей, и платформа должна поддерживать добавление дополнительных адресов для пользователя, скажем, в среднем каждый пользователь генерирует 10 адресов, это 100 000 адресов для просмотра. Если я добавлю эти 100 000 адресов в качестве просмотра только для полного узла и включу walletnotify, будет ли это хорошим способом справиться с этим? Будут ли технические проблемы?

Ответы (3)

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

Я бы рекомендовал не только использовать walletnotify, но и проверять X блоков через Y минут. Вы можете отслеживать пройденные блоки, и если какие-либо транзакции не были обработаны walletnotify, ваш cronjob по проверке транзакций восстановит транзакцию. Вы можете использовать listsinceblockкоманду RPC и отслеживать высоту блока каждый раз, когда проверяете транзакции. Вы можете где-то хранить транзакции, обработанные в БД.

В конце концов, это финансовое приложение, поэтому я думаю, что проверка резервной копии жизненно важна.

Вероятно, технических проблем нет, и это сильно зависит от вашего сервера.

если у вашего сервера нет проблем, так что не о чем беспокоиться.

Я попытался отправить 1000 запросов на основной биткойн-сервер одновременно с базовым сервером, и все отлично сработало.

Также вы можете получить более одного основного сервера биткойнов и обрабатывать запросы к этим серверам.

Я думаю, что уведомление кошелька отличается от отправки запросов rpc, также 1000 имеет другой коэффициент масштабирования, чем 100 000, но если вы действительно работали с биткойн-платформой, такой как сайт электронной коммерции, например сайт, подобный amazon, или биржа криптовалют, я бы доверял вашему ответу.
Нет, это не отличается, RPC означает Remote_procedure_call, поэтому он просто передает запрос вашему приложению. поэтому отправка команд через RPC такая же. Вы можете попробовать с адресом 2000 и посмотреть, что произойдет.

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