2015/06/26 このエントリーをはてなブックマークに追加 はてなブックマーク - JJUG ナイトセミナー 「Reactive Streams特集」に行ってきました #jjug

JJUG ナイトセミナー 「Reactive Streams特集」に行ってきました #jjug




http://www.zhaojunlucky.com/architecture/what-is-reactive-systems/より引用


JJUG ナイトセミナー 「Reactive Streams特集」に参加してきました。

本記事では実際に参加して感じたこと、学んだことをメモがてらまとめようと思います。



今回参加の目的としては
・自分の中でバズワード化している「リアクティブ」な用語が分からない
・概念はどんなものか?
・ただのObserverパターンじゃないの?
・ただのFuture/Promiseじゃないの?
・ただのデータバインディングじゃないの?
・Stream APIっぽい関数型パラダイム的な何かじゃないの?

というところの曖昧さの整理とか勉強のためでした。


すでに色んな方がレポートを書いてます。みんな仕事が早いですね(^^;


JJUGのReactive Streams勉強会に行ってきました! - Java EE 事始め!
JJUG ナイトセミナー「Reactive Streams特集」に行ってきた #JJUG - mike-neckのブログ
JJUG ナイトセミナー 「Reactive Streams特集」に行ってきた #jjug - yukungのブログ










90枚近くスライドがあり、時間に対して量が多かったみたいで若干早めのペースで
発表をされていました。
でも予習してきた人とか、このあたりの知識がある程度ある人には丁度良いぐらいの
ペースだったようにも思います。


非常に分かりやすい発表でした。


Reactive Streams周辺の話から入り、Reactive Streamsの説明をした感じ。
概要や全体図をつかむには申し分ない内容でしたね。

・プログラミングモデルとしてのReactive Programming
・ランタイムとしてのReactive Streams
・アーキテクチャとしてのReactive Manifesto。


Reactive Manifestoは大雑把に言って、Reactive Systemsという
非同期なデータフロー処理のアーキテクチャを定めようというものだと捉えました。


ただ、Reactive Programmingに関しては
Reactive Manifestoから派生した言葉ではないんですね。
Reactive Programmingはプログラミングのモデルであって、
Reactive Manifesto起因ではない。Reactive Manifestoも
Reactive Programmingという言葉は意識的に避けるようにしているとのことで。



Reactive Streamsの特徴として強く印象に残ったというか釈然としたのは
「バックプレッシャー」という概念の説明を聴いた時でした。

そこは確かに従来のデータフローの仕組みにはなかったところなのかなと。


JSRとしてJava SE 9へ取り込もうという動きも知らなかったですね。
そしていろんな実装がある。
RxJavaとAkka StreamsとかVert.xぐらいしか名前知らなかった。。。

RxJavaは軽く暇つぶしに書いたことあるので、
RxJavaの処理フローをイメージしながらお話を聴いておりました。


しかし、Reactive Streamsの規定する部分というのは
スライドにもあったとおり、ビッグデータだとか、動画サイトだとか
そういう大量の通信をさばくシステムに携わってないとピンと来ないのでしょうね。
それに加えて、非同期処理でのコールバックヘルとか
体験しないとありがたみがわからないかもしれません。


実際そういったシステムのためのアーキテクチャなので、
そこを想像出来ないと興味もわきにくいでしょうし、
実際に使うとなると、具体的に利用シーンが思いつかなかったりするかもなぁ。



Reactive Streams自体はSPIとかインターフェースでしか無いです。多分。

https://github.com/reactive-streams/reactive-streams-jvm/





Reactive Streamsを使ってみよう
発表資料関連


とーます(@grimrose)さんの発表でした。

具体的に実装の話についてでした。
Reactive Streamsが提供するインターフェースは
・Publisher
・Subscriber
・Subscription
の3つがメインだそうです。



ProcessorはPublisherとSubscriberの共通機能ということで、
あまり意識しなくて良いと。


PublisherからObservableへのコンバート、
ObservableからPublisherへのコンバート
もあるようで、実装はそれぞれ全然違うけど
Reactive Streamsが頑張って対象のインターフェース型に変換してるとのことでした。

「なるほどReactive Streamsというのはインターフェースの規定とコンバートがメインかな。
なんだか通信プロトコルとやってること近いな。」
と思ってたら、reactive streamsの原文にそんな感じの記載がありました。


 This encompasses efforts aimed at runtime environments (JVM and JavaScript) as well as network protocols.




調査量がすごくて、どこが参考になるかという点でも大変有益な発表だったと思います。
あと、Akka StreamのテストキットがJavaだとつらそうだなぁとすごい思いましたw





本編もそうですが、懇親会も含めて今回のナイトセミナーはなんだか
とても雰囲気が良かった!勉強になりましたし
なんだかピースフルな空気でした。


とーますさん(@grimrose)とも改めてお話しました。
Reative StreamsのPublisherからObservableへの変換とかは結構エグいとのことでした。
実装によって中の処理が全然違うんだとか。QueueとかRing Bufferとか。
そこの変換を保証するのがインターフェースの型とTCK(JSR用のテストキット)
っぽい感じのようです。
あとユニットテストがつらそうですね、って話もしました。
ノンブロッキングで動いているので、全部ブロックしてassertionしないといけないとか。
中間操作をどうやって検証するかとか。テスト用のStreamとやらもあるそうですが。


しかし、とーますさん(@grimrose)の幅の広さはすごい。


@okapiesさんとも終了間際にちょっとだけ話させていただきました。
もうちょっと笑いがあっても良かったなぁと仰ってましたが、
分かりやすくてめちゃくちゃ勉強になったので
問題無いです!笑


あと、今回は@maaya8585さんとか
@itohiro73さんに初めてちゃんと会ってお話しました。そういえば。
@chiroitoさんもそうかも笑
いい人ばかりですね。






ということで、JJUG ナイトセミナー 「Reactive Streams特集」に参加してきたレポートでした。

振り返ってみて、僕の疑問

・自分の中でバズワード化している「リアクティブ」な用語が分からない
・概念はどんなものか?
→Reactive Programming、Reactive Streams、Reactive Manifestoを理解すればまぁなんとかなりそう

・ただのObserverパターンじゃないの?
・ただのFuture/Promiseじゃないの?
・ただのデータバインディングじゃないの?
→多分全部を含んで非同期でやってる。
それに加えてバックプレッシャーでオーバーフローを防ぐ仕組みがかなりデカイ。
あと、サービス間の互換性の高さも利点のよう。

・Stream APIっぽい関数型パラダイム的な何かじゃないの?
→実装による。RxJavaとかだと似てるようにみえるかも。
Reactive Streamsが規定しているわけでもない。と思う。


ということでだいぶスッキリしました。
それにこの周辺の情報の飲み込みがちょっと早くなりました。
やはり直接詳しい人から説明を受けるというのは学習効率高いですね。

行ってよかったなぁーと思えるナイトセミナーでした!




0 件のコメント:

コメントを投稿