クリックカウントサーバー

プロジェクトでクリックカウントを使用しており、ある程度の負荷がかかっている場合は、おそらく別のソリューションを考えたでしょう。



開発履歴は、販売および広告プラットフォームの1つのプロジェクトに入ります。そこでは、移行の数を考慮する必要がありました。 PHPについての決定がありました。 しかし、これにより目に見える遅延は0.5〜1秒でした。これは開発者(特に私)にとって非常に迷惑であり、ユーザーもそう思います。



そのため、同様のプロジェクトを開発しなければならなかったとき、代替案を探す必要がありました。



クリックしてクリックを考慮するとどうなりますか:

-何らかのキーで遷移URLを引き出す必要があります

-データをログまたはデータベースに書き込む



産業用ソリューションが見つからない場合、2つのオプションがありました。

-nginx用のモジュールを作成します。

-独自のソリューションを作成します。



nginxをコンソール接続しないことを決定し、nginxを介したリクエストがプロキシされる独自のhttpサーバーを作成しました。 このサーバーは独立して動作できますが。 ソースはこちら



このソリューションは本質的に産業用ではありませんが、これまでのところ非常に信頼できることが証明されています。 現在、新しいプロジェクトでテストされています。 インストール中に、Makefileのパスを修正する必要があります。



ユーザーフレンドリーな構成ファイル。 ほとんどのオプションをオフのままにしておくことができます。 サーバーが「座る」ホストとポートを指定する必要があります。



このプロジェクトでは、inStorageおよびoutStorageエンジンの概念を使用しています。 これらは、単一のインターフェイスIStorage.cppによって定義されます。 これは、情報を保存するためのデータベース(ストレージ)です。



inStorageとして、memcachedbが使用され、そこにデータが保存されます:キー/アドレス

移行。

OutStorageは、ログが書き込まれるMongoDbを使用します。 フォームのaccess.logが維持されるため、この機能はオプションです。

2010/10/08 11:38:30 127.0.0.1 GET /xxx?12345 404

2010/10/08 11:38:30 127.0.0.1 GET /leads?12345 200







IStorageインターフェイスを使用して、任意のデータウェアハウスの拡張機能(モジュール)を作成できます。 この場合、main.cpp IStorage * inStorage = reinterpret_cast<IStorage *>(new inputMcStorage);

IStorage * outStorage = reinterpret_cast<IStorage *>(new outputMongoStorage);





の行を変更する必要がありIStorage * inStorage = reinterpret_cast<IStorage *>(new inputMcStorage);

IStorage * outStorage = reinterpret_cast<IStorage *>(new outputMongoStorage);





IStorage * inStorage = reinterpret_cast<IStorage *>(new inputMcStorage);

IStorage * outStorage = reinterpret_cast<IStorage *>(new outputMongoStorage);





クラスに追加し、サーバーを再構築します。



404エラーでは、移行アドレスを設定できます。 設定を参照してください。



クリックサーバー上の私のプロジェクトでは、データはnginxを介してプロキシされます。



弱いハードウェアでは、サーバーは1200rpqに耐えることができますが、これで十分です。 遅延はほとんどありません(1〜3ミリ秒)。 消費されるメモリは600Kなので、別途割り当てられた鉄は必要ありません。



このソリューションが私だけでなく役に立つことを願っています。



All Articles