ホームページ バックエンド開発 PHPチュートリアル PHP の高トラフィックの最適化?

PHP の高トラフィックの最適化?

Jun 17, 2016 am 08:31 AM
mysql php

現在、Web サイトのトラフィックが大幅に増加しているため、当社の技術チームの基本的なアイデアは、すべての PHP と MySQL を分離し、途中にキャッシュ層を追加することです。たとえば、メンバー登録は最初にサーバーのメモリに書き込まれ、次にサーバーのメモリに書き込まれます。このために中間キャッシュ層ではどのようなテクノロジーが使用されますか? 返信内容:

mysql の読み取りと書き込みがボトルネックであると感じる場合 (mysql のクエリと書き込みに時間がかかる、または規模が比較的大きい)、確かに中間キャッシュを導入できます。

mysql と PHP の間にキャッシュを構築するには、中間キャッシュ サービスとして redis を直接使用することをお勧めします。

ただし、システムの問題を真に解決するには、mysql の読み取りと書き込みに時間がかかる理由を分析する必要があります。mysql の遅いクエリのログ分析を有効にすることができます。
読み取りと書き込みに問題がある場合は、次の点を試してください。
(1) SQL ステートメントには、テーブル結合やその他の操作が多すぎますか?
(2) テーブル内のレコードが多すぎますか? 何百万ものデータがあり、データベース、テーブル、またはパーティションに分割する必要がありますか?
(3) 適切なインデックスが使用されており、SQL クエリ ステートメントはインデックス フィールドを最大限に活用していますか?
(4) innodb_buffer_pool_size の増加、キャッシュ ヒット率の向上など、mysql 設定パラメータを調整することで、mysql の読み取りおよび書き込みのパフォーマンスを最適化できます。
(5) mysql が単一サーバーにデプロイされている場合は、マスターとスレーブの分離を検討するか、マスターとマスターおよび相互バックアップを設定することができます。
... ...

上記の最適化後も mysql にまだボトルネックがあると感じる場合は、中間キャッシュとして redis を導入しても遅くはありません。

実は、上に書いたことは氷山の一角であり、まだまだ最適化できる箇所がたくさんあります。
初期に書かれた記事:
10 億レベルの Web システムの構築 - 単一マシンから分散クラスターまで
最適化は難しいことではありませんが、適切な薬が必要です。
質問者さん、問題の説明の中で、病気の症状や原因については触れていませんが、すぐに治療計画の策定に移りました: [すべての PHP を MySQL から切り離す...] これは本当にですか?良い? しかし、私は問題を見守るためにここにいます。 。 。現在のほとんどのメモリ キャッシュは読み取り用に最適化されています。 。 。書き込み最適化の解決策は? ? ?

実は私はその問題に注意を払うためにここに来ました。 。 やみくもに最適化するのではなく、最初に核心を見つける必要があります。

システム速度の低下を引き起こす一般的な書き込みは、通常、頻繁な書き込みをカウントします。たとえば、ページがアクセスされるたびに、pv フィールドが +1 されます。頻繁な書き込みにより、MySQL クエリ キャッシュが作成された直後に期限切れになります。 . これは役割を果たしていないことと同じです。この場合、新しく追加された PV を保存するためのバッファ(非常に頻繁な書き込み、データの一貫性の要件なし)を作成し、バッファがいっぱいになったときに一度に再度書き込むことが非常に適しています。

あなたが言った「
すべての PHP を mysql から切り離し、キャッシュ層を追加する」はあまり良くありません。実際、ほとんどの場合、あなたが呼び出すキャッシュ層は単なるクエリキャッシュ関数です。 mysql を廃止して自分で引き継ぐのはあまり意味がありません。また、登録などの重要なデータはキャッシュに適していません。キャッシュが失われると大変です。 あなたが話している中間層はキューと呼ばれ、これを行うにはredisリストを使用できます。 MySQL の読み書きのビジネス ロジックを最初に最適化するのが最善です。会員登録や登録などの機能はキャッシュする必要があるため、実行が非常に遅くなります。 キャッシュがダウンしました。データはもう必要ありませんか?冗談じゃないよ。 キャッシュは読み取り用に最適化されています。データを書き込むときは間違った方法を使用しないでください。 1. キャッシュ
対象データの変更頻度や読み書き頻度を計画します。
読み取りと書き込みの頻度: 変更頻度の値が大きいほど、キャッシュに適しています。値が小さい場合は、実行しないでください。

2. SQL の最適化。ほとんどのエントリーレベルのシステムのレベルは高くありません...
単一のクエリが大きすぎるかどうか、結合テーブル クエリを単一テーブル クエリに置き換える
MYISAM を INNODB に置き換えるなど...

3. システム アーキテクチャの最適化
単一テーブル クエリ ページに含まれるコンテンツが多すぎませんか?
多くの機能とシステムを異なるビジネス モジュールに分割できますか?

4. 静的ページ
静的ページは、当然、動的ページよりも消費量が大幅に少なくなります
書き込みキューとキャッシュされた一時データ (カウンターなど) ) はすべてこのカテゴリに分類されます

6. 非同期データ取得

