2020年にPHPのインタビューの質問(C)

Yaezakura:2020 PHPのインタビューの質問(a)の

Yaezakura:2020 PHPのインタビューの質問(II)

 

A.データベース3つのパラダイム

最初のパラダイム:、必要な属性は、もはや分解原子の性質上1NF原子制約はありません。

第二のパラダイム:2NFのみ制約レコードが一意の識別は、記録される必要がある、すなわち、エンティティの一意。

第三のパラダイム:3NFフィールドの冗長性は、それが冗長フィールドを必要としない、任意のフィールドが他のフィールドに由来することができないこと、に結合されます。

パラダイムデザインの長所と短所:

利点:

小さな、迅速に更新するような、データの冗長性を減らす取得しようとすることができます

短所:クエリは、読み取り、書き込み効率の増加効率を減らすために、仲間に複数のテーブルを必要とするためには、インデックスがより困難に最適化

アンチ正規化:

長所:縮小テーブルはインデックスが関連付けられていることは、より良い与えるように最適化することができます

短所:データの冗長性やデータの異常、データは、より高価な改正する必要があります

ロックの2 .Mysqlどんな種類があります

-のMyISAM支持テーブルロック、InnoDBの支持テーブルと行ロック、行ロックデフォルトで
-テーブルレベルロック:小さなオーバーヘッドは、高速ロック、デッドロックが発生しないであろう。大粒径、ロック競合の最も高い確率、並行性の最小量ロック
-行レベルロック:大きなオーバヘッド、低速ロック、デッドロックが存在するであろう。ロック努力、ロック競合の小さな確率、最大の同時実行

 

III。ストアドプロシージャとは何ですか

我々は、SQL文のセットを完了するために、特定の機能のセットは、データベースに格納されてコンパイルした後、ユーザを指定してあるデータベース言語SQLステートメントが最初の手順(ストアドプロシージャ)を実装し、実行の過程でコンパイルされ、記憶されている必要操作するために使用しましたストアドプロシージャ名と指定されたパラメータ(パラメータを持つストアドプロシージャ場合)それを実行するために呼び出します。

ストアドプロシージャが作成され、データベースに保存されていることをプログラム可能な機能です。これは、いくつかの特別なSQL文と制御構造を有することができます。それは特定の機能を、異なるアプリケーションまたはインターネット、またはパッケージ内の同じ機能を実行することが所望される場合、記憶プロセスは非常に有用です。データベースストアドプロシージャは、シミュレーション方法でオブジェクト指向プログラミングとして見ることができます。これは、データへのアクセスを制御できます。

利点:

(1)ストアドプロシージャは、SQL言語の機能と柔軟性を強化します。フロー制御プロセスは、多くの柔軟性を準備された文を保存することができ、より複雑な複雑な判定動作を行うことができます。

(2)ストレージ・コンポーネントは、標準的な手順を可能にするようにプログラムされています。ストアドプロシージャが作成された後、再書き込みにストアドプロシージャをSQL文をせずにプログラムで複数回呼び出すことができます。そして、データベースの専門家は、ストアドプロシージャの任意の時点で変更することができ、アプリケーションのソースコードに影響はありません。

(3)記憶手順は、速い実行速度を可能にします。操作はトランザクション-SQLコードが多数含まれているか、複数回、はるかに高速バッチよりも、その後、ストアドプロシージャの実行速度を実行している場合。ストアドプロシージャは、プリコンパイルされているので。あなたが最初の最適化を分析するストアドプロシージャのクエリオプティマイザを実行し、最終的な実行計画を与える場合は、システム・テーブルに格納されています。バッチトランザクション-SQL文をコンパイルして実行ごとに最適化されなければならない、速度が比較的遅いです。

(4)ストアドプロシージャを介してネットワーク・トラフィックを低減することができます。操作関与トランザクション-SQL文のストアドプロシージャは、プロセスを組織している場合は、クライアントコンピュータ上でストアドプロシージャを呼び出すときに、データベース・オブジェクトと操作(例えばクエリなど、変更)については、その後、ネットワークは、単に通話を配信しました声明は、大幅なネットワークトラフィックが増加し、ネットワークの負荷を軽減します。

 

