BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Coinbaseはどのようにしてスケーリングの問題に対処したか

Coinbaseはどのようにしてスケーリングの問題に対処したか

原文(投稿日:2018/08/12)へのリンク

仮想通貨交換所を運営しているCoinbaseは2017年の仮想通貨ブームで同社のプラットフォームのスケーリングの問題に直面した。エンジニアリングチームはMongoDBのアップグレードと最適化やトラフィックの分離に注力し、将来のためにキャプチャとリプレイのツールを構築した。

2017年の5月から6月のCoinbaseの顧客のトラフィックは予想を超えてスパイクし、通常時の最高値の5倍を超え、ダウンタイムも発生した。チームはまず、簡単な課題に取り組んだ。つまり、垂直にスケーリングし、パフォーマンス改善のためにMongoDBをアップグレードし、インデックスの最適化、トラフィックの分離を行った。既存のモニタリングシステムは文脈上の情報を捕捉するには不十分だったため、コードを実装して不足していたデータをログ出力するようにした。このような改善を行っても、2017年12月のビットコインの価格高騰で、同社は複数回の障害に再び見舞われた。それ以来、チームは、リクエストをキャプチャしリプレイするツールを使って、トラフィックのパターンをエミュレートして、より巨大なトラフィックを処理できるようにすることに注力してきた。

CoinbaseのRubyのアプリとMongoDBは両方とも、最初の障害で大きな遅延を経験した。遅延の程度はRubyとMongoDBで半々だった。異なるコンポーネントを跨いだ呼び出しの文脈を深く理解するため、チームはMongoDBのデータベースドライバに手を入れ追加でデータをロギングするようにした。これによって最適化されていないレスポンスオブジェクトがネットワークの負荷を増大させていることがわかった。これを修正することでアプリケーションの性能が改善した。さらに、オブジェクトリレーショナルマッピング(ORM)レイヤとドライバのレイヤにMemcachedを導入したことで大きな読み取りのスループットが改善した。不足していたインデックスの追加も効果があった。2017の6月には、MongoDBのクラスタを、より高速なWiredTigerストレージエンジンを使っている3.2にアップグレードした。また、同社はレートリミッティングのようなサービスをRedisを使って実現している。このサービスはRedisシングルスレッドモデルのために障害の影響を受けた。

将来のトラフィック増大に備えるために、チームはCaptureとCannonというツールを作った。このふたつのツールはプロダクションのシステムの間のトラフィックを捉え、オンデマンドで新しいシステムに流し、テストをする。両方ともmongoreplayがベースになっているツールだ。mongoreplayはMongoDBインスタンスへのトラフィックを捕捉し、実行されたコマンドを記録する。そして、その記録は他のMongoDBインスタンスに対して実行できる。トラフィックは複数のアプリケーションサーバの間で捕捉し、ひとつのファイルに統合した。捕捉したトラフィックとディスクのスナップショットはAWS S3に保存し、Cannonが実行する。

Coinbaseはhttps://status.coinbase.com/でステータスページを公開している。

 
 

Rate this Article

Adoption Stage
Style
 
 

この記事に星をつける

おすすめ度
スタイル

BT