最適化のページのアクセス速度(3) - サーバーの最適化

ページのアクセス速度の最適化(C)

- サーバーの最適化

I.概要

主に介してサービス側の最適化、メッセージキュー、データベース要求(キャッシュ)、並行処理、方法のような静的なページを軽減。

第二に、メッセージキュー

1、問題を解決するために

メッセージキュー(メッセージキュー、MQ)のRabbitMQ、ActiveMQの、rocketmqを使用することができ、多くの異なる実装がありますが、あなたはまた、タスク分配システムgearmanを使用することができます。

システムの内容が気にしないためにメッセージキューは主に、つまり、非同期的に送信されたメッセージを解決するために、完了したばかりの契約を発表し、いくつかのパラメータを持って、自分のサブスクリプションシステムが必要です。たとえば、コールバック関数を完成するいくつかのタスクは、あなたは、非同期コールバックMQを実装するために使用することができます。

2、治療

例をRabbitMQのために。RabbitMQのサーバは、トランジットプラットフォームメッセージの生産者と消費者とみなすことができます。リリースされたときに、サーバスイッチ(交換)RabbitMQのために発表された生産者は、(キーをルーティング)ルーティングルールを定義します。RabbitMQのサーバールーティングルールに従って、メッセージは、対応するキュー(待ち行列)に交換機から転送されたキューからメッセージした後、消費者、処理によって取り込まれました。下図のように:

キューの蓄積を防ぐために、処理速度を高速化するために、消費者は、同時に、コンテンツ消費のためのキューを複数のプロセスを再生することができます。

3、消費者がいることを確実にするために

そこのRabbitMQがリリース成功が存在しない場合に、メカニズムを再試行し、それが自動的に送信を再試行します。あなたはメッセージが消費されていることを確認したい場合はもちろん、あなたがメッセージの処理を完了するために、消費者を必要とする、同様のTCP 3ウェイハンドシェイクを設定し、生産を伝えるメッセージを公開することができます。

生産者は、メッセージコンシューマ確認処理、対応するデータ状態を受信した後、データベース・テーブル内の各レコードにメッセージを送信することができます。

一方、一つのcrontabを書くことができ、所定の時間(例えば10分)を超えるためにスキャンテーブルのタイミングは、成功状態は、再販が設定されていない記録しました。

情報利点を記録する別の表は、メッセージが投稿されたことを示す限り、表内のデータが存在するように、ということです。このメッセージは、ニュースが確認またはプロセスの問題を受けてメッセージを解放することは容易ではないときに問題が処理されるよう表示されたら。

もちろん、この方法では、メッセージ受信者の処理は関係なく、一度だけ処理する方法を何回、同じメッセージのために、すなわち、冪等ではありませんが必要です。

4、のRabbitMQ的ルーティングキー

次のようにいくつかの治療法があり、RabbitMQの:

1)放送

興味のメッセージを受け取るために、消費者によってキューに投稿されたすべてのメッセージは、メッセージのために廃棄された関心のではありません。

2)直接

送信するキューを指定します。

3)トピック

通常の方法を使用して、いくつかは、例えば、キュ​​ーにメッセージを公開します。*、すべての名前付きを公開する。キューの先頭。

第三に、キャッシュ

1、問題を解決するために

キャッシュされたオブジェクトは、主にデータベースの操作を低減することができます。データベースへの要求は、あなたがI / Oリソースを取る必要があり、キャッシュがメモリに格納され、速度が非常に速くなります。

したがって、頻繁にアクセスされるデータのために、リアルタイム要件がそれほど高くはないが、キャッシュして、データベース上の圧力を低減することができます。

加えて、(そのような物品トラフィックなど)データの頻繁な変更、短時間で大量のアクセス(スパイクシステム)の必要性は、キャッシングは、よりよい解決策です。

キャッシュが使用されているRedisのとmemcacheのを。

図2に示すように、メモリキャッシュとRedisの差

Memcacheのキャッシュは、キーと値のストアの一形態のみであり、純粋です。

Redisのより強力な、文字列、リスト、ハッシュ、セット、ソートセット、永続的なデータのサポート(AOF、スナップショット)を含む、5つのデータ構造をサポートしていますが、(、定点サーベイランスのためのサポートをトランザクション処理をサポートしており、一時的にメモリ制限を突破することができます)永続的な方法で。

