Aerospikeを採用した話

こんにちは。matsです。

 

先日、このようなプレスリリースを出させて頂きました。

http://prtimes.jp/main/html/rd/p/000000012.000009210.html

今回はその裏側の話をしようかと思います。

Aerospikeを初めて聞く方もいるかと思うので、簡単に説明しておきます。

 

Aerospikeとは

aer

  • NoSQL(キー・バリュー・ストア)データベース
  • インメモリ、もしくはフラッシュメモリSSD)にデータを保持
  • ノードの追加により、処理能力とデータ容量をスケールアウト可能
  • 99%以上のトランザクションを1ms以下のレイテンシで処理可能
  • 僅か数台で百万TPS超のスループットを実現
  • AppNexusやBlueKaiで稼働実績あり

みたいな感じです。要約すると超絶速いKVSってことでいいと思います。

 

なぜ、Aerospikeにしたのか

Aerospikeを検討する際に評価したポイントは、

  • スケールアウト可能であること(データ量の予測が難しいので)
  • 応答速度

で、これらを満たすデータベースを探していたところフィットした感じです。

比較検討した他のソリューションとしては、

  • DynamoDB (AWS)
  • BigQuery + KVS
  • Redis

あたりがあります。特に、DynamoDBはマネージドサービスなので運用負荷軽減の観点から勧めたかったのですが、

  • 秒間数千リクエストを受けるには費用が掛かり過ぎる
  • リクエスト数がキャパシティを超えた際にロストする

などの理由で、採用を見送りました。

 

Aerospikeは実際速いのか

Aerospikeについて調べると、その処理速度の速さに関する記事が多く出てきます。(英語ですが)

参考までに、弊社で他社連携用に利用しているAPIの応答速度を公開してみます。

構成的にはシンプルで、ロードバランサー(ELB)の配下にAPIのサーバを置いて、そのバックエンドにAerospikeがいる感じです。

IdsyncAPI

 

 

 

ロードバランサー(ELB)のレイテンシは、、、

(AWSなのでCloudWatchです)

 

api_latency

なんと、脅威の 0.9ms !!  1msすら切っています(笑)

圧倒的ですね〜。実際にはインターネット越しにアクセスする分の通信コストがあるので、20msほどになるのですがそれでも速いです。

 

圧倒的な速さを実現するAerospikeですが、実際に構築してみると結構クセのあるミドルウェアなので苦労も多かったです。そのあたりはまた別の機会に書こうかと思います。

 

ちなみに、Aerospikeの導入ですがエンジニア2人で2ヶ月で実現しています。