イベントレポート

IIJ Technical DAY 2019

デジタル通貨の「金融」をマイクロサービスで実現、「敏捷性」と「⾼信頼性&⾼速処理」を両立

Google Cloud PlatformのKubernetesを採用

 株式会社インターネットイニシアティブ(IIJ)は11月21日、年次技術イベント「IIJ Technical DAY 2019」を開催した。インターネット関連の技術について、同社のスタッフが解説するイベントだ。

 「安全なデジタル通貨流通を支えるアーキテクチャとエンジニアリング」と題したセッションは、IIJの35%出資(筆頭株主)により2018年1月に設立された、デジタル通貨取引所の株式会社ディーカレットのセッションだった。ただし、デジタル通貨についての話ではなく、そのサービスを支えるマイクロサービス構成のプラットフォームについて、同社テクノロジーグループマネージャの河津拓哉氏が解説した。

株式会社ディーカレットテクノロジーグループマネージャ河津拓哉氏

 河津氏はまず、ブロックチェーンの面白いところとして、「無形のもの、流通させることが難しかったものを流通させることができる。そして、それを非中央集権で実現できる」と語った。

 そして、デジタル通貨(仮想通貨、暗号資産、cryptocurrency)の取引所の機能として、安全に管理する「保管」、法定通貨とデジタル通貨やデジタル通貨どうしの「交換」、その通貨内および外との「送受」の3つを挙げた。

デジタル通貨取引所の3つの機能

金融サービスをマイクロサービスで構成

 ディーカレットのサービスは、APIゲートウェイパターンのマイクロサービスを中心に、フロントエンドとバックエンドを組み合わせた構成になっている。

 マイクロサービスとは、1つのサーバーアプリケーションを、機能単位ごとの小さなサービスの組み合わせで開発するアーキテクチャだ。それにより、機能単位ごとにアップデートできるようにして頻繁に変更しやすくするのが目的とされる。このサービス群の入口としてAPIゲートウェイを立てる手法がAPIゲートウェイパターンと呼ばれる。

 ディーカレットのマイクロサービスには、認証、取引、口座、残高、決済、ウォレット、ディーリングなどがあると河津氏は説明した。

 これらのマイクロサービス群は、APIゲートウェイを介して、モバイルアプリやWebフロントエンドから呼ばれて実行される。また、マイクロサービスの背後には、BI(データ分析)や、KYC(顧客身元確認)、AML(マネーロンダリング対策)、VaR(予想最大損失額)計算などのバックエンドがある。

ディーカレットのアーキテクチャ

 こうしたディーカレットのシステムには、「敏捷性」と「高信頼性&高速処理」の、相反するところのある2つが求められる。「この2種類でアーキテクチャの設計などが異なる」と河津氏は言う。

 高信頼性&高速処理については、完全なコントロールのため、IIJと共同で、サーバーやネットワークなどのインフラから堅牢な設計で作り上げたという。そして、以降、河津氏は敏捷性について語った。

「敏捷性」と「高信頼性&高速処理」の、相反するところのある2つが求められる

Kubernetesによるシステム構成

 ディーカレットのマイクロサービスはコンテナで動いている。コンテナとは、実行するソフトウェアとその実行環境とを1つにパッケージしたものである。「いちばん難しいのは、ドメインの分割とコンテナの分割だと思う」と河津氏。

 河津氏はまた、コンテナについて、軽量であり、ステートレス(コンテナの中にデータなどの状態を持たないこと)でイミュータブル(起動後に変更を加えないこと)であることが必要だと語った。

コンテナ

 コンテナの次は、コンテナを動かす環境だ。複数台のサーバーの上にコンテナを配分してクラスターを構成するコンテナオーケストレーションとして、Kubernetesを採用した。なお、Kubernetesとしては、Google Cloud Platform(GCP)のサービスであるGKE(Google Kubernetes Engine)を使っているという。

 そのうえで、デプロイ(Depoloyment)とオートスケール(Horizontal Pod Autoscaler)、サービス定義(Service)とロードバランス(Ingress)について説明し、マニフェストファイル(定義ファイル)の例を見せた。

デプロイとオートスケール
サービス定義とロードバランス

 また、コンテナをステートレスにするために、永続ディスクのPVと、PVをNFSで利用するためのPVCの例も見せた。

永続ディスクのPVとPVC

GCPサービスとCI/CDパイプライン

 さて、前述のとおりKubernetesにはGKEを利用しているため、GCPの各種サービスが利用できる。河津氏は、コンテナイメージを保存するCloud Registryや、アクセス制御のCloud IAM、DDoS対策のCloud Armorや、外との通信を定義するCloud NATなどの利用例を紹介した。

DDoS対策のCloud Armor

 また、GitHubとCircleCIでCI/CDパイプラインを構成している。これにより、コードを変更したときに、自動的にテストを実行し、問題なければデプロイ(サーバーへの配備)を実行できる。開発環境にデプロイするのも本番環境にデプロイするのも同じくできるようになっている。

GitHubとCircleCIによるCI/CDパイプライン

 各マイクロサービスは開発段階でLocust等を使って性能やスレッドセーフを検証している。「Locustはリクエスト&レスポンスの検証コードが書きやすいので採用した」と河津氏は説明した

Loucstを使った負荷テスト

クラウドネイティブなシステムが必要な理由

 最後に河津氏は、なぜ説明してきたようなクラウドネイティブなシステムによる敏捷性 が必要かを語った。「技術が急速に変化し、法律や規制が成熟しつつあり、マーケットが変化している。これらの流れを掴み、リードするために変化に強いアーキテクチャや組織、エンジニアが必要だ。そのために我々はクラウドネイティブで開発することを選択した」(河津氏)。

流れを掴みリードするために、クラウドネイティブなシステム

(協力:株式会社インターネットイニシアティブ)