この投稿はOdnoklassnikiの統計システムに関するものです。 統計が必要な理由と、それを使用する必要があるシステムについて説明します。 次の投稿で詳細を説明します。
•システムアーキテクチャ。
•システムおよびアルゴリズムの主要コンポーネント。
•自明ではない問題と解決策
なぜ統計が必要なのですか?
私たちのサイトの仕事に関するすべてを知るためには統計が必要です。 この知識により、次のことが可能になります。
•サービスをランダムに開発するのではなく、意図的にサイトのパフォーマンスとユーザーアクティビティを向上させます。
•新しいサービスであろうと単純なコードリファクタリングであろうと、開発の成功を評価する。
•サイト全体の作業を追跡します。
•サイトの各コンポーネントの動作とそれらの関係を制御します。
•サイトの個々のコンポーネントの動作の異常を調査します。
•ユーザーアクティビティの異常な変化を調査する。
•サービスの対象ユーザーを分析します。
収集するデータ
私たちのサイトの仕事に関するすべてを本当に知るためには、多くの情報を収集する必要があります。 毎日2兆(2,000,000,000,000)レコードを処理します。 関係者は、処理された統計に2〜3分遅れて、つまりほぼリアルタイムでアクセスできます。
記録します:
•ユーザーアクティビティ(クリック);
•サイトの重要なコンポーネント(javaクラスやメソッドなど)への呼び出し。
•サイトコンポーネント間の関係(たとえば、Webサーバーからキャッシュにアクセスする)。
また、ユーザーコンテンツ(アップロードされた写真や評価など)およびアクティビティ(ログインや訪問など)に関するデータを統計システムにアップロードして、ユーザーの行動を詳細に分析します。
統計ツール
チャートおよびDeschboardシステム
私たちは主にグラフの形で統計を見ます。 これらのチャートは、ほとんどの場合2つのタイプがあります。
1)1つのポイントが5分間の集約データであるグラフ。 これらは、運用監視用のグラフです。
2)1つのポイントが少なくとも1日間の集計データであるグラフ。 他の期間(週、月、四半期、年)を指定できます。 これらは、長期的な傾向を追跡するためのグラフです。
ワンクリックで、チャートはインタラクティブモードに切り替わり、チャートのパラメーターとフィルターを変更して、すぐに結果を取得できます。
チャートの主な機能:
1)日付と期間を選択します(ストーリー全体が利用可能です)。
2)任意のパラメーターを選択します-たとえば、呼び出し回数、平均実行時間。
3)サーバーやjavaクラスなどの分類子ごとにグループ化します。
4)値、値のリストごとにフィルターを配置します。
5)数学的アルゴリズムによる処理-たとえば、スケジュールの円滑化。
6)5分足チャートから日足チャートに、またはその逆に切り替わります。
7)設定済みのスケジュールを新しいものとしてdeschboardに保存するか、古いスケジュールを上書きします。
これらのグラフから、テーマ別のテーマデスクを作成します。 これを行うために、ASP.NETでWebアプリケーションを作成しました。
このシステムの重要な側面は、ビジネス分析部門ではなく、チャートを操作してダッシュボードを作成するマネージャー、開発者、および管理者です。 ビジネスアナリストはツールのみを提供し、システムパフォーマンスを確保します。
従来の報告システム
従来のレポートもあります。これらは、要求されたデータを表またはグラフの形式で表示する静的レポートです。 ビジネスインテリジェンス部門は、要求に応じてそれらを作成します。 これらのレポートは、チャートおよびデスクのシステムに統合されています。
レポートは考慮しません。レポート自体は興味深いものではありません。 大量のデータを処理する方法を検討します(たとえば、2011年に300億件近くのログインがありました)。
多次元分析(OLAP)システム
多くの場合、ピボットテーブルスタイルで長期的な傾向を分析する方が便利です。ピボットテーブルスタイルでは、任意のパラメーターをテーブルの形式でコンポーネントに分割できます。
したがって、さまざまなトピック(たとえば、支払キューブ、ログインキューブなど)にOLAPキューブを作成します。 キューブを操作するために、Webアプリケーションを作成しました。
自動異常検出システム
チャートでチャートボードを表示することは、監視する最も効果的な方法ではありません。 グラフを「見通す」システムを作成し、「標準」からの異常な逸脱を検出した場合は、それを文字またはSMSメッセージで通知します。
インフラストラクチャのボトルネックを自動的に検出するシステム
私たちには、Cacti、Zabbixなど、さまざまな専用システムを使用する4000台以上のサーバーがあります。 リソースの使用がクリティカルレベルに達すると、管理者にこれが自動的に通知されます。
サーバーの負荷が可能な限りまれにクリティカルレベルに達するためには、これらのサーバーの動作パフォーマンスを定期的に分析し、たとえば容量を追加するなどの適切な決定を下す必要があります。 このような分析を手動で手動で実行することは非常に困難です。 そのため、Cactiシステムからデータウェアハウスにデータをアップロードし、「すべてが同じ状況で継続する場合、どれだけ早くクリティカルレベルに達するか」をテーマに、過去2週間の動作インジケーターを反復処理するモジュールを作成しました。
使用される技術
データウェアハウス
2008年、ビジネス分析システムを構築する必要があると判断したOdnoklassnikiは、MS SQLデータベースを広く使用しました。 したがって、私たちにとって論理的な選択は、ビジネス分析にこのプラットフォームを使用することでした。
今日、データウェアハウスとして、MS SQL 2008 R2 Enterprise Editionのみを使用しています。 MS SQL 2012へのアップグレードを計画しています。もちろん、結果についてお知らせします。
データ処理
MS SQL Integrity Servicesを使用してみましたが、この技術は労働の面で不利でした。 同じコードをT-SQLで数倍高速に記述できます。 したがって、データ処理コードの99.9%はT-SQLで記述され、残りは.NETで記述されています。
OLAP
多変量解析には、MS SQL 2008 R2 Analysis Servicesを使用します。 また、MS SQL 2012へのアップグレードも計画しています。フロントエンド用のWebアプリケーションを作成しました。
チャートおよびレポートジェネレーター
MS SQL Reporting Servicesを使用して、グラフとほとんどのレポートを生成します。 当初、これは必要な最小限の機能を迅速に構築することが可能であったため、非常に成功したソリューションでした。 しかし、今ではシステムの要件が大きくなっています。よりリッチで、高速で、より動的なユーザーインターフェイスが必要です。 したがって、別のソリューションに移行する予定です(どちらを選択するかはまだ選択していません)。
Webアプリケーション
すべてのWebアプリケーションはASP.NETで記述されています。 DevExpress UIコンポーネントを使用します。これにより、単一のスタイルで適切な形状を簡単かつ迅速に作成できます。
次の投稿では、情報をログに記録し、DWHにデータを配信する方法について詳しく説明します。
Odnoklassnikiチーム