プロジェクトでクリックカウントを使用しており、ある程度の負荷がかかっている場合は、おそらく別のソリューションを考えたでしょう。
開発履歴は、販売および広告プラットフォームの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なので、別途割り当てられた鉄は必要ありません。
このソリューションが私だけでなく役に立つことを願っています。