(5)ストレージ・プロセスはを活用するセキュリティ・メカニズムとして使用することができます。ストアドプロシージャを実行してアクセス許可を制限するには、システム管理者は、データへのアクセスに制限を対応する達成することができ、データへの不正ユーザアクセスを防ぐため、データのセキュリティを確保します。

IV。負荷を処理する方法、高い同時実行

1、HTML静的
実際には、我々はすべて知っている、最高の効率、私たちは私たちのサイトのページが最も簡単な方法は、実際に最も効果的であることを実現するために静的なページを使用して作ってみるので、消費量は、純粋な静的なHTMLページの最小であります方法。

2の画像サーバ分離
画像の大流量及び他のオーバーヘッドを最小限に抑えるために、別々に格納された画像は、例えば7牛などの関連プラットフォーム、多数の上に配置することができます。

3、データベースのクラスタリングおよびハッシュデータベーステーブルとキャッシュ

データベース100の同時接続は、データベースは、開始するリーダー、マスタースレーブレプリケーション、データベースクラスタ領域から分離することができ、十分ではありません。また、データベースへのアクセスを減らすためにしようと、データベースはキャッシュメモリキャッシュ、Redisのように使用することができます。

図4に示すように、ミラーは、
ダウンロードを最小限に、要求は、異なる像側の複数に分配することができます。

バランシング5.負荷:
最大Apacheの同時接続1500は、サーバのみを増やすことができ、あなたは、このようなF5サーバとして、ハードウェアから起動することができます。もちろん、ハードウェアのコストが比較的高く、我々はソフトウェア側から開始する傾向があります。

 

(負荷分散)を負荷分散は、それが、スループットの増加透明ネットワークデバイスとサーバの帯域幅を拡張する能力を処理するネットワークデータを強化するために安価で効果的な方法を提供し、既存のネットワークアーキテクチャ上に構築ネットワークの柔軟性をしながら向上させることができますそして、可用性。現在、最も広く使用されているソフトウェアのロードバランシングはnginxの、LVS、HAProxyです。私は3の下で話しているの長所と短所は以下のとおりです。

** nginxの利点は以下のとおりです。**

ネットワークの7層の作業は、あなたが、それは、現在広く普及している主な理由の一つですHAProxy、より強力で柔軟なドメイン名のように迂回戦略のhttpのためのアプリケーション、ディレクトリ構造、その定期的なルールの数を行うことができますこのNginxはそれ自体が機会には、LVSよりもはるかに多くを利用することができます。

ネットワークの安定性にnginxの依存性は非常に小さいため、理論的には、あなたが機能をロードすることができますpingを実行することができ、これは強みの一つであり、ネットワークの安定性に反しLVS比較的大きく依存、私は完全にこの点を理解し、

nginxのは、それをプリントアウトログと基本的に間違っていることができ、より便利に、比較的、インストールおよび設定するには、簡単なテストです。LVSの構成は、テストは長い時間がかかるだろう、ネットワーク上の比較的大きな依存性をLVS。

 

高い安定した負荷圧力を想定することができ、ハードウェアの違いは、同時負荷の量は、これらのLVSよりも相対的に小さく、数万回、一般的にケースをサポートしていません。

nginxのステータスコードに応じた処理、ウェブサーバとして、サーバ障害の内部にポートを介して検出することができるタイムアウトに、戻り、別のノードに要求を再送信すると、エラーが返されるが、URL欠点が検出されたサポートしていません。ユーザーがファイルをアップロードし、アップロードプロセス中だけ処理ノード障害をアップロードされ、例えば、nginxのは、それが大きなファイルをアップロードする場合、別のサーバーの再処理にアップロードし、LVSを直接遮断削減しますまたは重要な文書、ユーザーはそのため不満があります。

