検索
ホームページ運用・保守Linuxの運用と保守ウェブサイトシステムのキャッシュ機構の構築と最適化

Web システムの外部ネットワーク環境について説明した後、Web システム自体のパフォーマンスの問題に注意を払い始めます。

当社の Web サイトへのアクセス数が増加すると、多くの課題に直面するようになります。これらの問題を解決するには、マシンを拡張するだけでなく、適切なキャッシュ メカニズムを確立して使用することが重要です。

当初、私たちの Web システム アーキテクチャは次のようになっており、各リンクには 1 台のマシンしかありません。

ウェブサイトシステムのキャッシュ機構の構築と最適化

1. MySQL データベースの内部キャッシュは

MySQL のキャッシュ メカニズムを使用します。MySQL の内部から始めましょう。コンテンツ 最も一般的な InnoDB ストレージ エンジンに基づいています。

1. 適切なインデックスを作成します

最も簡単なのはインデックスを作成することです。テーブル データが比較的大きい場合、インデックスはデータを迅速に取得する役割を果たします。ただし費用がかかるものもございます。まず、ある程度のディスク領域を占有します。その中でも結合インデックスが最も顕著です。使用には注意が必要です。生成されるインデックスはソース データよりも大きくなる場合もあります。次に、インデックス作成後のデータの挿入/更新/削除などの操作では、元のインデックスを更新する必要があるため、時間がかかります。もちろん、実際には、システム全体が選択クエリ操作によって支配されているため、インデックスを使用すると、システムのパフォーマンスを大幅に向上させることができます。

2. データベース接続スレッド プール キャッシュ

すべてのデータベース操作リクエストで接続の作成と破棄が必要な場合、間違いなくデータベースにとって大きなオーバーヘッドになります。このタイプのオーバーヘッドを軽減するために、MySQL で thread_cache_size を構成して、再利用のために予約されているスレッドの数を示すことができます。スレッドが足りない場合は再度作成され、アイドル状態のスレッドが多すぎる場合は破棄されます。

実際には、pconnect (データベースロング接続) を使用する、より根本的なアプローチがあり、一度スレッドが作成されると、それは長期間維持されます。ただし、アクセス量が比較的多く、マシンの数が多い場合、この使用法では接続が再利用されず、最終的に max_connections (最大接続数) が制限されるため、「データベース接続の数が枯渇する」可能性があります。データベースの数に達しました。したがって、長い接続を使用するには、通常、CGI マシンによって「盲目的に」作成される接続の数を制御するために、CGI と MySQL の間に「接続プール」サービスを実装する必要があります。

3. Innodb キャッシュ設定 (innodb_buffer_pool_size)

innodb_buffer_pool_size インデックスやデータの保存に使用されるメモリ キャッシュ領域です。マシンが MySQL 専用の場合、通常は 80 にすることが推奨されます。マシンの物理メモリ。%。テーブル データをフェッチするシナリオでは、ディスク IO を削減できます。一般に、この値を大きくするとキャッシュヒット率が高くなります。

4. サブライブラリ/テーブル/パーティション。

MySQL データベースのテーブルは一般に数百万単位のデータ量に耐えますが、これ以上増加するとパフォーマンスが大幅に低下するため、これを超えるデータ量が予測される場合は、サブシステムなどの運用を推奨します。 -データベース/テーブル/パーティション。最善のアプローチは、最初からサービスをサブデータベースおよびサブテーブルのストレージ モデルに設計し、中期以降の段階でのリスクを根本的に排除することです。ただし、リストベースのクエリなどの一部の利便性が犠牲になり、同時にメンテナンスの複雑さが増加します。しかし、データの量が数千万以上になると、それらすべてに価値があることがわかります。

2. 複数の MySQL データベース サービスをセットアップする

1 台の MySQL マシンは、ハングアップすると Web サービスが利用できなくなるため、実際には高リスクの単一ポイントになります。利用可能。さらに、Web システムへのアクセス数が増加し続けると、ある日、1 台の MySQL サーバーではサポートできないことがわかり、さらに多くの MySQL マシンを使用する必要が生じました。複数の MySQL マシンを導入すると、多くの新たな問題が発生します。

1. スレーブ データベースをバックアップとして使用して、MySQL のマスター/スレーブを確立します。

このアプローチは、純粋に「単一障害点」の問題を解決するためのものです。マスター データベースに障害が発生した場合、スレーブデータベースに切り替えます。ただし、スレーブ ライブラリは実際にはアイドル状態であるため、このアプローチは実際には少しリソースの無駄になります。

ウェブサイトシステムのキャッシュ機構の構築と最適化

