BT

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

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Herokuでのipifyサービスのスケーリング

Herokuでのipifyサービスのスケーリング

原文(投稿日:2018/02/10)へのリンク

読者の皆様へ:お客様のご要望に応じて、重要なものを逃すことなく、ノイズを低減できる一連の機能を開発しました。興味のあるトピックを選択して、電子メールとWeb通知を入手してください

ipifyサービスの開発者は、Heroku上の30億件以上のリクエストにサービスをスケールした経験を共有した。ipifyは、アプリケーションが外部IPアドレスを取得するために呼び出すことができるAPIを公開するオンラインサービスである。当初node.jsで書かれていたこのサービスは、より良いスケーラビリティを得るためにGoで書き直された。

自身の1プロジェクトにおける必要を解決するために、Randall Degges氏によってipifyが開始された。最初のバージョンはnode.jsで作成され、Herokuにデプロイされた。このサービスは、プログラムで使用できるように、curlのようなツールを介してアクセス可能であった。このウェブサイトは、後段をS3バケットとするCloudFrontに配備されたシンプルなフロントエンドであった。Herokuにはdynosと呼ばれるサーバ単位があり、最小のものは512MBのRAMと1つのCPU共有を提供する。Herokuはメンテナンスが少なくて済むサービス選択であった。プロセスの失敗時に自動再起動し、フロントにロードバランサを配置できた。この初期設定コストは約7ドル/月である。HerokuはAWSでホストされ、AWSの根底にある信頼性を活用することもできる。

サービスの人気が出たことによって、いくつかのスケーリングに関する問題が明らかになった。これは、ハードウェアを追加することでは解決できなかった。いくつかの調査によると、スループットはわずか約10リクエスト/秒であった。ノードクラスタモジュールを使用することで、いくつか改善された。ノードクラスタモジュールでは、マルチコアシステムを利用するために複数のプロセスが起動される。これが増加するトラフィックを処理するには不十分であると判明したとき、サービスはGoに書き直された。

Goのhttprouterパッケージが、他の選択肢よりも性能が優れていたために、採用された。書き直されたサービスは大幅に改善され、1dynoのデプロイで、より少ないメモリ(約5MB)で、2000以上のリクエスト/秒を処理できた。文字列処理のさらなる改善により、追加で1,000リクエスト/秒のパフォーマンス向上につながった。これにより、1dyno上で実行されるコストも下がった。AWSでホストされているipinfo.ioのようなサービスも、スケーラビリティの問題に直面し、コストアップにつながり、サービスの収益化は1つの解決策である。

ipifyは、通常の開発者だけでなく、マルウェアの作者によっても使用されており、スパイクトラフィックが大量に発生した。このため、ウイルス対策ベンダーによって、パブリックブロックリストに基づいて、ブロックされていた。現在のサービスの使用状況は、最大で月あたり300億リクエストに達し、平均応答時間は1~20ミリ秒である。位置情報の提供などの、他のサービスでは、ipifyと違い速度制限がある

ipifyのクライアントライブラリはいくつかの言語で利用できる。

 
 

Rate this Article

Adoption Stage
Style
 
 

この記事に星をつける

おすすめ度
スタイル

特集コンテンツ一覧

BT