nginxのは、それはまた、強力なWebアプリケーションサーバで、ちょうど良いのロードバランサ/リバースプロキシソフトウェアではありません。LNMPまた、近年では非常に人気があり、高トラフィック環境安定性のウェブ・アーキテクチャは、また非常に良いです。

nginxのは、今は逆Webキャッシングとリバースプロキシアクセラレータとしてそれを使用することを検討して、より速く、従来のイカのサーバーよりも、より多くの成熟、そしてスピードを加速します。

nginxのは、真ん中を使用してリバースプロキシとして、このレベルNginxは、本質的に無競争、唯一可能な比較だけnginxのlighttpdのですが、まだ完全に機能nginxのではないのlighttpd、構成がとてもはっきりと読みやすくするために、コミュニティ情報ではありませんnginxのは、アクティブから遠くもあります。

nginxのは、静的なWebページと画像サーバ、この分野でのパフォーマンスとなしの対戦相手としても利用可能です。nginxのコミュニティは、多くのサードパーティのモジュールがあり、非常にアクティブがあります。

 

 

**欠点nginxのは、次のとおりです。**

上記のより小さな範囲は、これはその欠点であるので、nginxのは、HTTP、HTTPS、および電子メールプロトコルをサポートすることができます。

バックエンドサーバーがサポートするためのヘルスチェックはURLのみで検出されたサポートされていないポートを介して検出されること。セッションが直接保有が、解決にip_hashを通じてサポートしていません。

LVS:高性能、高可用性負荷分散サーバーを達成するために、Linuxカーネルを使用したクラスターは、それは非常に良いスケーラビリティ(拡張性)、信頼性(信頼性)と管理(管理性)を持っています。

 

** LVSの利点は、次のとおりです。* *

アンチ負荷容量、使用のための流通ネットワークの4階に取り組んでいることだけで、何のトラフィックは、この機能は、負荷分散ソフトウェアで消費その最強のパフォーマンス、メモリとCPUリソースを決定していないことは比較的低いです。

 

設定はかなりのconfigureに何が本当にありませんので、それは非常にヒューマンエラーの可能性を低減、接触してあまりとらない、欠点も利点である、比較的低いです。

 

理由は、独自の強力な抗負荷容量の安定した、自身がそのようなLVS + keepalivedの完全なデュアルホットスタンバイプログラムが、我々はこのプロジェクトで最も頻繁に使用されるか、LVS / DR + keepalivedのを実装しています。

 

トラフィックは、LVSが唯一の要求を配布していないが、それ自体の流出することはない、これはイコライザーIOのパフォーマンスが大きな流れに影響されないようにすることです。

 

アプリケーションの幅広い範囲、4層であるためLVSの仕事、それは、http、データベース、オンラインチャットルームなどなど、ほぼすべてのアプリケーションのためのロードバランシングを行うことができますので。

 

** LVS欠点は次のとおりです。**

 

ソフトウェア自体は、正規表現の処理をサポートしていない静的および動的な分離を行うことはできません。そして今、この地域の多くのサイトでは強い需要があり、これはnginxの/ HAProxy + keepalivedのが嘘の利点です。

 

サイトのアプリケーションが比較的大きく、そして、LVS / DR + keepalivedのは、より複雑な実装する場合、言葉の背後にあるWindows Serverは、特定のマシンが、そこにあるかの実装と設定だけでなく、保守プロセスがより複雑になると、相対的に言って、nginxの/ HAProxy +はるかに簡単にkeepalivedの。

 

**:** HAProxyは、ことを特徴としています

 

HAProxyは、仮想ホストをサポートしています。

 

それは利点HAProxy nginxのようなクッキーを案内支持セッション保持、のようないくつかの欠点を補完することができ、支持体のバックエンドサーバの状態が指定されたURLを取得することによって検出しました。

 

