こんにちは、コミュニティ!
最初は、 devconfのレポートから要約の形で記事を書くことを計画していました 。 それから、45分のスピーチは、そのサイズを正気のままにしながら、ハブ上の記事に転送するのが難しいという理解に至りました。 したがって、この記事ではplus1.wapstart.ruのアーキテクチャについて説明します 。会議のスライドはこちらでご覧いただけます 。
Plus1.wapstart.ruは、モバイルインターネットの広告ネットワークです。 私たちの「エコシステム」は、広告主、サイトの所有者(サイトおよびアプリケーション)、およびユーザーの対象者です。
サイトの所有者はできるだけ簡単かつ効率的にオーディエンスの収益化を望み、広告主はお金を効果的に投資したいと考えています。
plus1.wapstart.ruタスクは、これらのグループのニーズを満たすことです。 私たちにとって、彼らの欲求は、1分間のダウンタイムを許さず、広告の品質と外観を単独で監視するのではなく、できるだけ早く作業しなければならないことを意味します。
いくつかの数字:
- ピーク負荷> 1秒あたり10 3個の動的クエリ。
- 1日に10 7個以上の広告が表示されます。
- バナーとサイトの総数は、4桁の数字で測定されます。
- バナーの平均復帰時間は90ミリ秒を超えません。
それがどのように機能するかに興味があるなら、猫へようこそ!
鉄

ソフトウェア
均一性に努めています:
- フロント-freebsd 、 nginx 。
- ファーム(アプリケーションサーバー) -Debian GNU / Linux 、php 5.3 fpm 、 onphpフレームワーク 、 memcached 、独自のデーモン(これらについては次のレポートで説明します)。
- データベースサーバー-Debian GNU / Linux、 Postgres 9.0、すぐに使用可能な複製。
- サーバーの提供-Debian GNU / Linux、 zabbix 、 pinba
バナーを選択する方法

主なルールは、何かを事前に計算できる場合、事前に考慮する必要があるということです。

プロセス自体は次のようになります。
- リクエストを解析して(http)バナーを表示します。 高速ストレージから
このリクエストの特性を取得します:ipで演算子を定義します
ユーザーエージェントなどによる電話番号、モデル、オペレーティングシステム
見出し。 - リクエストの特性ごとに、バナーのリストを取得し、
このリクエストに適しています。 - リストを交差させます。
- 結果のバナーのセットは、追加でチェックされます
「チェッカー」。 これは、いくつかのチェックを実行できるためです。
実行時のみ 特定のリクエストに関連付けられています。
たとえば、ユーザーがすでにバナーを表示しているのは意味がありません
10回見ましたが、クリックしませんでした。
統計の計算方法

常に成長の準備ができていなければなりません。 プロセスは、簡単に並列化できるように配置する必要があります。
次のように機能します。
- 各サーバーは、統計イベント(ファクトの表示、ファクトのクリックなど)をシリアル化された形式でファイルに書き込みます。
- 名前のファイルにはタイムスタンプが含まれています。
- ファイルハンドラーは、ファイルからレコードをグループ化し、同種のイベントを1つのレコードに「折りたたみ」、結果セットをデータベース内の一時テーブルに書き込み、ファイルをアーカイブします。
- 一時テーブルには、名前にタイムスタンプが含まれています。 1時間ごとのテーブルに集約した後、削除されます。
- 1時間ごとのテーブルから毎日のテーブルが作成され、毎日のテーブルから毎月のテーブルが作成されます。 各タイプのテーブルのデータには一定の保存期間があります。
モニタリング

次に、メインの監視サービスとしてzabbixを使用します。 速いとは言えませんが、トリガーとサーバーのセットでは非常にうまく機能します。 鉄の指標(io、cpu、la)とアプリケーションの指標(戻り時間、ログの増加)だけでなく、ビジネス指標(企業秘密:)も監視されます。
アプリケーションの運用統計を収集するために、pinbaを使用します(すでに説明しました:))。
最も重要なトリガーは、SMSを介して送信されます。
間違い
誰もが間違いを犯しています。 当然、開発者はエラーに注意する必要があります。ユーザーがエラーについて知る前に、エラーについて学ぶことをお勧めします。 エラーを収集するには、 syslogを使用します。これは、phpの利点です。
そこにログインする方法を知っています。 syslogからのデータは、サービングサーバーに集約され、N分ごとにメーリングリストに送信されます。 これにより、問題をすばやくキャッチできます。
これで、おそらく、あなたは終了することができます。 対話はコメントで続けることができます。 私たちのチームはあなたの質問にお答えします。
追伸 私たちはコミュニティとベストプラクティスを共有しています-https://github.com/Wapstart
pps アプリケーションの「チート」 方法については、別の投稿があります。