スタンダード版 | エンタープライズ版 | |
---|---|---|
ColdFusionインスタンス(実行環境) | 1 | 複数(*1) |
エンタープライズマネージャー | × | ○ |
クラスタマネージャー | × | ○ |
コネクタレベルのクラスタリング | × | ○ |
Session変数の外部(Redis)保存 | × | ○ |
スタンダード版は、1つのColdFusion インスタンス(実行環境)で運用中のWeb サイトやWeb アプリケーションのリクエスト対応、JavaScript やWeb サービス、Flash / AIR からの呼び出し対応、メール送信やスケジュールタスク等の内部呼び出しの対応などすべてを処理します。これは中程度のアクセス数のWebアプリケーションを提供するためのソリューションとしては十分なものですが、アプリケーションの1つに問題が起こると、残りすべてのアプリケーションに影響を及ぼす可能性があるなど、可用性・信頼性には不安が残ります(例えば、サーバーが応答しなくなりColdFusion の再起動が必要になるなど)。
この問題を防ぐためには、個々の機能やアプリケーションを調整できるよう、機能ごとに別々にサーバーを設置してColdFusionをインストールするか、ハードウェアロードバランサー配下に複数のColdFusion サーバーに設置してエラーが発生しても他のサーバーに影響しないようにすることでした。これは複数のColdFusion のライセンスをはじめ、余計な経費や管理の手間がかかりました。
エンタープライズ版は、1 つのColdFusion インストールで複数の ColdFusionインスタンスを実行できます。ColdFusion をインストールした後、設定画面からColdFusion インスタンスの増減や、個々のインスタンスの起動・停止を制御できます。さらに、JVM(Java Virtual Machine) の設定やColdFusion 設定(カスタムタグ、 ColdFusion コンポーネント、Java クラス、データソース、他)もインスタンスごとに行え、他のColdFusion インスタンスに影響を及ぼすことなくそれぞれを独立して動作できます。
一つのColdFusion インスタンスですべてのアプリケーションを実行している場合、アプリケーションの問題が互いに影響しあう可能性があります。また、不適切にコーディングされたページが実行された場合や、誤った外部呼び出し、割り当てメモリやJVM への過負荷などでColdFusion インスタンスの性能が低下すると、すべてのアプリケーションに影響を与え、全く機能しなくなることがあります。また、サービスの再起動もすべてのアプリケーションで、サーバーが再起動するまでの間利用できなくなります。
複数のサーバーインスタンスが動作できるColdFusion エンタープライズ版を使用すれば、こうした問題が軽減されます。機能ごとにアプリケーションやバッチ処理などを互いに分離でき、独自のサーバー上で実行しているかのように効果的に扱われる事に加え、インスタンスごとに停止や再起動も行えるため、高い可用性が維持できます。
一つのColdFusionインスタンスで運用を行う場合、ColdFusionの各種設定を行うColdFusion Administratorも共通で使用する事になります。これは、一人の作業者が誤って他のアプリケーションに影響を与える設定変更を行ったために、そのアプリケーションの動作に致命的な影響を与えるだけでなく、デバッグ情報を見せる必要の無いユーザーに開示したり、予期しないセキュリティを危険にさらす可能性もありました。
ColdFusionインスタンスを複数に分けることによって、それぞれ独自の ColdFusion Administrator の設定が可能です。ColdFusionインスタンスごとにAdministratorの設定やログインを分けることができ、他のインスタンスに影響を及ぼすことはありません。カスタムタグ、 ColdFusion コンポーネント、Javaクラス、データソースといったリソースは、アプリケーションごとに安全に隔離することが可能です。
また、アップデータの適用もColdFusionインスタンス単位で選択できるため、先行して、特定のColdFusionインスタンスのみアップデートをあてて動作を確認する事などができます。
複数のアプリケーションを運用する際、アプリケーションによって、データベース処理の負荷が重いものもあれば、大量のJava オブジェクトを統合するもの、さらには長時間の処理を定期的に実行するもの(例:長時間の日次タスクスケジュール)などがあります。複数インスタンスで用途に応じてアプリケーションを分けることにより、同時リクエスト数やJVMヒープサイズ、クラスパスなどをそれぞれで調整でき、例えば長時間のタスクスケジュールを実行するプログラムを別のインスタンスに分けて、通常のアプリケーションの処理まで圧迫される事を回避したり、タイムアウト時間などをインスタンスごとに適切な時間に設定したりすることが可能です。
また、JVMレベルで分離されるため、アプリケーションで使用するメモリもそれぞれ独自のインスタンスで隔離されることで、Server変数、Application変数、Session変数などの共有スコープのセキュリティも確保されます。デベロッパーは、同一サーバー上の他のアプリケーションが重要な値を上書きする可能性を心配することなく、これらの共有スコープを使用できます。
複数の物理サーバーをハードウェアベースのロードバランサーでクラスタ化し、あるマシンで障害が発生したら振り分け先から除外するなど、可用性や信頼性、性能を維持する方法が広く用いられています。これは、主にハードウェアベースのロードバランシングソリューションを使用して実現されています。
それに似たソリューションとして、ソフトウェアベースで簡易的なクラスタリング機能を提供するJEE サーバーも数多く存在し、ColdFusion エンタープライズ版にも複数のインスタンスを一つのクラスタとして定義する設定が用意されています。この機能を用いると、複数の ColdFusion インスタンスを一つのアプリケーションとして運用することができ、アプリケーションフェイルオーバーを利用することができます。
さらに、最新のColdFusionエンタープライズ版では、Session変数の保存先をRedisに指定でき、複数のインスタンスからSession変数を外部参照することや、J2EEセッション機能を利用したセッションレプリケーション機能なども利用が可能です(Session変数の利用頻度やインスタンス数によっては従来のClient変数による外部リポジトリへの保存が向いている場合があります)。
複数サーバーインスタンスの機能は、ColdFusion MX7以降のColdFusion エンタープライズ版より機能が提供されていましたが、当時は使用するための多くの検討が必要でした。現在のバージョンでは大幅に改善されています。