3、設定モードでのキー

一般的には、メソッド名:IDキーなどの方法なので、より便利見つけます。

4、キャッシュの問題が発生します

キャッシュキャッシュは、アバランシェ・キャッシュ、キャッシュ破壊に浸透します。

1)キャッシュ浸透

問合せキーが多数存在していない場合は、クエリの多くにつながるキャッシュに保存されませんクエリ結果を存在しない通常の状況下など、データベースに直接キャッシュクエリーをバイパスします。

ソリューション:コンテンツデータベースが存在しないために、あなたはまた、バイパスに、データベースの動作を回避するために、3分程度の短い時間のランダムな時間を節約することができます。

2)キャッシュ雪崩

すべてのキーが同じ時刻に設定されている場合は、同じ時間があるでしょう、それは一瞬に多数の要求のデータベースが起こるのだろう、すべてのキーの有効期限が切れています。

解決策:5分の時間の3秒に、このような4分58秒のように別のキー、ランダムな時間のセットは、同じ時間満了するのを避けるために、有効期限が切れます。

3)分解をバッファリング

キー、非常に短い時間での同時アクセスの数が多いために、すべての要求は、データのキャッシュデータベースへのアクセスをバイパスします。

解決策:問題を解決するためにミューテックスを設定することができます。キャッシュがミューテックスを訪問行く、存在しないことを要求、setnxのRedisの、memcacheののキーを追加します。この場合、要求データベース、および要求の結果をバッファに格納されます。

このように、次回の要求は、キーはその要求が成功するまで、キャッシュを訪問することを行くあなたは、時間のランダムな短い期間を待つことができ、データがロックされていることを意味して、ロックを要求し、あった場合に追加することができない存在ミューテックスによるものです通常、この時点でキャッシュがすでに存在しています。ノーコンテンツ場合は、データベースを要求するために行くことができます。

5、キャッシュの有効期限ポリシー--LRU

キャッシュの内容があまりにも多く、マシンのメモリよりも、あなたはキャッシュの内容の一部を除いた政策を必要とする、最も一般的に使用されるには、それが最も最近使用され、LRU戦略です。

具体的な実装では、キューの先頭に追加し、キャッシュが下を削除するには、キューからアクセスされたときにキャッシュを維持するためにキューを使用することですので、最も古いデータを除去する必要性はデータへのアクセスはありません。

問題:

そこに別のキーへのアクセスがたくさんあり、削除する必要のあるデータが得られ、ダーティキューする時間。

ソリューション:

1)2つのキュー、最初のキューに置かれたデータアクセス時間とすることができ、第2の待ち行列は、再びアクセスし、最初のルールのLRUキューをきれいに移動しました。

2)また、より多くの加重キュー、重要なコンテンツを使用することができ、コンテンツが頻繁に訪問することがあり、どこへ行くハイレベル・キャッシュ・キューです、私は下のキューに内容の一部を使用しないでください。

第四に、並行処理

PHPの並行処理は、解決するためにswooleフレームワークを使用することができ、それはコンテンツの同時消費を制御することができます。例えば、ディスプレイのページでは、いくつかの異なるシステムからデータを取得する必要があり、複数のデータが、最終的な要約の後工程で、非同期的に行うことができます。

Swooleフレームワークは、私はあまりにも慣れていないんだし、その後、この部分を共有することを学びました。

第五に、静的なページ

nginxのは、などに対処するためのphp-FPM、および遭遇HTML、JS、CSSを、遭遇に転送するPHPの能力、PHPファイルを扱う、直接ブラウザに処理することができません。

そのため、ページでは、コンテンツはほとんど変化しない、PHPファイルへの最初の訪問は、ファイルをHTMLにそれを移動静的な方法を使用して、有効期限を設定することができ、前端と後端の完全な分離を達成していません。

後でアクセスすると、時間に応じて作成されたLinuxのファイルは、有効期限に達していないときに、有効期限が切れ直接nginxのを、対応するHTMLファイルを返すために取ることができるか否かを判断します。

おすすめ

転載: www.cnblogs.com/zmdComeOn/p/11704925.html