#2. MySQL は読み取りと書き込み、つまりメイン データベースへの書き込みとスレーブ データベースからの読み取りを分離します。

2 つのデータベースは読み取りと書き込みを分離しており、メイン データベースはクラスの書き込みを担当し、スレーブ データベースは読み取り操作を担当します。また、メインデータベースに障害が発生した場合でも、読み取り操作には影響を与えず、同時にすべての読み取りと書き込みを一時的にスレーブデータベースに切り替えることができます(トラフィックが大きすぎる可能性があるため、トラフィックに注意する必要があります)スレーブ データベースはダウンします)。

ウェブサイトシステムのキャッシュ機構の構築と最適化

#3. プライマリ バックアップとセカンダリ バックアップ。

2 つの MySQL サーバーは、お互いのスレーブ データベースであると同時にマスター データベースでもあります。このソリューションは、トラフィックのプレッシャーを回避するだけでなく、「単一障害点」の問題も解決します。いずれかのユニットに障害が発生した場合でも、別のサービス セットが利用可能です。

ただし、このソリューションは 2 台のマシンのシナリオでのみ使用できます。ビジネスが依然として急速に拡大している場合は、ビジネスを分離し、複数のマスター間サービスや相互バックアップ サービスを確立することもできます。

ウェブサイトシステムのキャッシュ機構の構築と最適化

3. Web サーバーとデータベースの間にキャッシュを確立する

実際、大規模なアクセスの問題を解決するには、単純に行うことはできません。データベースレベルに焦点を当てます。 「80/20 ルール」によると、リクエストの 80% はホット データの 20% のみに焦点を当てています。したがって、Web サーバーとデータベースの間にキャッシュ メカニズムを確立する必要があります。このメカニズムでは、ディスクをキャッシュまたはメモリ キャッシュとして使用できます。これらにより、ほとんどのホット データ クエリはデータベースの前でブロックされます。

1. ページの静的化

ユーザーが Web サイト上の特定のページにアクセスすると、ページ上のコンテンツのほとんどは長期間変更されない可能性があります。たとえば、ニュースレポートは、一度公開されるとほとんど変更されません。この場合、CGI によって生成された静的 HTML ページは、Web サーバーのディスク上にローカルにキャッシュされます。動的 CGI クエリ データベースを通じて取得される初回を除き、ローカル ディスク ファイルはユーザーに直接返されます。

Web システムの規模が比較的小さかったときは、このアプローチが最適であるように思えました。しかし、Webサーバーが100台になるなど、Webシステムの規模が大きくなると。この方法では、これらのディスク ファイルのコピーが 100 個存在することになりますが、これはリソースの無駄であり、保守が困難です。このとき、サーバーを一元管理して保存すればよいのではないかと考える人もいるかもしれませんが、次のキャッシュ方法を見てみてはいかがでしょうか。

2. シングル メモリ キャッシュ

ページの静的化の例を通して、Web マシン自体で「キャッシュ」を維持するのは難しく、さらに多くの問題を引き起こすことがわかります (実際、PHP の apc 拡張機能を使用すると、Web サーバーのネイティブ メモリをキー/値を通じて操作できます)。したがって、構築することを選択したメモリ キャッシュ サービスも独立したサービスである必要があります。

メモリ キャッシュの選択には、主に redis/memcache が含まれます。パフォーマンスの点では両者に大きな違いはありませんが、機能の豊富さの点では Redis の方が優れています。

3. メモリ キャッシュ クラスター

単一のメモリ キャッシュを構築すると、単一障害点の問題に直面するため、それをクラスター化する必要があります。簡単な方法は、スレーブをバックアップ マシンとして追加することです。しかし、実際にリクエストが多く、キャッシュ ヒット率が高くなく、より多くのマシン メモリが必要であることが判明した場合はどうなるでしょうか?したがって、クラスターとして構成することをお勧めします。たとえば、redis クラスターに似ています。

Redis クラスター クラスター内の Redis は複数のマスターとスレーブのセットであり、同時に各ノードがリクエストを受け入れることができるため、クラスターを拡張する場合に便利です。クライアントは任意のノードにリクエストを送信でき、それが「担当する」コンテンツであれば、そのコンテンツが直接返されます。それ以外の場合は、実際に責​​任のある Redis ノードを見つけて、クライアントにアドレスを通知し、クライアントは再度要求します。

これはすべて、キャッシュ サービスを使用するクライアントに対して透過的です。