ソフトウェアのバランスをとるだけの負荷LVS、自身と似たHAProxy;シンプルHAProxyは、並行処理上、それはnginxのに優れている、効率比nginxのから速度の点で優れた負荷分散を持つことになります。

 

HAProxyは、転送のバランスをとるTCPプロトコルの負荷をサポートし、ロード・バランシングがMySQLの上で読むことができ、バックエンドでのMySQLのノードが検出して負荷分散するために、あなたは、負荷分散のMySQLマスタースレーブを行うにはLVS + keepalivedのを使用することができます。

 

HAProxy負荷8種類がありますHAProxyロードバランシングアルゴリズムは、現在特定され、非常に多くの戦略のバランスを取ります:

 

①ラウンドロビンは、簡単なアンケートを表し、これくらいは言った、これは負荷分散を持っている基本的です。

 

重量、提案された注目に従って発現②静的-RR、。

 

③leastconnは、最小の接続処理を示し、まず、フォーカスを提案しています。

 

④ソース、ショー要求元IPは、IP_hashでこのメカニズムは、我々は、提案され注目を集めたセッションの問題を解決する方法として、それを使用し、nginxのに似ています。

 

リクエストURIに従って表さ⑤RI、。

 

⑥rl_paramは、URLのバランスurl_param 'パラメータ要求がURLパラメータ名を必要と示しています。

 

⑦HDR(名)、ロックヘッドショー各HTTP要求のHTTPリクエスト。

 

⑧RDP-クッキー(名)、TCP及びハッシュすべての要求に応じてロックするためにクッキー(名)に従って、表します。

 

** nginxのとLVS比較要約:**

 

ネットワークの7層でnginxの仕事、それはHTTPアプリケーション自体、このようなドメイン名のように迂回戦略、ディレクトリ構造のために行うことができますので、それ自体でnginxの。これは、機会を利用することができるので、比較LVSは、この機能を持っていませんそれははるかにLVS以上である;しかし、nginxのは、これらの機能は、それが役に立つ、LVSよりも高い程度を調整するために、私は多くの場合、タッチタッチ、マルチタッチに、人間の問題の可能性も大きくなります行かせます。

 

ネットワークの安定性にnginxの依存性は大きな利点である限り、pingは、通常のWebアクセスを介していたとして、nginxのもを介して取得することができます、理論的には、nginxの小さいです!内部と外部ネットワークの間でnginxの区別、それはネットワークの外にある場合はノードを所有していると同時に、あなたは、単一のバックアップ回線と同等のものを持っていながら、LVSは、直接的な方法分割を使用して、同じネットワークセグメントになりましたし、LVSサーバ、ネットワーク環境に、より依存しています、保証できるより効果。また、ノート、LVSの必要性は、Visual IP IP少なくとも1以上やって保管機関に適用する、IP自体は一見VIPを行うために使用することはできません。LVSの管理者が行うために、実際にネットワーク通信に関する多くの知識を学んでフォローアップする必要があり、それは簡単なので、もはやA HTTPではありません。

 

nginxのインストールと設定が比較的簡単で、テストも非常に便利です、それをプリントアウトログと基本的に間違っている可能性があるため。LVSのインストールと設定、テストに長い時間がかかるだろう。ネットワーク上のLVS比較的大きな依存性は、多くの場合、ネットワークの設定の問題ではなく構成の問題の成功することはできません、解決すべき問題は、それに応じて多くの問題になりますです。

 

また、nginxの非常に高い負荷と安定に耐えることができますが、負荷と安定性の程度だけでなく、貧しいLVSいくつかのレベル:nginxのはとてもIOとマシンの構成によって制限され、すべてのトラフィックを処理し、バグ自体はまだ回避することは困難です。

 

nginxのは、タイムアウトに返されるステータスコードに応じて、ウェブサーバ処理として、内部サーバの故障を検出することができ、別のノードに要求を再送信するエラーを返します。LVSはまた、モニタに内部サーバのサポートldirectdに現在あるが、LVS原理は、要求を再送信することができません。ユーザーがファイルをアップロードし、アップロードプロセス中だけ処理ノード障害をアップロードされ、例えば、nginxのは、それが大きなファイルをアップロードする場合、別のサーバーの再処理にアップロードし、LVSを直接遮断削減しますまたは重要な文書は、ユーザーがそれゆえに悩まさことがあります。

 

