メインコンテンツへスキップ

Exchange サービスのワークフローと OCAP サービスへの統合

Lei Zhou (Software Engineer at ArcBlock)
ArcBlockOCAP

「善意だけでは何も実現しない。何かを実現するには、優れた仕組みが必要だ」 とジェフ・ベゾスは語っています。

Exchange サービスのワークフローと OCAP サービスへの統合

著者 Lei Zhou(ArcBlock ソフトウェアエンジニア)

今年、幸運にもソフトウェアエンジニアとして ArcBlock に入社することができました。OCAP サービスに携わることは、これまでで最も心躍る経験の一つです。OCAP サービスでは、より効率的で強力なサービスを目指して、いくつかの新機能を展開しています。7 月には、OCAP と OCAP Playground が Exchange サービスを利用したリアルタイム通貨価格機能を公開しました。この機能は、複数の暗号通貨のリアルタイム価格を収集し、ほかのサービスに提供するために使われています。今回は、Exchange サービスのワークフロー全体と OCAP サービスへの統合について説明します。

アーキテクチャとは?

Exchange サービスは、暗号通貨データを収集、解析、保存する Elixir アプリケーションです。Elixir は創業当初から ArcBlock の「第一級」言語です。このサービスは、取引所 API モジュール、Scheduler、Publisher、Filesystem の 4 つの部分に分かれています。

取引所 API モジュール

現在、私たちは 6 つの取引所から暗号通貨データを収集していますが、それぞれの取引所ではインターフェースやデータ構造が異なります。この状況に対応するため、取引所から暗号通貨データを取得して整形する 6 つの取引所 API モジュールがあり、各モジュールが 1 つの取引所を担当しています。これらのモジュールでデータを処理した後は、解析済みデータの形式が統一されます。

Scheduler

現在、取引所から BTC と ETH のリアルタイム価格を取得しています。流入するこれらのデータが Exchange サービスへの入力となります。Scheduler は定期的に Publisher を起動し、取引所から新しいデータを収集します。定期タスクを実行したい場合には、それを容易にするライブラリがいくつかあります(ただし、その内部では GenServer が使われています!)。その一つが Quantum です。Exchange サービスでは、Elixir の cron ライクなジョブスケジューラーである Quantum を使用しています。

Publisher

メッセージのブロードキャストには Phoenix PubSub を、イベントの処理には GenServer を使用しています。GenServer は OTP の中核をなす要素で、反復タスクを簡素化し、プログラマーがアプリケーションのロジックに集中できるようにします。Elixir と Erlang の世界では、インターフェースのロジック(Web サーバー、ターミナルの読み書き、GUI など)をビジネスロジックから分離するために、GenServer が幅広く使用されています。

Pub/Sub 部分の考え方は非常にシンプルです。個別のプロセス(取引所 API モジュール)を起動し、それらのモジュールが返す解析済み暗号通貨データを待ち、6 つの取引所 API モジュールからのデータをまとめて、Filesystem と Amazon Kinesis にブロードキャストします。

Amazon Kinesis を使うと、リアルタイムのストリーミングデータを容易に収集、処理、分析できます。そのため、すべてのデータが集まってから処理を始めるのを待つことなく、タイムリーな知見を得て Exchange サービスで提供できます。

Filesystem と LKG

Publisher はデータを Filesystem にブロードキャストし、Filesystem はそれを Amazon S3 と同期します。Amazon S3 は、バックアップ、アーカイブ、復旧に役立つファイルストレージです。

取引所 API のリクエストエラーなどの問題が発生した場合、Last Known Good は各取引所の最新データを保存しておくための有効な復旧手段です。

なぜサービスを監視・分析するのか?

Datadog を使用してリアルタイムのインタラクティブなダッシュボードを構築し、処理やグラフ化のためのメトリクスとイベントを送信しています。

サービスレベルでの監視と評価には、実装と成果を体系的に追跡し、サービスの有効性を測定する目的があります。これにより、新しいバージョンがいつデプロイされたか、いつ変更が必要になり得るかを正確に判断できます。監視と評価は改善の基礎となり、十分な情報に基づく意思決定を可能にします。

メトリクスについては、Statix を使って統計情報といくつかのカスタムメトリクスを収集し、StatsD に送信しています。そこから Datadog に送られ、可視化できるようになります。

OCAP サービスに統合するには?

私たちの OCAP サービスは GraphQL を使用しています。GraphQL では、既存のクエリに影響を与えることなく GraphQL API に新しいフィールドや型を簡単に追加し、バージョンのない API を提供できるため、バージョン管理は必要ありません。私は、Amazon Kinesis から最新の暗号通貨データを定期的に取得するスケジュールジョブと、関連するフィールドにリアルタイム価格を提供できるリゾルバーを追加しました。

ArcBlock Exchange サービスについてさらに学ぶ

Exchange サービスがどのように動作し、OCAP サービスにどのように統合されているかをご覧いただけたなら幸いです。Exchange サービスでは、今後さらに多くの暗号通貨に対応する予定です。

高い成果を上げるエンジニアリング組織で働きたい方は、ぜひ ArcBlock に参加してください!

このページに関わるもの

製品

  • OCAP active

    チェーンごとにクライアントを用意するのではなく、一つのインターフェースでチェーン上のデータを問い合わせるためのプロトコル。ArcBlock が関連特許を保有しています。