メモリ キャッシュ サービスを切り替える場合には、特定のリスクが伴います。クラスタ A からクラスタ B に切り替えるプロセスでは、クラスタ B が事前に「ウォームアップ」されていることを確認する必要があります (クラスタ B のメモリ内のホット データは可能な限りクラスタ A のメモリと同じである必要があります)そうしないと、切り替えの瞬間に大量のコンテンツ要求が要求されます。クラスター B のメモリ キャッシュでは見つかりません。トラフィックはバックエンド データベース サービスに直接影響し、データベースのダウンタイムが発生する可能性があります)。

4. データベースの「書き込み」の削減

上記のメカニズムはいずれもデータベースの「読み取り」操作の削減を実現しますが、書き込み操作も大きな負担となります。書き込み操作を減らすことはできませんが、リクエストをマージすることで負荷を軽減できます。このとき、メモリ キャッシュ クラスタとデータベース クラスタの間で変更の同期メカニズムを確立する必要があります。

まず、外部クエリが正常に表示できるように、変更リクエストをキャッシュに入れてから、これらの SQL 変更をキューに入れて保存します。キューがいっぱいになったとき、または時々、これらは 1 つのリクエストにマージされ、データベースに送信されます。データベースを更新します。

上記のシステム アーキテクチャを変更することで書き込みパフォーマンスを向上させることに加えて、MySQL 自体もパラメーター innodb_flush_log_at_trx_commit を構成することでディスクへの書き込み戦略を調整できます。マシンのコストが許せば、ハードウェア レベルから問題を解決するために、古い RAID (独立したディスクの冗長アレイ、ディスク アレイ) または新しい SSD (ソリッド ステート ドライブ、ソリッド ステート ドライブ) を選択できます。

5. NoSQL ストレージ

データベースの読み取り、書き込みに関係なく、トラフィックがさらに増加すると、最終的には「人手が制限されるとき」のシナリオに到達します。マシンを追加するコストは比較的高く、実際には問題を解決できない可能性があります。現時点では、一部のコア データに NoSQL データベースの使用を検討できます。 NoSQL ストレージの多くはキーバリュー方式を採用していますが、上で紹介したように Redis を使用することをお勧めします。Redis 自体がメモリ キャッシュであり、ストレージとしても使用できるため、データを直接ディスクに保存できます。

この場合、データベース内で頻繁に読み書きされるデータの一部を分離し、新しく構築した Redis ストレージ クラスターに配置します。これにより、元の MySQL データベースへの負担がさらに軽減されます。 Redis自体はメモリレベルのキャッシュであり、読み書きのパフォーマンスが大幅に向上します。

国内の一流インターネット企業は、アーキテクチャの点で上記のソリューションと同様のソリューションを多く採用しています。ただし、使用されるキャッシュ サービスは必ずしも Redis であるとは限りません。他のオプションも豊富で、さらには Redis に基づくものもあります。独自のビジネス特性に基づいて独自の NoSQL サービスを開発します。

6. 空ノード クエリの問題

上記のサービスをすべて構築し、Web システムがすでに非常に強力であると考えたとき。私たちは今も同じことを言っていますが、新たな問題は依然として発生します。空のノード クエリは、データベースにまったく存在しないデータ リクエストを指します。たとえば、存在しない個人情報のクエリをリクエストすると、システムはすべてのレベルで段階的にキャッシュを検索し、最終的にデータベース自体を見つけ、見つからないという結論を導き出し、結果を返します。フロントエンドまで。すべてのレベルのキャッシュが無効であるため、このリクエストは大量のシステム リソースを消費し、多数の空のノード クエリが行われると、システム サービスに影響を与える可能性があります。

以上がウェブサイトシステムのキャッシュ機構の構築と最適化の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事はhcoderで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
DebianがHadoopデータ処理速度を改善する方法DebianがHadoopデータ処理速度を改善する方法Apr 13, 2025 am 11:54 AM

この記事では、DebianシステムのHadoopデータ処理効率を改善する方法について説明します。最適化戦略では、ハードウェアのアップグレード、オペレーティングシステムパラメーターの調整、Hadoop構成の変更、および効率的なアルゴリズムとツールの使用をカバーしています。 1.ハードウェアリソースの強化により、すべてのノードが一貫したハードウェア構成、特にCPU、メモリ、ネットワーク機器のパフォーマンスに注意を払うことが保証されます。高性能ハードウェアコンポーネントを選択することは、全体的な処理速度を改善するために不可欠です。 2。オペレーティングシステムチューニングファイル記述子とネットワーク接続:/etc/security/limits.confファイルを変更して、システムによって同時に開くことができるファイル記述子とネットワーク接続の上限を増やします。 JVMパラメーター調整:Hadoop-env.shファイルで調整します

Debian syslogを学ぶ方法Debian syslogを学ぶ方法Apr 13, 2025 am 11:51 AM

