Download - What is reactive programming?
What isReactive Programming?
2016/02/17 Sendai.swift 第一回 Reactive Programming in Swift
田中賢治
• 田中賢治(22)
• Swift/Objective-C
• iOS開発もうちょっとで4年目
• Qiita/GitHub/Twitter/etc…(@ktanaka117)
• ブログ「田中、仙台に生きる」
自己紹介
最近ハマってるもの
ハッカーとかエンジェル投資家とか、サイバー犯罪とか。技術的に深くて楽しい。坂井さんが人間味あって味わい深い。萌え。
What’s “Reactive”?
• 最近話題のReactive Programming
• Functional Reactive Programming(FRP)とかもあるけれど、定義としては別物かな?
• いろいろ読んだところ、考え方は交錯している印象。要素はそれぞれ取り入れられている
What’s “Reactive”?
“Reactive”とは?
What’s “Reactive”?
reactive / riˈæktɪv /
【noun】反応性 【adjective】反応的な
What’s “Reactive”?
reactive / riˈæktɪv /
【noun】反応性 【adjective】反応的な
What’s “Reactive”?
“反応”
Reactive Manifesto
• Responsive
• Resilient
• Elastic
• Message Driven
リアクティブなアプリケーションに関する重要な4つの要素
Reactive Manifesto
• Responsive
• Resilient
• Elastic
• Message Driven
Responsive: 即応性
• リアルタイムな更新処理
• Web Socketなどによって実現
• モバイルだとUIの描画処理など
• エンドユーザーに素早くレスポンスを与える
• 「ふぁぼ」
• 「Google Docs」
• 検索条件の絞り込みなど
Responsive: 即応性
Responsive: 即応性Twitterのふぁぼ
クライアントのUI描画はまず先に行われる。 その後サーバーと通信し、リクエストが失敗したらふぁぼは取り消される。
Responsive: 即応性Google Docs
複数人でのテキストの同時編集。各クライアントでテキスト入力はスムーズに行われ、他のクライアントとは都度同期が取られていく。
良いUXが求められる世の中
Responsive: 即応性
Reactive Manifesto
• Responsive
• Resilient
• Elastic
• Message Driven
Resilient: 耐障害性
• 障害に直面しても即応性を失わない
• コンポーネントの切り分けクライアントとサーバーの境目など
• サーバーにおいては冗長化なども含む
Resilient: 耐障害性ServerClient
UserAction, Request
Response
Resilient: 耐障害性Server
_人人人人人人_ > 突然の死 < ‾Y^Y^Y^Y^Y‾
Client
Response
UserAction, Request
Resilient: 耐障害性Server
_人人人人人人_ > 突然の死 < ‾Y^Y^Y^Y^Y‾
ClientUserAction
Response
・クライアントのみでも正しく動くように見せる・行なわれた処理はクライアントに保持し、障害 回復時に同期処理する、など
コンポーネントがクライアントとサーバーで切り分けられた状態
Resilient: 耐障害性
良いUXが求められる世の中
Reactive Manifesto
• Responsive
• Resilient
• Elastic
• Message Driven
Elastic: 弾力性
• ワークロードが変化しても即応性を保つ
• サーバーのオートスケール
Reactive Manifesto
• Responsive
• Resilient
• Elastic
• Message Driven
Message Driven: メッセージ駆動
• Observerパターン (KVOとか)
• 送信者と受信者がそれぞれ独立したライフサイクルを持つ。非同期にやりとりを行う=リソースの有効活用
即応性
即応性これを根底に置く考えがReactiveの哲学であり、様々な実装方法、手法、アプローチが行われる。Functional Reactive Programmingとは、これを関数型プログラミング的に実装していくReactive Programmingの一つのアプローチである。