要求の非同期処理のためにnginxのあなたがapacheの海外直接サービスを使用した場合、Apacheサーバは大量のメモリを取り上げると解除できない狭帯域のリンクをたくさんして、負荷を軽減するためにノードサーバを助けることができ、使用1よりnginxのは、Apacheプロキシ、これらの狭帯域のリンクを行いますnginxのは、Apacheは、このようにリソース消費のかなりの量を減らし、あまりにも多くの要求を上重ねないであろう、ブロックされます。この使用はまた、それ自体が大きな助けとまだapacheの上にないキャッシュに設定されているイカていても、同じ効果を持つイカ。

 

nginxのは、HTTP、HTTPS、および電子メール(電子メール機能はほとんど使用されません)をサポートし、この時点ではサポートLVSアプリケーションは、nginxの以上になります。使用時には、ほとんどのフロントエンドで採択された一般的な戦略があるLVS、である必要があり、DNSがLVSイコライザー向けるべき、LVSの利点は、それが理想的に適し、このタスクを実行するために作ります。IPを交換する障害が続く場合は、重要なIPアドレス、最高の左LVSは、このようなデータベースのIP、WebサービスサーバのIPなど、時間の経過とともに、これらのIPアドレスは、表面の使用が成長するよう、ホスティング。ホスティングLVSへの重要なこれらのIPは最も安全であるので、これの唯一の欠点は、VIPの数は複数とすることが必要とされるということです。nginxのLVSは1つがnginxの関数を使用することができ、ノードマシンとして使用することができる、第二、nginxの性能を利用することができます。もちろん、このレベルはまた、nginxのより弱いたくさんのイカ、イカの関数として使用することができ、パフォーマンスがnginxのにやや劣っています。nginxのもだけnginxのLighttpdのを振るために、このレベルNginxは、本質的に無競争、真ん中を使用するプロキシとして唯一の方法を使用することが、まだnginxのが行うことができます完全に機能していないのlighttpd、設定はそれほど明確ではないと簡単に読むことを。また、中間レベルのプロキシIPも重要であり、その中間のエージェントは、VIPを持っており、LVSは完璧なソリューションです。サイトはnginxのは、マシン多くは、あなたがDNSのポーリングを使用することができれば、より多くのマシンをLVSのかかる、または、完全に可能であると、(10未満万人が毎日PV)が比較的小さい場合には具体的な用途としては、具体的な分析を持っています;大規模なサイトや重要なサービス、マシンはLVSの多くを使用することを検討する際の心配はありません。

 

より多くの情報を学び、ご覧ください。

テンセントT3-T4標準ブティックDaquanのPHPアーキテクトのチュートリアルディレクトリは、限り、あなたは読んで保証賃金は(継続的に更新された)より高いレベルに上昇します

ヘルプみんなに希望の上に、私はいくつかの情報をコンパイル上昇、を含むを開始する場所を多くのPHPerは、常に先進的な時間内にいくつかの問題やボトルネックが発生し、方向音痴は、私から知っていませんより多くのビジネスコードを書きますこれらに限定されない:分散アーキテクチャ、拡張性の高い、高性能、高同時実行、サーバーのパフォーマンスチューニング、TP6、laravel、YII2、Redisの 、Swoole、Swoft、カフカ、MySQLの最適化、シェルスクリプト、ドッカー、マイクロサービス、nginxの、など高度な乾燥品のために必要な、より高度な知識が共有への皆のための無料することができ、追加する必要が私の公式グループにここに

公開された265元の記事 ウォン称賛36 ビュー10000 +

おすすめ

転載: blog.csdn.net/weixin_43814458/article/details/105253584