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

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

開発履歴は、販売および広告プラットフォームの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なので、別途割り当てられた鉄は必要ありません。

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

Source: https://habr.com/ru/post/J107713/


All Articles