Java EEアプリケーションについて読んでいるときに、エンタープライズスケーラブルであると言う人を見たことがありますが、それが本当に何を意味するのか混乱していますか?
Java Webアプリケーションは主に作成されており、大規模なインターネット人口に対応する必要のある今日の世界のトラフィックの多いWebサイトではなく、エンタープライズ管理ツールの構築に適していますか?
「インターネットスケーラブル」という用語は、特に1つのことを意味すると思います。それは、ウイルスの成長に対応するために成長する準備ができているということです。インターネットアプリケーションを構築するすべての人の夢は、ユーザーの熱心な支持を通じて、口コミを通じて神経に触れ、成長することです。 Twitter、Facebook、多くの例があり、事実上すべてが需要を満たすためにソフトウェアとインフラストラクチャを成長させるのに苦労しています。ダウンタイムは有毒であり、インターネットのスケーラビリティのレッスンは、急速に成長する準備ができているか、それを詰め込む準備ができていることです。
エンタープライズスケーラビリティは別の獣です。ビジネスはバイラルに成長しません。採用された各人は、通常、少なくとも数週間または数か月の期間にわたって、組織に3〜4人以上の人を連れてくることはありません。ただし、企業にはWeb上のクールなアプリとは異なる他のニーズがあり、それらのニーズを満たすためのアプリケーションの構築とインフラストラクチャのサポートも困難です。
そうは言っても、Javaで記述されたアプリケーションの性質に固有の、両方の種類のスケーラビリティーの達成を妨げるものや、どちらかの種類の傾向があるものはないと思います。真にスケーラブルなアプリケーションを構築することは、一般に、これらのスケーラビリティのニーズを満たすために、優れたアーキテクチャの原則と計画を最初から事前に行うことと関係しています。
エンタープライズスケーラビリティは(少なくとも私はこのように認識しましたが)非常にあいまいな用語です(インターネット規模と同様)。どちらも実際には同じものを指します。つまり、変化する要件、負荷、そして場合によっては単純な水平方向のスケーラビリティに対応することができます。
Java Webアプリケーションは主に作成されており、大規模なインターネット人口に対応する必要のある今日の世界のトラフィックの多いWebサイトではなく、エンタープライズ管理ツールの構築に適していますか?
Java EEは、大量のWebサイトには一般的に使用されていません。代わりに、メッセージングの広範なサポートと商用サポートの可用性を組み合わせた強力なトランザクションモデルにより、保険会社や銀行により適しています。
もちろん、これはJavaでスケーラブルなWebサイトを作成できないという意味ではありません。必要に応じて、Java EEの特定の部分を回避する必要があります。たとえば、EnterpriseJavaBeansおよびJava (シンプルで安価な)スケーラビリティが必要な場合は、Persistence2.0。
例を挙げると、eBayはJavaを使用しており、ORMの独自の実装と、非機能要件を満たすための楽観的なトランザクションモデルを使用しています。
番号! Java as.NETまたはPHP(十分に開発されている場合))は、多くのクライアント要求を処理するためにスケーラブルなアプリケーションを提供できます。
エンタープライズスケーラブルとは、おそらくこれらの要求に応答するエンタープライズサーバーの容量を指します。この種のスケーラビリティは、言語ではなく、ハードウェア、DB、およびその他のツールに依存すると思います。
ええと、皆が意見を持っているので、私もどうですか。
エンタープライズ規模-上記のように、保険会社や銀行などに適しています-これは、多くの要求、信頼性、トランザクション(ACID)、正しいシーケンス順序、適時性、一貫性のあるリレーショナルデータベースなどを意味します。
インターネット規模-膨大な数のリクエスト、強制されていないトランザクション(ACIDが少ない)、順序付けがない、一貫性がない(冗長性が緩く同期されているため)、リレーショナルデータベースの代わりに構造化ストレージなど。
Google AppEngineのようなインターネット規模のテクノロジーとEJBのようなエンタープライズ規模のテクノロジーの違いを比較できます。
エンタープライズアプリは、中小規模のショップが他のアプリと同じサーバーで実行できるように十分にスケーラブルである必要がありますが、大企業は、地理的に分散した数千または数千のユーザーがいる数十または数百のサーバーで実行できます。ここでの課題は、データセンター間でのデータの同期の維持、自動フェールオーバーと回復、および他のビジネスシステムとの統合です。データの整合性は大きな問題であり、トランザクションの設計には多くの開発作業が費やされます。
インターネット規模のアプリケーションは、数十万(または数百万)のユーザーがいる世界中の数百または数千のサーバーで実行できる必要があります。ここでの課題は、トラフィックルーティングと最小限の状態維持です。多くの場合、共有データの忠実度はそれほど重要ではなく(ステータスの更新を見逃しても大したことではありません)、応答時間は主要なパフォーマンス指標です。
違いを判断するために、トランザクションの分離、言語設定、またはその他のハードウェアソリューションを提案する回答があります。
エンタープライズ規模 =全従業員で使用するために設計されたシステム&|顧客人口。通常、数十万人以下のユーザー。
インターネット規模 =内部ユーザー集団以外のすべての人を処理するように設計された、または少なくとも準備が整ったシステム。
オンラインバンキングは、エンタープライズインターネット規模のエッジと見なすことができますが、しばらくの間、延期されていないトランザクションを評価していないと思いますか?これらの間にソリューションを設計する際に使用されるいくつかの手法がありますが、厳格なルールはありません。
サーブレット/ JSPはJava EEの一部ですが、インターネット規模のシステムに 'emを使用することを躊躇しません。逆に、インターネット規模に近いシステムがUnixでプライマリとして処理されるのを見てきました。シェル(ああそうタブー)図を行きます。