Мы увидим, как реализовать тикер криптовалюты в Go, используя живые данные из API Coinbase Pro и Influx DB 2 для хранения и построения данных. Весь код этой истории доступен в моем репозитории GitHub.

Архитектура

  • Тикер криптовалюты подключается к Coinbase Pro API с помощью WebSocket и подписывается на информацию о цене криптовалюты для данной пары, например. Биткойн-доллар США.
  • Сервер Coinbase начинает передавать ценовые данные в тикер, который вставляет их в InfluxDB в качестве измерения.
  • Наконец, мы подключаемся к пользовательскому интерфейсу базы данных по адресу http://localhost:8086/.

Крипто-тикер

Роль тикера чрезвычайно проста:

  • Подключиться к InfluxDB:
  • Подпишитесь на Coinbase API с помощью WebSocket. К счастью для нас, Coinbase WebSocket API позволяет анонимный доступ, не требуется создавать ключ API для доступа к тиковым данным:
  • Каждый раз при получении тика записывайте его в InfluxDB:

InfluxDB

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

Однако примерно через час наши данные устаревают, поэтому мы соответствующим образом настраиваем сохранение корзины. InfluxDB просто удалит для нас устаревшие данные.

Запуск InfluxDB как контейнера

Чтобы настроить контейнер InfluxDB, мы должны запустить его в режиме автоматической настройки. Образ InfluxDB содержит некоторые функции для автоматической загрузки системы. Это можно сделать, установив для переменной среды DOCKER_INFLUXDB_INIT_MODE значение setup при запуске контейнера:

  • DOCKER_INFLUXDB_INIT_USERNAME: Имя пользователя для первого суперпользователя системы (обязательно).
  • DOCKER_INFLUXDB_INIT_PASSWORD: пароль для первого суперпользователя системы (обязательно).
  • DOCKER_INFLUXDB_INIT_ORG: Имя для начальной организации системы (обязательно).
  • DOCKER_INFLUXDB_INIT_BUCKET: имя, которое нужно задать для начальной корзины системы (обязательно).
  • DOCKER_INFLUXDB_INIT_RETENTION: продолжительность начального сегмента системы должна сохранять данные. Один час для нашего варианта использования.
  • DOCKER_INFLUXDB_INIT_ADMIN_TOKEN: Маркер аутентификации для связи с первоначальным суперпользователем системы. Если не установлено, токен будет сгенерирован системой автоматически.

Я использую direnv, чтобы обеспечить замены переменных среды в файле Docker Compose.

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

Наконец, мы предоставляем скрипт инициализации в папке /docker-entrypoint-initdb.d для импорта предопределенной панели мониторинга. Монтируем папку ./influxdb/init:

influxdb
└── init
    ├── init.sh
    └── templates
        └── tickers.yaml

Подведение итогов

Теперь, когда мы все настроили, мы можем просто запустить стек, используя:

make start

Теперь вы можете подключиться к пользовательскому интерфейсу на http://localhost:8086/ и проверить панель инструментов:

Тада! Теперь у вас есть собственный криптовалютный тикер, работающий в режиме реального времени. Теперь вы можете узнать больше о Языке Flux, чтобы построить свои собственные метрики!