会社の Web サイトは最近改訂されており、他の関連製品もアップグレードおよび改訂する必要があります。 同社の戦略は「クライアントのために PHP を使用する」です。サーバーには Java を使用します。具体的には、「プロジェクトのコントローラー内の基本的な検証データは、PHP を使用してソートおよび出力されます (PHP で開発されたクエリ クラス インターフェイスも少数あります)。」、「Java 側はさまざまです。ビジネス ロジックと操作データベースのインターフェイスへのカプセル化。PHP 側の呼び出し」。私は PHP なので、主なパラメーターは PHP 側のエンコーディングです。インターフェイスのカプセル化にはインターフェイスのカプセル化の利点があります。これに関する私の最近の開発経験は次のとおりです。
第一: Web サイトのアップグレードや改訂時に多くのビジネス ロジックを変更する必要がなく、フロントエンドがどのように変更されても、データはあまり変更されず、古いインターフェイスを取得できます。
第二:カプセル化後のインターフェイスはよりモジュール化されており、インターフェイス層を担当するプログラマーがコーディングとテストを担当し、PHP 側がデータの取得を担当する、明確な責任。 3 番目: 同社のドキュメントは非常に強力です。ドキュメントとデータディクショナリには、インターフェイスのテーブル構造とパラメータの戻り値などが明確に記述されており、オフィスプロセスがより標準化されています。その4:便利、シンプル、明確です。
?
最近、私の元クラスメートの CTO と話をした後、多くの企業がこのモデルをアーキテクチャ プロジェクトの開発に使用していることがわかりました。この種のアーキテクチャ展開の利点は依然として大きいです。はい、他の人の記事を転載して、その利点と欠点について詳しく話しましょう。
次の内容は、
http:// から転載します。 www.zhihu.com/question/20314377/answer/14801579
// テクノロジーは日々変化しています。答えを更新せずにしばらく放置すると、古くなってしまいます。
2 週間前に ThinkInLamp の PHP アーキテクト カンファレンスに参加した後、午前中ずっとニアオ兄弟の話を聞いて、とても感動しました。PHP 業界は方向性が不明確で、2 ~ 3 年を無駄にしましたが、ようやく再び立ち上がってきました。 。
実際、Java の再起動の問題を含め、現在では多くの解決策がありますが、何はともあれ、デュアルプロセスのロード バランスの切り替えは簡単に実行できます (ただし、コールド スタートの問題が発生する可能性があります)。
PHP [email protected] PHPNG の取り組みについては、JIT が間もなく登場し、ZVAL も最適化され、特にデータ分析で最も問題となる配列定数の参照と配列構造のサイズが解決されました。必然的に、未来にはより広い空間が存在します。 [email protected] Swoole のようなソリューションは、fastcgi.com が提案する標準 FastCGI ソリューションを真に実装しており、起動するたびにコンテキストを再構築してデータを初期化するコストを排除し、バックエンド/Web サーバー/TCP または UDP サーバーも使用できます。他の働き方。
しかし、これらによって異種言語環境が消滅したわけではなく、業界ではますます一般的になってきています。 最も重要な点は、オープンソース業界の台頭により、より多くのより良い選択肢が与えられ、アーキテクチャの開発がますます容易になり、非同期対話やその他の方法を通じて分離する必要性がますます高まっているということです。 非コア モジュールやミドルウェアに異種言語を使用するオープン ソース プロジェクトでは、パフォーマンスの限界を超えたり、開発や改善を伴う特別なビジネス要件が発生したりすることがよくあります。
モジュールを階層化して分割した後、独自のビジネス シナリオやニーズに応じて、さまざまなモジュールをさまざまな言語で実装することがますます一般的になりました。もちろん、その理由の 1 つは会社の構成です。技術チーム。 PHP と Java は Web 開発において最も高い市場シェアを持っているため、これらが組み合わせて使用されることが多いのも不思議ではありません。 現在、Python/NodeJS/Go などの多くのオープンソース プロジェクトが異種システムの軍隊に加わりました。
// 元の回答はおそらく 2012 年頃に書かれたと思われます。
まず第一に、なぜ他ではなく PHP と Java なのか。これは、両方のオープンソース コミュニティが非常に活発であり、両方とも Web 開発に適しており、運用と保守において統一的に管理できるという事実と大きく関係しています。
.Net の市場シェアは低くはありませんが、Windows や SQL Server のライセンス料金、オープンソース コミュニティの活動の低さなどのさまざまな問題により、相対的に考慮されていません。 Web 開発に適した TIOBE のトップ 10 言語には、Python、Perl、Ruby も含まれており、その中で、Perl は主にサーバー スクリプトの分野で多くのアプリケーションが存在する可能性があります。ウェブ上で再び昨日になります。 Python は最近増加傾向にありますが、ドキュメントが不足していて採用が比較的難しいため、当面は大規模 Web サイトの主流の選択肢にはならないでしょう。ルビーは言うまでもありません。
2 つの言語の違いをもう一度見てください。 PHP は柔軟性があり、すぐに開始でき、変更も簡単で、公開も簡単です。欠点としては、間違いが起こりやすいこと (スペルミス、SQL インジェクション、アップロードの実行など)、実行効率が低いことです。グローバルキャッシュが不足している。 Java の利点は、安定性と信頼性が高く、操作効率が高く (特に JIT の出現後、その差はさらに大きくなりました)、間違いを犯しにくい (強い型付け、プリコンパイル、例外をインターセプトする必要がある) ことです。など)、開発とリリースの効率が比較的低いことが欠点です。優秀なエンジニアは上記の問題をある程度変えることができますが、一般的に、犬と同じくらい多くの専門家を擁するドリームチームがどこにでも存在できるのでしょうか?
次に、MVC 階層の観点から見ると、一般的な Web サイト プロジェクトの開発サイクルにおいて、要件の変更と調整が最も頻繁に行われるのはビューであり、次にコントローラー、最後にモデルが続きます。これは非常に簡単に理解できます。何もすることがないのに、誰が毎日データ構造を変更するでしょうか。多かれ少なかれ、バージョンがアップグレードされるたびに制御構造を変更する必要があります。 Viewさんの場合、BU、PM、UEDが2日間変わらないのは、まとめて年休を取っているからではないでしょうか?
現時点では、RPC テクノロジーは十分に成熟しているため、開発者は何も考えずに機能開発に集中できます。アーキテクチャ上のプラットフォームや通信の詳細の違いについてはあまりにも重要です。これは、大企業で 2 つの言語を同時に使用するソリューションでも、それほど複雑さや作業負荷がかからないことを意味します。もちろん、このためドキュメントの量の下限は大幅に引き上げられましたが、実際、ほとんどのチームはこのことを喜んで聞いています。「ドキュメントは重要だが、毎日時間がない」などとは言わないでください。他の同僚はどうすればよいでしょうか。書かなかったら協力しますか?
一般に、PHP を使用すると、ユーザーのフロントエンドに近いため、フロントエンドへの頻繁かつ些細な更新をより速く完了でき、さまざまなニーズの変化に自由に対応できます。ページ構造の調整、ユーザー入力コンテンツの基本的な検証、ユーザー操作のみに関連する単純なロジックなどはすべて、PHP を使用した開発に適しています。ページの変更は、Smarty などのテンプレート テクノロジーを通じてフロントエンド チームに移行することもできます。基本的なビジネス ロジックとデータ更新は Java を使用して開発されており、再利用性、パフォーマンス、スループットを効果的に向上させ、セキュリティの問題を回避できます。開発効率の多少の低下は保守性の向上につながり、基本的なビジネスロジックの調整は全体的に修正することが多く、レイヤーごとのテストと確認を経てリリースできるため、リリース速度が遅いことは問題になりません。 。
したがって、大規模な Web サイトでは、フロントエンドに PHP、バックエンドに Java が使用されます。Java は、採用と保守が容易で、システムが安定し、パフォーマンスが高く、セキュリティが大幅に向上します。コードの再利用とドキュメントの完全性も向上しました。上記の利点をすぐに利用できる場合、建築家としてより幅広い知識を必要とすることはまったく問題ありません。
さて、後ろの学生が良い質問を追加しました。なぜ PHP だけを使用しないのか、それとも Java だけを使用しないのですか?最初にこれについて少し触れましたが、なぜ PHP Java なのかという疑問があったため、投稿する前に削除しました。実際、多くの企業、特に中小企業は、チーム組織が過度に複雑にならないようにするために、単一の言語を使用することを好みます。
実際には、単一のソリューションで適切な分離を実現でき、PHP はサービスも提供できます。実際、パフォーマンスの問題は、言語の違いではなく、アルゴリズムとアーキテクチャによって引き起こされることがよくあります。 Velocity や JSTL なども優れた分離ソリューションです。
しかし、現実は多くの場合、理想よりもはるかに貧弱であることは誰もが知っています。これらの解決策は、高圧下では多くの問題を明らかにし、バイリンガリズムの利点を反映しています。これらは実際に上で述べたものであり、変えるのが難しいことの一部を詳述しています。ポイント:
1. PHP の動的スクリプト言語の特性により、解析速度を確保するために、動作環境を確立する前にクラス、関数、および定数を繰り返し実行する必要があります。 ; アプリケーション FastCGI が使用されますが、他の言語とは異なり、プロセスを再利用してリクエストを処理するだけです。初期化後は、FastCGI インターフェイスを通じてデータが取得され、対応するインターフェイスでデータが返されます。性能面で本来の性能を取り戻すことは基本的に不可能である。さらにひどいのは、現在JITブランドのスポーツカーに乗っているJavaである。 さらに、システムレベルの共有データはサポートされていないため、コアデータは一度初期化して、拡張機能やミドルウェアを使用して再利用する必要があります。
2. PHP では間違いが非常に起こりやすく、見つけるのが難しいという事実は、公式の Zend Studio を使用したとしても変わりません。プログラムの品質が高く、重大なエラーがないことを確認する必要があります。十分な経験、十分な厳格さ、責任ある QA が必要です。 Taobao の Huang Shang 氏はかつて IDE について冗談を言いました。 「ミドルウェアの不足」というジョークの背後にある理由は、主に多くのミドルウェアのサポートがより広範囲になり、PHP に恩恵をもたらしたため、近年大幅に改善されましたが、その開発の根幹は依然として C および Java コミュニティにあります。 。パフォーマンスとエラーの発生しやすさは言語の特性に起因する技術的な問題であり、柔軟性と速度の代償として根本的な改善を期待することは困難です。
3. Java の世界には JSTL、Velocity、Freemaker もありますが、PHP の柔軟で強力な動的機能、豊富な関数とクラス ライブラリ、簡単な学習コスト、とんでもないドキュメントに比べれば、それは単なるクズです、それはクズです! JSTLを変更した後、コンテキストを再起動する必要がありますか?キャッシュが無効になっている場合でも、Velocity を再起動する必要がありますか?キャッシュがオンになっていると Velocity のパフォーマンスが低下する可能性はありますか?これらを無視したとしても、特定のデータ検証ルールを調整する場合、アクションを再起動する必要がありますか?
実際の作業におけるパフォーマンスの問題は、優れたアーキテクチャによって解決できます。間違いやすい問題は、フレームワークと仕様、および包括的なテストによって解決できます。ミドルウェアのオプションは少なくなりますが、実際には、あるべきものはすべて揃っています。 Java の柔軟性はそのままです。OSGi などはもちろん、非常にイライラした場合でも、ノードを削除して再起動し、完了後にノードを再インストールするという戦略が考えられます。まだ動作します。
したがって、多くの単一言語の技術チームが存在することがわかります。この問題の実際の考慮事項は、チーム自体の特性や蓄積などです。バイリンガリズムを使用する人は、バイリンガリズムを使用する理由も知っており、バイリンガリズムを使用しない人も、自分の道を歩む方法を知っています。最後に一言: 二重言語ソリューションを使用する理由がわからない場合は、基本的に検討する必要はありません。
?
?