みなさんReactiveですか?
私はReactiveだったり、Reactiveじゃなかったりします。
心に余裕があるときはReactiveですし、思考が停止しているときはもちろんReactiveじゃ無いです。
・・・。
Reactiveってなんですか?
Reactiveとは反応的なという意味です。
さて、今回知りたいのは
- Reactive Programing = 「反応的プログラミング」?
- Reactive Streams = 「反応的ストリーム」?
- Reactive Manifesto = 「反応的宣言」?
いつものことですが、日本語にしても全く意味がわかりません。
いろいろと調べてみましたが、こちらのスライドの表現がとてもわかり易くていいです。
Reactive Manifesto : アーキテクチャ
Reactiveなシステムを構築するための方針、精神。
システム(サービス)って、
- さくさく動いて
- いつでもつかえる
というのが当たり前になってきています。
ユーザーはあまり気にしないですが、うらでは膨大なデータを扱っているというのもポイントです。
その要求に対応するために開発者たちははそれぞれ優れた方法で対応してきたけど、
それってこういうことだよね。がReactive Manifestoの内容で、
- Responsive(即応性)・・・さくさくうごくよー
- Resilient(耐障害性)・・・いつでもつかえるよー
- Elastic(弾力性)・・・たくさんのデータがー
- Message Driven(メッセージ駆動)・・・それら対応するために。
だからみんなこういう方針でやっていこうぜ!!!ということでしょう。
賛同する方は以下で署名もできます。
Reactive Programing : プログラミングモデル
Reactive Manifestoを実装するためのプログラミング手法。(どちらが先かというのはおいといて)
手続き型、オブジェクト指向、関数型プログラミングと同じでプログラミングパラダイムの一つと考えるといいでしょう。
実装としてはFRPなRx系がリードしているのかなぁ。
Future/Promise、Actorモデルも気にはなりますが知りません。
※Reactive Extention系
Reactive Streams : ランタイム
ストリームと言われると、流れ続けるものというイメージが湧いてきますが実際にはそうでは無いようで
非同期なストリーム処理、Non-blocking、back pressureの特徴を持っているものを、Reactive Streamと呼びます。
前の2つはなんとなく分かるのですが、back pressureってなんでしょう?
coldとはhotとか出てきますが、これは本質では無いので(めんどくさいわけではない。)一旦おいといて、
つまるところオブザーバー(処理する方)が処理できないストリームはよろしくないからそれを制御する機構が必要だ。ということです。
どこで使えばいいですか?
- GUI
- アニメーション
- シミュレーション
- ビッグデータ
- IoT
- etc..
時間を軸にするものや、ビッグデータを取り扱うシステム、クライアントがたくさん( これからはIoTだ! )いるとき。
Reactive Programmingならイベントでも、データでもなんでもストリームとして扱ってnon-blockingに処理すれば、
素敵なシステムが構築できそうですね。
まとめ
メモ程度になりましたが、Reactiveについてまとめてみました。
Reactive○○は周辺にある情報が多く、代表的な実装というものが確立されていないようなので
まだまだこれからという感じです。
また、幅広い知識を要求される(されている気がする)ので学習のコストもそこそこ高いと感じました。
日々是精進。
参考にしました
- Reactive Porn
- Reactive Streams 入門
- 【翻訳】あなたが求めていたリアクティブプログラミング入門
- 2010-12-26 なぜリアクティブプログラミングは重要か。
- Introduction to Reactive Programming