coursera.orgのコース「リアクティブプログラミングの原則」

リアクティブプログラミングの原理 スケーラビリティ、フォールトトレランス、および高速応答の増大する要件を満たし、マルチコア環境とクラウドコンピューティングの両方に不可欠な現代のプログラミングの分野についてお話しします。また、数日後に始まるオープンコースを紹介します。



リアクティブプログラミングについて聞いたことがない場合は、すべて順調です。 (この場合、いくつかのハブポストを見逃しました: HaskellRx for JavascriptBacon.jsMeteor JS )これは、並行性とイベント指向および非同期を組み合わせた、急速に発展している分野です。 反応性は、あらゆるWebサービスおよび分散システムに固有のものであり、高度な並列性を備えた多くの高性能システムのコアとして機能します。 要するに、コースの著者は、アクティブなアクターまたはアクター間で交換される非同期データストリームによって調整および調整された分散状態の並列システムへの関数型プログラミング(高次関数)の自然な拡張としてリアクティブプログラミングを検討することを提案します。



より理解しやすい言葉で、これはジェットマニフェストで説明されています;その完全な翻訳はハブで公開されています ウィキペディアによるリアクティブプログラミングという用語は長い間存在し、実用的でしたが、 Typesafe IncのイニシアチブグループであるJetマニフェストの著者の努力のおかげで、最近、開発と普及への新たな推進力を受けました Typesafeは、機能的なプログラミング環境で、美しいScala言語と革新的な並列プラットフォームAkkaの作成者によって設立された会社として知られています。 現在、彼らは自社を、新世代を開発するために設計された世界初のリアクティブプラットフォームの作成者として位置付けています。 そのプラットフォームにより、複雑なユーザーインターフェイスを迅速に開発し、並列コンピューティングとマルチスレッドを超える新しいレベルの抽象化を実現し、予測可能なスケーリングの保証により、固有のリスクを軽減します。 Jet Manifestのアイデアを実践し、開発者が現代のニーズを満たすアプリケーションを概念化して作成できるようにします。



coursera.org Webサイトの大衆公開コース「リアクティブプログラミングの原則」に参加することで、このプラットフォームとリアクティブプログラミングに慣れることができます。 このコースは、Martin Oderskyの「Principles of Functional Programming on the Rock」コースの続きであり、10万人以上の参加者を集め、世界の参加者による大規模なオープンオンラインコースの最高レベルの成功の1つを示しました。 Skala言語の作成者である.NETのリアクティブプログラミング用のRx環境を開発し Eric Meyerと、現在TypesafeのAkka開発チームを率いるRoland Kuhnが新しいコースを教えています。 このコースでは、リアクティブプログラミングの重要な要素を明らかにし、それらを使用して、スケーラビリティとフォールトトレランスを備えたイベント指向システムを設計する方法を示します。 トレーニング資料には短いプログラムが示されており、タスクのセットが付属しています。各タスクはソフトウェアプロジェクトです。タスクが正常に完了した場合、参加者は証明書を受け取ります。 コースは7週間続き、11月4日月曜日に始まります。 コースの詳細なアウトラインは、coursera.org Webサイトのページ(および私のメモの最後)でご覧いただけます: www.coursera.org/course/reactive







リンクを辿りたくない人のために、ジェットマニフェストの基本概念の簡潔なプレゼンテーションを提供します。 リアクティブプログラミングと何かという質問に答えるべきです。 マニフェストの著者は、近年のアプリケーション要件の劇的な変化に注目しています。 現在、アプリケーションは、モバイルデバイスから数千のマルチコアプロセッサを備えたクラウドクラスターまで、あらゆる環境に展開されています。 これらの環境は、ソフトウェアとテクノロジーの新しい要件を示しています。 前世代のアーキテクチャでは、管理対象サーバーとコンテナに重点が置かれ、追加の高価な機器、独自のソリューション、およびマルチスレッドによる並列コンピューティングにより、スケーリングが達成されました。 現在、4つの最も重要な機能を区別できる新しいアーキテクチャが開発されており、ユーザーおよび企業の両方の産業環境でますます普及しています。 このアーキテクチャを備えたシステム:イベント駆動(イベント駆動)、スケーラブル(拡張可能)、フォールトトレラント(復元性)、高速応答、つまり レスポンシブ これにより、リアルタイムの感覚を提供する快適なユーザーエクスペリエンスが提供され、自己修復スケーラブルなアプリケーションスタックによってサポートされ、マルチコアおよびクラウド環境での展開の準備が整います。 リアクティブアーキテクチャの4つの特性は、技術スタック全体に適用され、マルチレベルアーキテクチャのリンクとは区別されます。 それらについてもう少し詳しく考えてみましょう。



リアクティブアーキテクチャの機能








