InstagramはAndroidアプリケーションの起動をどのように準備していたか

ご存知かもしれませんが、 InstagramはFacebookに10億ドルで販売しています。 多くの人が疑問を持っています:お金は何のためですか? hub慢な人がこれをドットコムのブームと比較しました。 はい、Facebookだけでこのブームが続いています。



InstagramのCEO、Kevin Systromは2年間、成長の早い発想で収益化する方法を考えていましたが、思いつきませんでした。 さらに、彼がFacebookとの取引を拒否したという噂が何度も聞かれました。 Googleの自動プロンプトは、クエリ「kevin systrom」にフレーズ「Kevin Systrom純資産」という最初のオプションを長い間与えてきました。 Facebookなしでは事態は悪化しました。



1週間前、彼らはAndroidアプリをリリースし、Facebookに合計9個のゼロで販売しました。 Androidの所有者は満足しています。



しかし、開発者はそれほどではありません。「彼らはどこでdrれますか? 彼らは何のために支払われますか? 私もそれを行うことができますが、複雑で革新的なものは何もありません!」



個人的には、Google Playストアでアプリケーションがリリースされた日にサービスが終了するのを待っていました。 しかし、これは起こりませんでした。 最初の24時間の登録ユーザー数は約100万人でした。 かなりの数字、私はあなたに教えます。



そして、9人のチームはどのようにしてこのような流入に耐え、壊れることはなかったのでしょうか。



方法次のとおりです(すべてのデータはInstagram開発者ブログから確実に取得されます



測定:カウンターとタイマー



内部で発生するすべてを監視するには、何らかの形ですべてのアクティビティを監視する必要があります。 通常、これらは2種類のアクティビティです。いくつかの量(カウンター、1秒あたりの登録数など)といくつかの時間間隔(タイマー、ビンテージ写真が好きになるまでの時間など)です。 しかし、バルコニーに複数の車があり、DCに数ダースあり、数十の異なるスケジュールではなく、1つの一般的なスケジュールが必要な場合はどうでしょうか。 ソリューションは簡単です-すべてを1つのデータベースに保存します。 しかし、この操作はそれほど高速ではありません。 UDPが登場! はい、はい、すべてをデータベースに押し込むのではなく、1つの共通サーバーにデータを含む特別なUDPパケットをドロップするだけで、サーバーはそれらを受信して​​要約し、グラフィカルに表示します。 そのため、すべてのInstagramは「statsd」と呼ばれるNodeJSデーモンを使用します。 彼はこのすべての富を捕まえ、それらを直接Graphiteに送ります(ご想像のとおり、プロットの仕掛けです )。

これは非常にスケーラブルです(Instagramでは、ポーリング間隔は10秒です)。これは、ほぼリアルタイムで発生するすべてを追跡できるためです。



PostgreSQLサーバーを監視するために、 PGFouineが使用されます。 PGサーバーログに基づいて分析を構築し、重いクエリを識別してキャッシュするか、最適化されていないクエリ、余分なデータを引き出すクエリなどをキャッシュできるようにします。



ゾンビプロセス



クライアントがタイムアウト後に500エラーを受け取ったとき、それはひどく悲しいですよね? そして誰が責任があるのでしょうか? 誰もが黙っており、唯一の目撃者はすでに殺されています( kill -9 )。 Bitbucketは、 dogslowと呼ばれるDjango向けのオープンソース開発でInstagramを救います。 この犬は、最初はすべてのリクエストにしがみついており、25秒後にリクエストに対する応答がない場合、コールトレースをどこか、たとえば郵便局にマージします。

その結果、ボトルネックはmemcachedであることがわかりました。これはset()およびget_many()リクエスト中にハングアップし、50,000リクエスト/秒を生成しますが、プロセッサ全体を使用せず、結果としてプロセス全体の速度が低下しました。



レプリケーションとスレーブ



Instagram、Inc.にデータを保存するための主なバックエンド Redis&PostgreSQLです。 ご存知のように、これらのエンジンは両方ともスケーラビリティについて考えていたため、リソースが使い果たされるとすぐに奴らを「外出先で」「接続」することができました。

最初の12時間で、Redisデータベースへのクエリの頻度は40,000に達し、パフォーマンスに影響を与え始めました。 追加のサーバーを接続するのに20分もかかりませんでした。 印象的ですね。

Postgreをスケーリングするために、Amazon EBSスナップショットが使用されました。 それらを接続するには、マスターサーバーがぶら下がっていた簡単にカスタマイズ可能なAWS環境のおかげで、20分もかかりませんでした。



Androidチップ



これらすべてに加えて、連中はnode2dmユーティリティを作成しました。これは、Android C2DMサービスにプッシュ通知を送信するためのnode.jsサーバーです。 彼らによると、彼はその日約500万件の通知を処理しました。 これに敬意を表して、 node2dmはコミュニティに完全にオープンソースで提供されました。



All Articles