このガイドでは、Debian SystemsでSyslogの使用方法を学ぶように導きます。 Syslogは、ロギングシステムとアプリケーションログメッセージのLinuxシステムの重要なサービスです。管理者がシステムアクティビティを監視および分析して、問題を迅速に特定および解決するのに役立ちます。 1. syslogの基本的な知識Syslogのコア関数には以下が含まれます。複数のログ出力形式とターゲットの場所(ファイルやネットワークなど)をサポートします。リアルタイムのログ表示およびフィルタリング機能を提供します。 2。syslog(rsyslogを使用)をインストールして構成するDebianシステムは、デフォルトでrsyslogを使用します。次のコマンドでインストールできます:sudoaptupdatesud

DebianでHadoopバージョンを選択する方法DebianでHadoopバージョンを選択する方法Apr 13, 2025 am 11:48 AM

Debianシステムに適したHadoopバージョンを選択する場合、次の重要な要因を考慮する必要があります。1。安定性と長期的なサポート:安定性とセキュリティを追求するユーザーにとって、Debian11(Bullseye)などのDebianの安定したバージョンを選択することをお勧めします。このバージョンは完全にテストされており、最大5年のサポートサイクルがあり、システムの安定した動作を確保できます。 2。パッケージの更新速度:最新のHadoop機能と機能を使用する必要がある場合は、DebianのUnstableバージョン(SID)を検討できます。ただし、不安定なバージョンには互換性の問題と安定性のリスクがあることに注意する必要があります。 3。コミュニティのサポートとリソース:Debianには、豊富なドキュメントを提供できるコミュニティサポートが大きくなり、

debianのtigervnc共有ファイルメソッドdebianのtigervnc共有ファイルメソッドApr 13, 2025 am 11:45 AM

この記事では、Tigervncを使用してDebian Systemsでファイルを共有する方法について説明します。最初にtigervncサーバーをインストールしてから構成する必要があります。 1. TigerVNCサーバーをインストールし、端末を開きます。ソフトウェアパッケージリストの更新リスト:sudoaptupdate tigervnc server:sudoaptinstaltaltigervnc-standalone-servertigervnc-common2。tigervncサーバーを構成するVNCサーバーパスワードを設定します。

Debian Mail Serverファイアウォールの構成のヒントDebian Mail Serverファイアウォールの構成のヒントApr 13, 2025 am 11:42 AM

Debian Mail Serverのファイアウォールの構成は、サーバーのセキュリティを確保するための重要なステップです。以下は、iPtablesやFirewalldの使用を含む、一般的に使用されるファイアウォール構成方法です。 iPtablesを使用してファイアウォールを構成してIPTablesをインストールします(まだインストールされていない場合):sudoapt-getupdatesudoapt-getinstalliptablesview現在のiptablesルール:sudoiptables-l configuration

Debian Mail Server SSL証明書のインストール方法Debian Mail Server SSL証明書のインストール方法Apr 13, 2025 am 11:39 AM

Debian Mail ServerにSSL証明書をインストールする手順は次のとおりです。1。最初にOpenSSL Toolkitをインストールすると、OpenSSLツールキットがシステムに既にインストールされていることを確認してください。インストールされていない場合は、次のコマンドを使用してインストールできます。sudoapt-getUpdatesudoapt-getInstalopenssl2。秘密キーと証明書のリクエストを生成次に、OpenSSLを使用して2048ビットRSA秘密キーと証明書リクエスト(CSR)を生成します:Openss

Debian Mail Server仮想ホスト構成方法Debian Mail Server仮想ホスト構成方法Apr 13, 2025 am 11:36 AM

Debianシステムでのメールサーバーの仮想ホストの構成には、通常、Apache Httpserverではなく、Apache Httpserverではなく、Mail Serverソフトウェア(Postfix、Eximなど)のインストールと構成が含まれます。以下は、メールサーバーの構成のための基本的な手順です仮想ホスト:ポストフィックスメールサーバー更新システムパッケージ:sudoaptupdatesudoaptupgradeポストフィックス:sudoapt

Debian Mail Server DNSセットアップガイドDebian Mail Server DNSセットアップガイドApr 13, 2025 am 11:33 AM

Debian Mail ServerのDNS設定を構成するには、次の手順に従うことができます。ネットワーク構成ファイルを開きます。テキストエディター(VIやNANOなど)を使用して、ネットワーク構成ファイル/など/ネットワーク/インターフェイスを開きます。 sudonano/etc/network/interfacesネットワークインターフェイス構成を検索:構成ファイルで変更するネットワークインターフェイスを見つけます。通常、イーサネットインターフェイスの構成はIFETH0ブロックにあります。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。