イベント指向のアプリケーションは、コンポーネントの非同期通信を想定し、疎結合設計を実装します。メッセージの送信者と受信者は、お互いに関する情報やメッセージの送信方法に関する情報を必要としないため、通信の内容に集中できます。 疎結合コンポーネントがシステムの保守性、拡張性、および進化を大幅に改善するという事実に加えて、それらの相互作用の非同期性および非ブロッキング性により、リソースのかなりの部分が解放され、応答時間が短縮され、従来のアプリケーションと比較してより大きな帯域幅が提供されます。 リアクティブアーキテクチャの残りの機能が可能になるのは、イベント指向の性質のおかげです。



リアクティブプログラミングのコンテキストでのスケーラビリティとは、負荷の変化に対するシステムの応答です。 必要に応じて計算ノードを追加または解放する機能によって達成される弾力性。 その低い接続性、非同期メッセージング、およびコンポーネントの場所の独立性(場所の透過性)により、アプリケーションの展開方法とトポロジは、展開時間のソリューションとなり、負荷に対応する構成および適応アルゴリズムの対象となります。 したがって、コンピュータネットワークは、最初は明示的に分散された性質を持つアプリケーションの一部になります。



リアクティブアーキテクチャのフォールトトレランスも設計の一部になります。これは、サーバーをバックアップし、障害が発生した場合に制御をインターセプトすることで継続的なシステム可用性を確保する従来のアプローチと大きく異なります。 このようなシステムの安定性は、個々のコンポーネントの障害に正しく対応し、これらの障害を分離し、それらのコンテキストをそれらの原因となったメッセージの形で保持し、これらのメッセージをエラーの処理方法を決定できる別のコンポーネントに送信する能力によって達成されます。 このアプローチにより、アプリケーションのビジネスロジックをクリーンに保ち、障害処理ロジックをアプリケーションから分離できます。これは、システム自体を使用して障害を登録、分離、処理するための明示的な宣言形式で定式化されます。 このような自己修復システムを構築するために、コンポーネントは階層的に順序付けられ、問題はそれを解決できるレベルまでエスカレートします。



そして最後に、 応答性とは、負荷や障害に関係なくユーザーの影響に応答するシステムの能力であり、このようなアプリケーションはユーザーと対話し、システムと現在のタスクを実行するのに十分な機器との密接なつながりを感じます 応答性は、リアルタイムシステムだけでなく、広範なアプリケーションにも必要です。 さらに、障害時にも迅速に応答できないシステムは、フォールトトレラントとは見なされません。 応答性は、オブザーバブルモデル、イベントストリーム、およびステートフルクライアントを使用して実現されます。 観察されたモデルは、状態が変化するとイベントを生成し、ユーザーとシステム間のリアルタイムの対話を提供します。イベントフローは、非対話型の非同期変換と通信によってこの対話が構築される抽象を提供します。



したがって、リアクティブアプリケーションは、現代のソフトウェア開発の幅広いタスクを解決するためのバランスの取れたアプローチを表しています。 イベント駆動型に基づいて構築され、拡張性と復元力を保証し、フル機能のレスポンシブユーザーエクスペリエンスをサポートするために必要なツールを提供します。 著者は、反応型マニフェストの原則に従うシステムの数が増えることを期待しています。



付録では、翻訳なしのコース計画を引用しています。 あなたがこの場所を読んだとしても、あなたはまだ興味があります。



1週目 :関数型プログラミングの原則のレビュー:置換モデル、for式、およびモナドとの関係。 for-expressionsの新しい実装:ランダム値ジェネレーターを紹介します。 ランダム化テストでこれを使用する方法を示し、このアイデアを実装するツールであるScalaCheckの概要を示します。



2週目 :関数型プログラミングと可変状態。 オブジェクトを可変にするものは何ですか? これが置換モデルに与える影響。 拡張例:デジタル回路シミュレーション



週3 :先物。 for-expressionsを具象構文として、futuresを別のモナドとして導入します。 スレッドブロッキングを回避するために先物を構成する方法を示します。 スレッド間のエラー処理について説明します。



4週目 :リアクティブストリーム処理。 先物をストリーム上のリアクティブ計算に一般化します。 ストリーム演算子。



週5 :俳優。 アクターモデルを導入し、カプセル化された一貫性のあるユニットとしてのアクター、非同期メッセージの受け渡し、さまざまなメッセージ配信セマンティクス(最大1回、少なくとも1回、正確に1回)および最終的な一貫性について説明します。



週6 :監督。 障害の具体化、階層的な障害処理、エラーカーネルパターン、ライフサイクルモニタリングを導入し、一時的および永続的な状態について説明します。



週7 :会話パターン。 アクターとフロー制御のパターン間の会話状態の管理、回復力または負荷分散のためのアクターのプールへのメッセージのルーティング、信頼できる配信を実現するための受信の確認について説明します。



All Articles