PHP中文网2017-04-18 09:41:50
まず、システムが分散を使用する理由を理解する必要があります。
インターネットの発展に伴い、従来の単一プロジェクト プロジェクトの多くのパフォーマンス ボトルネックがますます顕著になってきています。パフォーマンス ボトルネックにはいくつかの側面がある可能性があります。
1. アプリケーション サービス レイヤー: ユーザーの数が増えると、同時実行の量が増加し、単一のプロジェクトでは、このような大量の同時リクエストによって引き起こされるパフォーマンスのボトルネックに耐えることができなくなります。
2. 基礎となるデータベース層: ビジネスの発展に伴い、データベースへの負荷が増大し、パフォーマンスのボトルネックが発生します。
上記2点に関しては、2つの側面から解決できると思います。
アプリケーション サービス層:
アプリケーション サービス層にはいくつかのソリューションがあります:
アプリケーション システム クラスター:
最も単純なアプリケーション システム クラスターは、Tomcat クラスターなどのサーバー クラスターです。システム クラスタを適用する場合、より顕著な問題はセッション共有です。セッション共有はサーバー プラグインによって解決できます。もう 1 つは、redis などのミドルウェアを通じて実装することもできます。
サービスベースの分割:
サービスベースの分割は、現在非常に人気のある方法です。今、誰もがマイクロサービスについて話しています。従来のプロジェクトをサービスに分割することで、サービスの独立した分離が実現され、単一のサービスを水平方向に拡張できます。サービス分割で遭遇する古典的な問題は、分散トランザクションの問題です。現在、一般的に使用されている分散トランザクション ソリューションとして、メッセージの結果整合性、TCC 補償トランザクション、ベストエフォート通知がいくつかあります。詳細については、このブログの分散トランザクション ソリューションを参照してください。
基盤となるデータベース層:
システムのパフォーマンスのプレッシャーがデータベースに現れる場合は、読み取りと書き込みの分離、データベースなどのソリューションで解決できます。この分野については私には十分な経験がないため、他のドキュメントを参照してください。
Mycat データベース シャーディングおよびテーブル シャーディング ミドルウェア
MySQL 高可用性読み取り/書き込み分離クラスター
PHP中文网2017-04-18 09:41:50
お誘いありがとうございます。私はマスターではないので、質問者様の質問は大きすぎて答えるのが難しいと感じています。
しかし、私の知る限り、技術面接は一般に徐々に行われ、面接官は候補者の技術システムの深さをテストするため、理論的には、トピックについて話せば話すほど、より代表的なものになります。あなたは候補者であるほど能力が優れています。 高同時実行性 および 分散 処理の問題の多くは、実際には経験的な問題です。これは、異なるビジネス シナリオや異なるデータ量の高同時実行性の処理状況はまったく異なり、完全に普遍的な解決策はないためです。 。
したがって、面接中に、面接官が説明したビジネス シナリオを理解することは非常に重要です。これは、パフォーマンスのボトルネックを分析するための重要な情報でもあります。バレル原則によれば、特定の重要なポイントにボトルネックが存在するはずです。
簡単な例を挙げると、ビジネスが成長するにつれて、データベースに直接接続されているサーバー クラスターにパフォーマンスのボトルネックが発生しました。これをどのように解決する必要がありますか?
このとき、まずパフォーマンスのボトルネックがどこにあるのかを分析する必要があります。まず、データベース自体の設計が合理的であるかどうか、インデックスが役割を果たしているかどうか、SQL 実行計画を分析し、データベースが可能かどうかを検討します。水平または垂直に分割してストレスを共有します。
分散型の読み書き分離データベースが利用できるかどうかも分析する必要があり、データの同期やデータの分散をどのように行うかなどが課題となります。
データベース層が分析された後、キャッシュはクエリのパフォーマンスを向上させるために使用されます。これには、キャッシュ ヒット率の問題、キャッシュ更新の問題、キャッシュされたマルチノード ハッシュの問題などが含まれます。
一般に、ビジネス シナリオを理解してから、特定の問題に対する解決策を考え出す必要があります。たとえば、新浪微博はプッシュ モードを使用しますか、それともプル モードを使用しますか?プッシュモードであれば、数千万人のファンを持つビッグVがWeiboの投稿を数千万人に向けて投稿するのでしょうか?プル モードの場合、1 人が多数のユーザーをフォローしすぎると、毎回パフォーマンスの問題が発生しますか?
伊谢尔伦2017-04-18 09:41:50
分散にはさまざまな種類があります。たとえば、プロジェクトを複数のモジュールに分割すると、各モジュールが rpc 呼び出しを通じて全体の作業を完了するため、これは分散されます。または、キャッシュ用のメモリがそれほど多くない場合は、分散型の Redis クラスターを構築することもできます。データベースだけでは現在のデータ量や同時実行性に対応できない場合は、クラスターを分割することもできます。データベースをテーブルに変換し、JTA を介してトランザクションを実装すること、さらにログの同期、負荷分散、データのバックアップを保存するための HDFS の追加、ログの保存、ログの分析と検索のための eslaticsearch の追加についてすべて議論できます。
PHP中文网2017-04-18 09:41:50
誰かが一般的な質問をしたとき、回答者が一般的な質問に従っていると失敗します...答えるときは論理的であることをお勧めします。
私だったら、次の 2 つのことを行います:
1. 以前に行ったプロジェクトを見つけて、ボトルネックについて彼と話し合い、次に理論的な知識を導入し、最後に解決策を提示します。このアプローチにより、自分自身について話しやすくなり、面接官とのやり取りが最適になります。会話中の面接官の質問に注意を払い、面接官が何を質問しているのかを明確に確認してください
2. 2 番目のアプローチは、最初にカードを見せて、トラフィック負荷などのより古典的な分散問題を明らかにすることです。ビジネス保証。 。 。 。次に、問題に対するビジネス シナリオを示します。