とある非公開?な勉強会で @yugolf さんのリアクティブシステム入門を聞いてきた。
内容がすごくわかりやすかったので、忘れないためにメモ。
スライドは非公開なのかな?
既に公開されているこのスライドと似ている!
リアクティブ宣言
リアクティブシステムとはこういうものですよ、っていうのが説明されているページ。
短く簡潔にまとめられているからサクッと読める!
リアクティブ宣言
リアクティブシステムとは
アプリケーションへの要求
最近はアプリケーションに対して、様々なことが要求される
例えば
- クラウドで1000コアで動かしたい
- レスポンス時間を短くしたい
- 非稼動時間を短くしたい
そんな要求を実現するために、高レスポンス・耐障害性・伸縮性・メッセージ駆動を備えたシステムが必要!
(リアクティブ宣言を見ると、高レスポンス・耐障害性・伸縮性をメッセージ駆動の技術で支えている感じがある。)Oo.( ´-` )
- 高レスポンス
- システムは可能な限りすみやかに応答する
- 伸縮性
- システムはワークロードが変更しても即応性を保ち続ける
- 耐障害性
- システムは障害に直面しても即応性を保ち続ける
- メッセージ駆動
- 非同期なメッセージパッシングに依ってコンポーネント間の境界を確立する
高レスポンス・耐障害性・伸縮性・メッセージ駆動を備えたシステムをリアクティブシステムという。
メモ
ワークロード 【 workload 】
稼働中のコンピュータにかかっている負荷の大きさ、実行中のソフトウェアによって処理能力が占有される度合いのことをワークロードという。
http://e-words.jp/w/ワークロード.html
リアクティブシステムのための技術
Lightbend Reactive Platform
紹介されていた技術はコレ
Play Framework, Akka, Spark等で構成されていて、Scala / Javaで実装可能('ω'≡'ω'≡'ω'≡'ω')
PlayFramework
何がいいの?
- 非同期/ノンブロッキング
- WebSocketサポート
同期/ブロッキングするシステムだと、とある処理が完了するまで他の処理が待たされる。
非同期/ノンブロッキングするシステムだと、どんどん処理を進めていくことができる。
※シーケンス図の書き方があれなので、処理が短くなっている感じがしないが。。。
処理を非同期/ノンブロッキングにすると、高レスポンスなシステムを実現することができる。
Akka
- 並行処理と分散処理をサポートするActor system
- Supervision Model
- 位置透過性
Akkaはメッセージ駆動をサポートする。
Akkaによって、伸縮性と耐障害性を実現することができる。
スライドのP24から29あたり。
端から端までReactive
リアクティブシステムでは、非同期処理が基本になる。
"どこで同期するか"をデザインする。
感想
⬆︎に書いているものを使って、発電状態を監視するシステムのDEMOを見せてもらいました!
一つの監視システムがダメになっちゃったときに他のシステムが役割を代替することで、システム全体として障害が起こったことを表に出さないようになっているところが、すごい!!という感じでした!
@yugolf さん、発表ありがとうございました!!