Gleyzer両氏によって共同開発されました。2019で、同言語の発表を行いました。InfoQはPurdy氏に言語と、氏らが解決を目指した問題について聞きました。設計/アーキテクチャアジャイルマニュフェスト:ソフトウェアアーキテクトの視点ソフトウェアアーキテクトの役割と責任はアジャイルソフトウェア開発のためのマニフェストの価値と矛盾していると見えますが、優れたアーキテクトはアジャイル開発チームをサポートするテクニックを見つけています。Streamingは、ストリーミングデータのためのSQLライクなインターフェースを提供します。Streamsによって、Redisがストリーミングデータを複数のプロデューサとコンシューマの間で消費、保持、配信することができるようになります。ソフトウェア開発のマニフェストたゆまず息もつかずに市場に突進することで、会社を静かに消滅の崖っぷちへと追い込みます。それは設計してコードを書く方法を再考する時です。簡単さへの投資は、速さへの投資です。簡単さは知的財産の主鉱脈でもあります。競争上の優位性は、一度失ったら、もう一度手に入れることはほとんど不可能です。Buytaerts氏が過去10年間にわたって、企業がDevOps採用のハイプサイクルをくぐり抜け、変革に対する誤解を解消する過程を支援してきた経験について語ります。FrameworkのWebアプリケーションスタックの構成要素です。Citizen)にします。ステートフルなデータ、つまり、要求、速報、流れ、会話などに対するさまざまな適用範囲を導入することで、ステートフルなWebアプリケーションを開発する新しい方法を提供しています。これは、アプリケーション状況の管理方法をカスタマイズするための機能拡張の要点も提供しています。多数のJVMにわたってクラスタ化することで、Springを基本にしたアプリケーションの利用頻度を高めるランタイムです。Flowのためのトランスペアレントで宣言型のクラスタ化を直接サポートします。Springの概要を述べ、その後、ステートフルで、対話型のスケーラブルな高可用性Webアプリケーションを書き込みできる新しい特質を登録するために、これらの技術を統合的に用いる方法を示します。FrameworkのWebアプリケーションスタックの構成要素です。Flowは、他のアプリケーションと関係なく設定され、再利用された内蔵タイプのモジュールとして定義することで、Webアプリケーションでの論理的な流れを一級市民nにします。MVCやStruts、あるいは、JSFなどのフレームワークで手軽に利用されています。ページフローを定義し構成するタスクのために特別に開発されたドメイン特化言語(DSL)を利用して、ページフローが構成されます。現在のインプリメンテーションはXMLとJavaです。Flowによって、ステートフルなデータ、すなわち、いろいろな利用事例や要件に適合する要求や速報、流れ、会話などに対するさまざまな適用範囲を導入して処理状況が把握できるWebアプリケーションを開発するときに、柔軟性とパワーが与えられます。リリース1.0の非常に興味深い特徴の簡単な概要を以下に示します(InfoQのリリースノートより)(参考記事・英語)。多くの場所にわたってその論理を分散せずに、検索プロセスなどのようなアプリケーションタスク用制御機構論理すべてを一箇所で定義する。簡単な部分から価値ある制御機構モジュールを作るために、全体的なフローを組み立てる。詳細なif/else文ブロックをコーディングすることなく、自然なオブジェクト指向のリニア・プログラミングモデルで厳密なユーザーナビゲーション規則を実施する。フローが終わる、あるいは、失効するとき、フローを実行している間に割り付けられたメモリーが自動的にメモリー自身をクリーンにする。最適な貴社ベースのWebフレームワークを用いたServlet環境で実行するために、フローを配布する。MVC、JSF、他)を変更する。同時に環境を変更し、フロー定義の変更を必要とせずに、たとえば、JUnit試験からPortletに進む。コンテナを再起動することなしに、開発している時にオンザフライでアプリケーションのナビゲーション規則を発展させる。特注のコーディングがない的確なブラウザボタンのサポート(戻る、送る、復元する)を受け入れる。4つの管理された適用範囲、すなわち、それぞれ明確な意味を持つ、要求、速報、フロー、会話のどれかにタスクデータを保持する。コンテナなしで、切り離してフローを試験する。配布する前に、アプリケーション制御論理が正常に機能していることを確認すること。2.0で、フローナビゲーション論理を図表を用いて視覚化し、編集する。面白そうですか?今までのところは概念と理論だけでしたが、これがすべて実際にどのような結果になるかすぐ調べて見ましょう。それでは、そのままこの問題に注目しましょう。企業でのスケールアウトと高可用性の必要性クラスタ化が、企業向けアプリケーション開発の世界でますます重要になっています。従って、以下に示すような課題に引き続き開発者が取り組む必要があります。単一ノードの他にアプリケーションを拡大してスケーラビリティを強化するにはどうすればよいか。どのようにすれば、高可用性を保証し、ユーザーの単一障害点を排除し、SLA(サービスレベル合意書)を満たしていることを確認できるか。予想能力と高可用性は、ビジネスを支援するために、製造されたアプリケーションが示す必要がある操作上の特性です。いくつかの会社で、アプリケーションに99.9999パーセントにもなる動作可能時間が求められています。その他の会社ではそこまで求めていませんが、SLAで規定され、本予想方法で動作するアプリケーションを開発することが99.9999%レベルと同様に99.9%レベルでも非常に難しい限り、アプリケーションすべてを操作可能な状態にしておく必要があります。これまで、クラスタ化は解決するのが難しい問題でした。Flowや一般のアプリケーションとの関連で、特にこのことは、高性能であり信頼出来る方法でユーザーの状況を確実に高可用性にし、フェイルオーバーすることを意味しています。ノード接続に失敗した場合は(アプリケーションサーバ、または、JVMのクラッシュ)、面倒なセッション(これは、もっとも一般的な方法で、ロードバランサを設定する方法が好まれる)を用いることから始まりますが、スムーズな方法で1つのノードから別のノードへユーザーの状態を移動させる効率的な方法も必要です。クラスタ化を言うときは何を意図し、キャッシングとはどんな違いがあるのでしょうか。我々が利用しているクラスタ化の定義は、多数のJVMアプリケーションにわたるアプリケーション状態を共有することですが、一方、キャッシングは、アプリケーションの状態を実行状態にさらに近づけることとして定義できます。いう意味では、キャッシングはクラスタ化の一部です。Web企業アプリケーションとして、企業レベルでのクラスタ化ソリューションが満足するべきと考える一連の最小要件としては、以下の項目があります。単純配置と設定状況ランタイム可視性(モニタリング)では、この一見共通点のないように思えるニーズすべてを解決することに焦点を当ててみましょう。問題を解決している方法が常に複数あり、Webアプリケーションに高可用性を提供していると断言している製品が市場には多くあります。Terracottaはそのようなソリューションの1つを実現しています。Springを基本にしたアプリケーション用のランタイムで、このランタイムは、Springアプリケーションに対して、アプリケーションコードへの影響がわずかであり、配置や設定過程への影響も同じようにほとんどない、トランスペアレントで高性能なクラスタ化を実現しています。直接アプリケーションをクラスタ化するのではなく、アプリケーション下のヒープレベルでクラスタ化することで、これが実行されます。開発者は、ステートレスなアプリケーションに相対するものとして、単一ノードのステートフルなSpringアプリケーションを開発することができます。これによって、スケーラブルなアプリケーションに対して、最初にクラスタ化を設計する必要がなくなります。Beanを簡単に定義する必要があります。Springは、このアプリケーションがトランスペアレントに自動で分類統合され、単一ノード上のようにクラスタのどこでも同じ動作が保証されていることを確認します。Flowの場合、実質的にはさらに簡単です。Webアプリケーション状態と分類統合された継続レジストリを確保するためにユーザーが実行しなければならないことは、Terracotta設定ファイルの‘セッションサポート’をオンにして、規定のWebアプリケーションを宣言することだけです(詳細については、下記の「宣言型設定」の題名の付いた項目を参照ください)。Springは、以下のことを実現しています。Flowのユーザー状況と継続リポジトリか、あるいは、HTTPセッションに利用されるあらゆるその他の状態のための、高可用性やフェイルオーバーを確保してください。Beanに対するライフサイクルの意味と適用範囲は、同じ"論理的な"ApplicationContextの範囲内にあるクラスタのあらゆるところで保護されます。現在のクラスタ化が可能なBeanタイプは、単集合のものとセッションが精査したBeanです。ユーザーは、分類統合するために、アプリケーションコンテキストのどれかのBeanを宣言的に設定することができます。既存コードを変更する必要は何もなく、ソースコードを要求することすらありません。このアプリケーションは、最小限の宣言型XML設定を基本にして、ロードするときにトランスペアレントに取り込まれます。Externalizableや、その他のあらゆるインターフェースを実行します。直列化を利用していないのでこれが可能ですが、実際の差分(変更したデータ)を現時点でそのデータが必要なノードに送り出すだけです(ゆったりと)。分散した不要データを収集したり、仮想ヒープ、たとえば、要求原理の基づいた物理メモリーはページインしたりページアウトしたりされるので、4GのRAMを持つマシン上で200GヒープのWebアプリケーションを走らせることができるような、仮想ヒープとしての機能もこれは備えています。Flowが物理的なヒープサイズを越えた対話型のデータのサイズであっても、心配する必要は何もないということです。アスペクト指向技術を利用して、クラスをロードするときにアプリケーションを適合させています。この段階では、オブジェクト参照やスレッド調整、不要データ収集などを含め、Javaの動作が正しくクラスタにわたって保持されることを確保するために、アプリケーションが拡張されます。直列化を利用していないと述べました。Flowで保持されるあらゆる会話は、そのクラスタにわたって共有されることを意味します。これがまた意味することは、Terracottaは、会話状態のためにすべてのノードにオブジェクト全体のグラフを送りませんが、純粋なデータにグラフを分解し、電線に事実上の変化分である実際の"差分"を送るだけです。このデータは、他のノードには"陳腐"なものです。Terracottaには、各ノード上で誰が誰を参照しているかの軌跡を保存する中央コーディネータがあるので(下記を参照)、遅延方式で動作でき、"汚れた"オブジェクトを参照して、変化分を必要とするノードにその変化分だけ送ることができます。これが参照の局所性を利用し、ロードバランサが"面倒なセッション"を使用するために設定されれば、なおさら効率的になるのは、いくつかのデータが実際のセッションを残す必要が決してなく、別のノードに複写される、と言うことを指しているからです。構造は、ハブとスポーク(クライアントを管理する中央コーディネータがあることを意味する)に基づいています。Springランタイムに加えられた普通のアプリケーションです。コーディネータは単一障害ではありませんが、任意の数の待機可能なコーディネータを持つことができ、障害が起きると、選択された一つが、クラッシュした主コーディネータが止まったまさにそこを捕まえます。クライアントとは関係なくコーディネータをクラスタ化することで、そのスケールを変えることができます。高度な利用が可能でステートフルなWebアプリケーションを書き込む方法ここで、Sellitemを呼び出すサンプルアプリケーションを用いて議論を推し進め、以下に示す項目について説明しましょう。Flowを用いてステートフルな対話型のWebアプリケーションを書き込む方法。Springを用いて宣言的にステートフルなアプリケーションを分類統合する方法。Flowディストリビューションから入手できる試用版です(詳しくは、この記事の終わりにある「リソース」項を参照ください)。Flowを用いたステートフルなWebアプリケーション、Sellitemを実行方法Sellitemサンプルアプリケーションは、条件付遷移や対話型の適用範囲、フロー実行時の出力先変更、継続などの組み合わせを具体的に示しています。配送(必要であれば)を特定し、最後にすべての情報を見ることができます。Flowがエクスポートするさまざまな標準サービス(Bean)を設定する方法に関する重要な概念を説明することに焦点をあてましょう。MVCにある標準DispatcherServletです。これは、Web.xmlに登録され、以下に示すように、Webアプリケーションコンテキストの*.htmリソースに対応付けされます。設定ファイルのsellitem-servlet-config.xmlとsellitem-webflow-config.xmlに存在します。Flowシステム(この入口点はフローエグゼキュータです)の"/pos.xml"URLにすべての要求を配布するこのURLに対応付けされた単独のコントローラです。Beanを設定します。Beanに登録したフロー定義で定義されています(前述の「フローエグゼキュータとフローレジストリBeanの設定」項を参照ください)。フロー実装の詳細を探求する前に、最初にページフロー用の図表による状態図を調べて見ましょう(下記を参照ください)。上図によって、完了するまでフローは各段階を通り、販売のために配送が必要かどうかを決める決定段階があることが分かります。上記のナビゲーション規則(そして、何の動作もしていませんが)をそのまま実行する最初の優れたフロー定義が以下に示されています。view="costOverview"/></flow>分かっていただけると思いますが、上図での定義には、状態図での状態に対応している状態と、図中の矢印に対応している変化があります。"販売"のBeanは、このフローの実行をするときに配置されるフローインスタンス変数です。これは、販売に関する属性のためのホルダーです。前述の定義は、きれいに揃えられたナビゲーション論理すべてを持っていますが、まだ、あらゆるアプリケーションを動作させる必要があります。Beanを更新する論理は、書き込みされていません。最終段階での販売処理論理が定義されていません。Flow定義が以下に示されています。resource="sellitem-beans.xml"/></flow>現時点で、ナビゲーション論理の定義に加え、このフローは、実行を定義して、適時、適切なアプリケーション動作を呼び出します。これには、ユーザー発行イベントを処理するための論理が含まれ、販売を処理するために後置されている販売処理プログラムが呼び出されます。形式を表示するビューステートを入力するとき、フローは、FormActionコマンドBeanを呼び出し、型式設定を実行し、論理を発行します。発行の際、FormActionは、ユーザーが要求するパラメータを適合する販売属性に結びつけ、それらの確認も行う場合があります。Flowを用いた対話型のWebアプリケーションを実行する方法が分かっています。Springで分類統合する方法を理解して、どのようにすれば、サンプルアプリケーションの高可用性やフェイルオーバーを有効にできるかを調べてみましょう。それでは、実際にまったく簡単だと分かっていただけるのであれば。サンプルアプリケーションは、Scaleクラスのインスタンスを利用して現在の販売に対するすべての会話データを記憶します。flowのフロー実行リポジトリは、HTTPセッションを利用してすべての会話データを記憶します。Springを有効にするためには、既知のWebアプリケーションに対してHTTPセッションのクラスタ化が可能であることが明確にされ、計装用として、場合によればHTTPセッションに記憶される可能性がある(あるいは、このセッションに記憶されるインスタンスから連絡可能である)クラスすべてが含まれることが必要になります。Springのtc-config.xml設定ファイルが以下のようになっているサンプルがあります。WARファイルに対するHTTPセッションのクラスタ化が可能になり、計装用のセールクラスが含まれました。これでほとんどのことを行いました。Terracottaを有効にするあと一つしなければならないことがあります。Springのランタイムを有効にすることです。Webサーバの起動スクリプトを変更し、以下に示す環境変数をスクリプトの先頭に追加することで実行されます。Springをインストールするためのルートフォルダのcommon/lib/dso-bootディレクトリで見つかります)。Springのインストールルートディレクトリに設定します。LOCAL_DIRをtc-config.xmlがあるフォルダに設定します。Springでクラスタ化のために事前に設定されたSellitemアプリケーションは、下記項の「リリース」から入手可能です。難しい設定をすることなく起動できるTomcatクラスタの設定も含まれています。Springの自動組み込み検知機構に依存することができます。ほとんどの場合、どのクラスを組み込むかについて気にする必要はありませんが、tc-config.xmlファイルにBean名を明記する場合には、分類統合したいBeanをただ定義するだけです。この記事で知ったような単純なアプリケーションから、多くのリッチページフローにある大規模な企業用アプリケーションまでの、ステートフルな対話型のWebアプリケーションを書き込む優れた方法を提供しています。Flowアプリケーションに高可用性をもたらします。Springは以下のことを実現しています。FlowとTerracottaを合わせることで、処理状況を把握し、対話型でスケーラブルな高可用性のアプリケーションを記述する新たらしい特性が提供されます。Flow出荷時に同梱されます。Springは、事前設定され(Tomcatとロードバランサもバンドルされています)、そのまま直接実行できるSellitemアプリケーションの簡易バージョンとして出荷されます。Bonér氏(サイト・英語)は、Terracotta社に勤めています。この会社は、戦略的製品開発と構造技術エバンゲリズムに焦点をあてています。5プロジェクトとその他さまざまなオープンソースプロジェクトのコミッタであり、AOPやJVMレベルのクラスタ化、その他に出てきた技術ついてたびたび語ってくれます。Kuleshov氏(ブログ・英語)は、フリーランスのコンサルタントです。彼は、ソフトウェア設計開発や、アプリケーション保護(企業統合(EAI)やメッセージ指向のミドルウェア)を専門に、12年にわたって経験を積んできました。彼は、オープンソースコミュニティーのさまざまなプロジェクトに積極的に寄与してきました。毎週火曜日に前週のまとめコンテンツがお送りいたします。25万人ものシニアデベロッパーのコミュニティーにぜひご参加ください。サンプルを見るあなたのメールアドレスはこちら国を選んでください。プライバシーポリシーに従って私の個人情報を扱うことに同意します。登録するとさまざまなことができます。アカウント登録をしてInfoQをお楽しみください。あなたの意見をお聞かせください。毎週火曜日に前週のまとめコンテンツがお送りいたします。25万人ものシニアデベロッパーのコミュニティーにぜひご参加ください。サンプルを見る様々なイノベーターとアーリーアダプターがお送りするテクノロジーの概要を見る。自分がまだ知らないことに気づいていないと知るあなたが興味のあるトピックスをいつでも最新な情報に。あなたのメールアドレスはこちら国を選んでください。プライバシーポリシーに従って私の個人情報を扱うことに同意します。よい世界へ私たちが暮らす世界を大切に思い、よりよいものにしたいと考えています。人のためのソフトウェア開発を加速し私たちのミッションを実現することで、この思いを成し遂げようとしています。私たちは利益の1%をさまざまな慈善団体に寄付しています。会社として、また従業員として、そうしたことの価値を強く信じているからです。with.プライバシーBTあなたのプロファイルは最新ですか?プロフィールを確認してアップデートしてください。アドレス*Eメールを変更すると確認のメールが配信されます。会社名:現在の会社名をご入力ください。Other組織規模:現在の組織規模をご入力ください。2,501+国:現在の国を設定してください。Zimbabwe都道府県:現在の都道府県に設定してください。次の都道府県にアップデートする:ニュースレターを購読しますか?インダストリーメールを購読しますか?本Eメールに登録すると、以前より関心のあったトピックの関連情報をお送りする場合がございます。詳細はこちらのプライバシーポリシーをご覧ください。newsletter?新しいメールアドレスに確認用のメールを送信します。このポップアップ画面は自動的に閉じられます。