7. 分散アーキテクチャ
データベース、複数のデータベース サーバー、さらには複数の PHP サーバーなどの読み取りと書き込みの分離。 この記事を読んですべてを理解してください:
2014-05-07 編集 ボトルネックが必ずしもデータベースにあるわけではない場合があります。まず、それがフロントエンドの問題なのかバックエンドの問題なのかを判断します。フロントエンドの場合は、静的ファイルのキャッシュ、CSS、JS、その他のファイルのマージと圧縮、HTTP リクエストの最小化など、さまざまな最適化を行う必要があります。バックエンド データベースの読み取りおよび書き込みパフォーマンスの問題の場合は、最初にプロファイリングを実行して、ボトルネックがどこにあるのかを特定します。本当にキャッシュ レイヤーを追加したい場合は、データの永続化をサポートする Redis を使用することをお勧めします。さらに、メッセージ キューは、プログラムの分離を実現するために通信を非同期に処理すると考えることができます。メッセージキューは、突然のピークトラフィックに非常にうまく対処できます。個人的には、弊社でも使用している RabbitMQ をお勧めします。データベースへの検索負荷を軽減するために、独立した全文検索エンジンを使用することもできます。私自身も Solr を使用しています。
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホット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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

MySQL:データベース、phpmyAdmin:管理インターフェイス MySQL:データベース、phpmyAdmin:管理インターフェイス Apr 29, 2025 am 12:44 AM

MySQLとPHPMyAdminは、次の手順を通じて効果的に管理できます。1。データベースの作成と削除:PHPMyAdminをクリックして完了します。 2。テーブルの管理:テーブルを作成し、構造を変更し、インデックスを追加できます。 3。データ操作:データの挿入、更新、削除、SQLクエリの実行をサポートします。 4。データのインポートとエクスポート:SQL、CSV、XML、およびその他の形式をサポートします。 5。最適化と監視:最適化可能なコマンドを使用してテーブルを最適化し、クエリアナライザーと監視ツールを使用してパフォーマンスの問題を解決します。

session_start()関数の重要性は何ですか? session_start()関数の重要性は何ですか? May 03, 2025 am 12:18 AM

session_start()iscrucialinphpformangingusersions.1)itInitiateSanewsessionifnoneExists、2)resumesanexistingsession、および3)SetSessionCookieforcontinuityAcrossRequests、ApplicationslicationSliviseSlikeUserauthicationAnticatent。

フィールドをMySQLテーブルに追加および削除する手順 フィールドをMySQLテーブルに追加および削除する手順 Apr 29, 2025 pm 04:15 PM

MySQLでは、AlterTabletable_nameaddcolumnnew_columnvarchar(255)afterexisting_columnを使用してフィールドを追加し、andtabletable_namedopcolumncolumn_to_dropを使用してフィールドを削除します。フィールドを追加するときは、クエリのパフォーマンスとデータ構造を最適化する場所を指定する必要があります。フィールドを削除する前に、操作が不可逆的であることを確認する必要があります。オンラインDDL、バックアップデータ、テスト環境、および低負荷期間を使用したテーブル構造の変更は、パフォーマンスの最適化とベストプラクティスです。

データ処理と計算にMySQL関数を使用する方法 データ処理と計算にMySQL関数を使用する方法 Apr 29, 2025 pm 04:21 PM

MySQL関数は、データ処理と計算に使用できます。 1.基本的な使用には、文字列処理、日付計算、数学操作が含まれます。 2。高度な使用法には、複数の関数を組み合わせて複雑な操作を実装することが含まれます。 3.パフォーマンスの最適化では、Where句での機能の使用を回避し、GroupByおよび一時テーブルを使用する必要があります。

MySQLをアンインストールし、残留ファイルをクリーンする方法 MySQLをアンインストールし、残留ファイルをクリーンする方法 Apr 29, 2025 pm 04:03 PM

安全かつ徹底的にMySQLをアンインストールし、すべての残留ファイルをクリーンにするには、次の手順に従ってください。1。MySQLサービスを停止します。 2。MySQLパッケージをアンインストールします。 3.構成ファイルとデータディレクトリのクリーン。 4.アンインストールが徹底していることを確認します。

MACOSシステム上のMySQLのインストール手順の詳細な説明 MACOSシステム上のMySQLのインストール手順の詳細な説明 Apr 29, 2025 pm 03:36 PM

MASQLのインストールは、次の手順で実現できます。1。コマンド/bin/bash-c"$(curl-fsslhttps://raw.githubusercontent.com/homebrew/install/head/install.sh)を使用して、Homebrewをインストールします。 2. Homebrewを更新し、Brewupdateを使用します。 3. mysqlをインストールし、Br​​ewinstallmysqlを使用します。 4. mysqlサービスを開始し、Brewservicesstartmysqlを使用します。インストール後、MySQL-Uを使用できます

MySQLにデータを挿入する効率的な方法 MySQLにデータを挿入する効率的な方法 Apr 29, 2025 pm 04:18 PM

MySQLでデータを挿入するための効率的な方法には、次のものが含まれます。1。insertInto ...値構文、2。LoadDatainFileコマンドの使用、3。トランザクション処理の使用、4。バッチサイズの調整、5。Insurtignoreまたは挿入の使用...

作曲家:PHP開発者のパッケージマネージャー 作曲家:PHP開発者のパッケージマネージャー May 02, 2025 am 12:23 AM

Composerは、PHPの依存関係管理ツールであり、Composer.jsonファイルを介してプロジェクトの依存関係を管理しています。 1)依存関係情報を取得するためのComposer.jsonを解析する。 2)依存関係を解析して、依存性ツリーを形成します。 3)PackagistからVendorディレクトリへの依存関係をダウンロードしてインストールします。 4)Composer.Lockファイルを生成して、依存関係バージョンをロックして、チームの一貫性とプロジェクトの保守性を確保します。

See all articles