YSNHatenaBlog

主にアプリやWebサービス開発について

Reactive初心者が「Reactive Systems Meetup in 西新宿」に参加してきた

先日掲題の勉強会に行ってきた。

reactive-shinjuku.connpass.com

正直、React.jsやRxSwiftとかに触れつつ、結局Reactiveって何なの?というレベルだったのだが、何か学ぶきっかけになればと思い行ってきた。

TIS株式会社さんがホスト。Akkaというソフトを開発しているTypesafe社の認定コンサルティングパートナーとのこと。ハッシュタグは#reactive_shinjuku。

Reactive Systems入門

TIS株式会社 前出祐吾(@yugolf)

www.slideshare.net

Reactive Systemを4つの観点から説明。 * 即応性 * 耐障害性 * 弾力性 * メッセージ駆動

Reactive Systemsを構築すると上の効果を得られることは分かった。ただ、結局Reactiveって何?というあたりは解決されなかったので、自分で調べる。

Reactiveとは?

speakerdeck.com

こちらのSlideShareの内容がわかりやすい。前回会議の資料なのかな?

Reactiveに、どうやら決まった定義はないみたい。

上のSlideShareの発表者である@okapiesさんの解釈としては、『Reactiveなコンポーネントとは、データの反応(react)して、それを変換して出力する』コンポーネントのこと。コンポーネントの中で動作が完結するのがポイント。コンポーネント疎結合性、隔離性を高くできるので、複雑な処理『モジュール化、非同期化、並列化が容易になる』。なるほど。

この考えをベースにReactive○○の説明。

Reactive Programming

『Reactiveなコンポーネントをデータフローとして組み立てることでプログラミングする』らしい。 宣言的に処理が記述されたものを連結する。あまり知識はないけど、関数型ってこんな感じなのかな?下のリンクによるとExcelをイメージするとわかりやすいらしい。なるほど。

2015年に備えて知っておきたいリアクティブアーキテクチャの潮流 - Qiita

確かに入力にreactして出力が得られる。

ここで、変更の伝搬をランタイムに任せて、プログラマコンポーネントの実装に注力できる仕組みが、この後のセッションで説明されるAkka Streamsだったりするらしい。

Reactive Systems

Reactive Systemsについてはここで定義されている。

リアクティブ宣言

リアクティブ宣言

『即応性と、耐障害性と、弾力性と、メッセージ駆動とを備えたシステム』

ここで、今回の資料で説明された内容が出てくる。コンポーネントがメッセージ駆動で連携する設計が、先に述べたReactiveの説明に合致している。なんとなくわかってきた。

ただしSlideShareによると、Reactive SystemsがReactive Programmingと異なる点として、大容量データを扱う非同期ストリームのため、フロー制御がいる、ということらしい。コンポーネントがメッセージキューをうまく捌けないときに、いろいろ制御が必要。バックプレッシャーと呼ばれる仕組みもその一つ。

ここまで読んでReactiveについてイメージができてきた。

Reactive Streams, Akka Streams/HTTP and how they impact the JVM ecosystem

Typesafe社 Konrad Malawski氏(@ktosopl)

資料は上がってないのかな?

Akka

AkkaはReactive Systemsを構築するためのツール。Akkaの説明だが、特にback-pressure(背圧制御)の仕組みについてへーと思った。

バックプレッシャーは先に述べた通り、ストリームでPublisherが送り出す量を制御する仕組み。

Push + NACK model

Subscriberが受信したメッセージがバッファ溢れした場合、再送する。再送にはTCPの仕組みを利用?若干良く分からなかったが、HTTPのレイヤでTCPの再送をコントロールして再送させているように聞こえた。

この再送の問題として、SubscriberがPublisherに「ちょっと待って!」って言っても既にメッセージキューが溢れて間に合わないケースがある。

そこで、SubscriberがPublisherに「いくつまでならメッセージ送っていいよ」と伝えてから送ってもらうpull base back-pressureという仕組みがある。Akkaはこれに対応しているのかな?back-pressureによってbounded memory(固定メモリ長)で制御できるのが重要。

Reactive database access with Slick3

株式会社ビズリーチ 竹添直樹氏(@takezoen)

Slick3 (a.k.a Reactive Slick)について

Slick is a modern database query and access library for Scala.

www.slideshare.net

SlickというScala用のDBライブラリがReactiveに書けるようになったよってことかな?

Reactive Slick

  • Data access framework for Scala
  • Powerful type-safe query API
  • Prallel execution and streaming

実務的な内容だったので、経験のない自分としてはピンとこなかった...。

とりあえずアップデートはアグレッシブで移行が大変らしいってことと、Slick3で関数型になって難しくなったという話は共感できた(笑)

まとめ

もう少し自分の実務と近い内容だったらより勉強になったと思うが、少なくともReactiveとは何かを学ぶきっかけになってよかった。

非同期な処理がどこでも求められるようになってきて、高度な設計が求められ、それをサポートするフレームワークが出てくるようなったなぁと。Reactiveの概念は今後のエンジニアスキルとして重要になってくるかもね。