そこに仁義はあるのか(仮)

略してそこ仁!

リアクティブシステム入門を聞いてきた!

とある非公開?な勉強会で @ さんのリアクティブシステム入門を聞いてきた。
内容がすごくわかりやすかったので、忘れないためにメモ。

スライドは非公開なのかな?
既に公開されているこのスライドと似ている!

www.slideshare.net

リアクティブ宣言

リアクティブシステムとはこういうものですよ、っていうのが説明されているページ。
短く簡潔にまとめられているからサクッと読める!
リアクティブ宣言

リアクティブシステムとは

アプリケーションへの要求

最近はアプリケーションに対して、様々なことが要求される

例えば

  • クラウドで1000コアで動かしたい
  • レスポンス時間を短くしたい
  • 非稼動時間を短くしたい

そんな要求を実現するために、高レスポンス・耐障害性・伸縮性・メッセージ駆動を備えたシステムが必要!
リアクティブ宣言を見ると、高レスポンス・耐障害性・伸縮性をメッセージ駆動の技術で支えている感じがある。)Oo.( ´-` )

  • 高レスポンス
    • システムは可能な限りすみやかに応答する
  • 伸縮性
    • システムはワークロードが変更しても即応性を保ち続ける
  • 耐障害性
    • システムは障害に直面しても即応性を保ち続ける
  • メッセージ駆動

高レスポンス・耐障害性・伸縮性・メッセージ駆動を備えたシステムをリアクティブシステムという。

 メモ

ワークロード 【 workload 】

稼働中のコンピュータにかかっている負荷の大きさ、実行中のソフトウェアによって処理能力が占有される度合いのことをワークロードという。

http://e-words.jp/w/ワークロード.html

並行処理に有効なメッセージパッシング - プログラマが知るべき97のこと

リアクティブシステムのための技術

Lightbend Reactive Platform

紹介されていた技術はコレ

www.lightbend.com

Play Framework, Akka, Spark等で構成されていて、Scala / Javaで実装可能('ω'≡'ω'≡'ω'≡'ω')

 PlayFramework

何がいいの?

同期/ブロッキングするシステムだと、とある処理が完了するまで他の処理が待たされる。

f:id:syobochim:20160723184856p:plain

非同期/ノンブロッキングするシステムだと、どんどん処理を進めていくことができる。

f:id:syobochim:20160723185214p:plain
※シーケンス図の書き方があれなので、処理が短くなっている感じがしないが。。。

処理を非同期/ノンブロッキングにすると、高レスポンスなシステムを実現することができる。

 Akka
  • 並行処理と分散処理をサポートするActor system
  • Supervision Model
  • 位置透過性

Akkaはメッセージ駆動をサポートする。
Akkaによって、伸縮性と耐障害性を実現することができる。

スライドのP24から29あたり。

 Slick
  • FRM(Function Relational Mapping)ライブラリ
  • Scalaのコレクションを扱うようにDBアクセスできる
  • DB処理は非同期に実行される

ただし、JDBCをつかっているので、アプリケーションでは非同期処理っぽくかけるけど、DBへのコネクションは持ち続けるので、DBとのコネクションはblockingになっている。
店とレジの例えにすると、厨房の人数がネックになっている。

端から端までReactive

リアクティブシステムでは、非同期処理が基本になる。
"どこで同期するか"をデザインする。

感想

⬆︎に書いているものを使って、発電状態を監視するシステムのDEMOを見せてもらいました!
一つの監視システムがダメになっちゃったときに他のシステムが役割を代替することで、システム全体として障害が起こったことを表に出さないようになっているところが、すごい!!という感じでした!

@ さん、発表ありがとうございました!!