SlideShare a Scribd company logo
Copyright © 2015 TIS Inc. All rights reserved.
Scala関西Summit2015
Typesafe  Reactive  Platformで作る
Reactive  System
2015.8.1
前出 祐吾
Copyright © 2015 TIS Inc. All rights reserved. 2
自己紹介
■ @yugolf  
■ 甲賀  ▶ 京都   ▶ 東京  
!
■ TIS株式会社  
■ 生産革新本部 生産革新部 生産技術R&D室  
■ 社内向けエンジニアリング基盤の整備 ▶▶
Copyright © 2015 TIS Inc. All rights reserved. 3
TIS、リアクティブコンサルはじめました
http://www.tis.jp/service_solution/goreactive/
Copyright © 2015 TIS Inc. All rights reserved. 4
Agenda
1. 	
  Reactive	
  Systemとは	
  
2. 	
  Reactive	
  Systemのための技術	
  
3. 	
  プチReactive体験
Copyright © 2015 TIS Inc. All rights reserved. 5
1.    Reactive	
  Systemとは
Copyright © 2015 TIS Inc. All rights reserved. 6
本日の話
http://www.reactivemanifesto.org/
Reactive	
  Programming:	
  
データの流れ(ストリーム)とデータの値の変化の伝播にフォーカス
したプログラムの設計モデル。	
  
・・・ の話ではない。
Reactive	
  System:
Copyright © 2015 TIS Inc. All rights reserved. 7
Reactive  manifesto
絵	
  
!
即応性	
  
弾力性	
  
耐障害性	
  
メッセージ駆動
http://www.reactivemanifesto.org/ja
Copyright © 2015 TIS Inc. All rights reserved. 8
アプリケーションへの高まる要求
50台のサーバで動かしていたけど、クラウド上で
1000コアの環境を作りたいんだ。
レスポンスを得るのに3秒かかるけど、
500ミリ秒くらいにしたいのよ。	
  
それと、年1回の2時間のメンテナンス
なんとかならないかしら。
最初は100ギガくらいだったけど、そ
ろそろペタ行くんじゃないかな。
Copyright © 2015 TIS Inc. All rights reserved. 9
Reactive  Systemとは
即応性と、耐障害性と、弾力性と、メッセージ駆動とを備えたシステム
http://www.reactivemanifesto.org/ja
Copyright © 2015 TIS Inc. All rights reserved. 10
Reactive  Systemの価値
届けたい価値
手段
支える原理
高レスポンス  
Responsive
伸縮性  
Elastic
耐障害性  
Resilient
メッセージ駆動  
Message-driven
Copyright © 2015 TIS Inc. All rights reserved. 11
Responsive
ユーザーの要求に迅速にレスポンスするシステム
高レスポンス  
Responsive
伸縮性  
Elastic
耐障害性  
Resilient
メッセージ駆動  
Message-driven
届けたい価値
手段
支える原理
Copyright © 2015 TIS Inc. All rights reserved. 12
Elastic
通常の負荷時だけでなく、一時的な高負荷状況でも、変動するワークロードに応
じて割り当てるリソースを増加・減少させることで応答時間を一定水準に保つ	
  
高レスポンス  
Responsive
伸縮性  
Elastic
耐障害性  
Resilient
メッセージ駆動  
Message-driven
届けたい価値
手段
支える原理
Copyright © 2015 TIS Inc. All rights reserved. 13
Resilient
部分的な障害が発生した時にもシステム全体を危険にさらすことなく回復さ
せる高レスポンスを維持する
高レスポンス  
Responsive
伸縮性  
Elastic
耐障害性  
Resilient
メッセージ駆動  
Message-driven
届けたい価値
手段
支える原理
Copyright © 2015 TIS Inc. All rights reserved. 14
Message  Driven
メッセージパッシングにより、コンポーネント間を疎結合にする
高レスポンス  
Responsive
伸縮性  
Elastic
耐障害性  
Resilient
メッセージ駆動  
Message-driven
届けたい価値
手段
支える原理
Copyright © 2015 TIS Inc. All rights reserved. 15
2.  Reactive	
  Systemのための技術
Copyright © 2015 TIS Inc. All rights reserved. 16
Typesafe  Reactive  Platform
JavaVM
アプリケーション
	
  AkkaPlay	
  Framework
Scala Java
Slick
高レスポンス  
Responsive
伸縮性  
Elastic
耐障害性  
Resilient
メッセージ駆動  
Message-driven
Copyright © 2015 TIS Inc. All rights reserved. 17
Play  Framework
• 非同期/ノンブロッキング	
  
• WebSocketサポート	
  
• Railsのような使いやすさ
Copyright © 2015 TIS Inc. All rights reserved. 18
これまで
def index = Action { implicit request =>

Ok(views.html.index())

}
クライアント サーバ
高レスポンス  
Responsive
ブロッキ
ング
Copyright © 2015 TIS Inc. All rights reserved. 19
Blocking
コーヒーください。
コーヒー1つ∼
は∼い
できた∼
・・・
コーヒーどうぞ∼	
  
100円です。
コーヒーください。
コーヒー1つ∼
Block
Copyright © 2015 TIS Inc. All rights reserved. 20
Non-blocking
コーヒーください。
コーヒー1つ∼
は∼い
コーヒーどうぞ∼	
  
コーヒーください。
コーヒー1つ∼
100円です。
100円です。 は∼い
できた∼
コーヒーください。
Copyright © 2015 TIS Inc. All rights reserved. 21
Reactive:  迅速なレスポンス
def index = Action.async {

val customer: Future[Customer] = getCustomer()

customer.map(c => Ok("Customer: " + c))

}
クライアント サーバ サービス
高レスポンス  
Responsive
ノンブロッ
キング
ノンブロッ
キング
Copyright © 2015 TIS Inc. All rights reserved. 22
Reactive++  :サーバからのプッシュ
クライアント サーバ
def socket = WebSocket.using[String] { request =>



// Log events to the console

val in = Iteratee.foreach[String](println).map { _ =>

println("Disconnected")

}



// Send a single 'Hello!' message

val out = Enumerator("Hello!")



(in, out)

}
高レスポンス  
Responsive
ノンブロッ
キング
WebSocket
https://www.playframework.com/documentation/2.4.x/ScalaWebSockets
Copyright © 2015 TIS Inc. All rights reserved. 23
Akka
• 並行処理と分散処理をサポートするActor	
  System	
  
• Supervision	
  Model	
  
• 位置透過性
Copyright © 2015 TIS Inc. All rights reserved. 24
Actor  System
sender
Actor
メッセージ駆動  
Message-driven
Mailbox
Mailbox
Copyright © 2015 TIS Inc. All rights reserved. 25
Reactive+++:  Actor  Model
def socket = WebSocket.acceptWithActor[String, String] { request => out
=>

MyWebSocketActor.props(out)

}
object MyWebSocketActor {

def props(out: ActorRef) = Props(new MyWebSocketActor(out))

}



class MyWebSocketActor(out: ActorRef) extends Actor {

def receive = {

case msg: String =>

out ! ("I received your message: " + msg)

}

}
クライアント
コントローラ
Actor
伸縮性  
Elastic
耐障害性  
Resilient
ノンブロッ
キング
WebSocket
Actor
https://www.playframework.com/documentation/2.4.x/ScalaWebSockets
Copyright © 2015 TIS Inc. All rights reserved. 26
Supervision  Modelで障害に強いシステムに
override val supervisorStrategy: SupervisorStrategy =

AllForOneStrategy(maxNrOfRetries = 100, withinTimeRange = 1 minute) {

case _ => Restart

}
スーパー	
  
バイザー
サブスーパー	
  
バイザー
Actor
Actor Actor
運命共同体	
  
-­‐OneForOne	
  
-­‐AllForOne
障害を外へ波及させない
耐障害性  
Resilient
子アクターの監視役
Copyright © 2015 TIS Inc. All rights reserved. 27
let	
  it	
  crash
Copyright © 2015 TIS Inc. All rights reserved. 28
Distribute
https://conductr.typesafe.com/docs/1.0.x/DeployingApplication
Copyright © 2015 TIS Inc. All rights reserved. 29
Reactive++++:  Actorを増減させ容易にスケール
クライアント
コントローラ
Actor
Actor
Actor
ルーティングは様々	
  
• ランダム	
  
• ラウンドロビン	
  
• ブロードキャスト	
  
• 早いの採用
伸縮性  
Elastic
ノンブロッ
キング
WebSocket
Actor
Copyright © 2015 TIS Inc. All rights reserved. 30
Reactive  Slick
Slick3
• FRM(Functional	
  Relational	
  Mapping)ライブラリ	
  
• Scalaのコレクションを扱うかのようにデータベースにアクセス出来る	
  
• DB処理は非同期に実行される
Copyright © 2015 TIS Inc. All rights reserved. 31
Supported  Databases
• MySQL	
  
• PostgreSQL	
  
• H2	
  
• HSQLDB/HyperSQL	
  
• SQLite	
  
• Derby/JavaDB	
  
• Microsoft	
  Access
• DB2	
  
• Microsoft	
  SQL	
  Server	
  
• Oracle
Slick	
  Extensions
Copyright © 2015 TIS Inc. All rights reserved. 32
Reactive+++++:  端から端までReactive
def search = Action.async { implicit request =>
…

val f:Future[Seq[EventRow]] = db.run(Events.filter(form))
f.map {

case events if (events.length > 0) =>

Ok(views.html.sample.search(
form.bindFromRequest, events))

case _ =>

… 高レスポンス  
Responsive
クライアント
コントローラ
ノンブロッ
キング
WebSocket
Actor
ノンブロッ
キング
Actor
データベース
Copyright © 2015 TIS Inc. All rights reserved. 33
端から端までReactive
基本Asynchronous、	
  
どこでWaitするかをデザインする
Copyright © 2015 TIS Inc. All rights reserved. 34
Reactive++++++:  Reactive  Streams
def search = Action.async { implicit request =>
…

val q = for(e <- Event) yield e.eventNm
val publisher:DatabasePublisher[String] = db.stream(q.result)
publisher.foreach {e => println(e)}
…
高レスポンス  
Responsive
クライアント
コントローラ
ノンブロッ
キング
WebSocket
Actor
ノンブロッ
キング
データベース
Actor
Copyright © 2015 TIS Inc. All rights reserved. 35
3.  プチReactive体験
Copyright © 2015 TIS Inc. All rights reserved. 36
プチReactive体験
発電してますか?
Copyright © 2015 TIS Inc. All rights reserved. 37
Reactive Solar Farm Monitor Solar Farm
① 何らかの原因で!
発電力が下がる
③ 故障が検知された!
ソーラパネルの!
アラートを表示
ID:	
  45412
② 全ソーラーパネルの!
電力(W)から故障!
しているパネルを検知
ソーラーパネルがそれぞれ定期的に!
発電した電力(W)のデータを送信!
・毎秒送信!
・パネル数は1万∼10万枚を想定

ID:	
  45412
Reactive  Solar  Farm  Monitor
Icon	
  made	
  by	
  Freepik	
  from	
  www.flaticon.com	
  is	
  licensed	
  under	
  CC	
  BY	
  3.0
Copyright © 2015 TIS Inc. All rights reserved. 38
Architecture
Monitor Analyzer
Simulator
http!
&!
WebSocket
Subscriber
Publisher
Broker
Copyright © 2015 TIS Inc. All rights reserved. 39
Message  Passing
Sum	
  
Calculator
Sum	
  
Calculator InspectorInspector
Packet
Mean Alert
Snapshot
Packet
Inspection	
  
Channel
Buffer	
  
Channel
Socket
Buffer
Broker
Execute
Take

Snapshot
Collect

Ghosts
Partial	
  Sum
Inspection	
  
Manager
Sum	
  
Calculator
Execute
Inspector
Done
Sample Sample
AnalyzerProxy
Mean	
  
Calculator
Execute
Measurement
Measurement
SocketSocket
Copyright © 2015 TIS Inc. All rights reserved. 40
Supervision  Model
AllForOne

Strategy
OneForOne

Strategy
Analysis	
  
Supervisor
Calculation	
  
Supervisor
Inspection	
  
Manager
Inspector
Inspection	
  
Channel
BufferBuffer	
  
Channel
Sum	
  
Calculator
Mean	
  
Calculator
Inspection	
  
Supervisor
AllForOne

Strategy
User
Copyright © 2015 TIS Inc. All rights reserved. 41
プチReactive体験  -  Responsive
ユーザーの要求に可能な限り迅速にレスポンスするシステム
高レスポンス  
Responsive
伸縮性  
Elastic
耐障害性  
Resilient
メッセージ駆動  
Message-driven
Copyright © 2015 TIS Inc. All rights reserved. 42
プチReactive体験
支えているのはメッセージ駆動のアーキテクチャ
Copyright © 2015 TIS Inc. All rights reserved. 43
4.  Go  Reactive  ×  3
Copyright © 2015 TIS Inc. All rights reserved. 44
Go  Reactive  1/3
• アーキクチャの詳細	
  
• 時間の都合で出来なかったデモ
http://reactive-­‐shinjuku.connpass.com/event/17991/
Copyright © 2015 TIS Inc. All rights reserved. 45
Go  Reactive  2/3
http://www.tis.jp/service_solution/goreactive/
go-­‐reactive@tis.co.jpリアクティブに興味のある方はご連絡下さい。
Copyright © 2015 TIS Inc. All rights reserved. 46
Go  Reactive  3/3
ソースコードはGitHubで公開しています。
太陽光発電に興味のある方はご連絡下さい。
https://github.com/tech-­‐sketch/reactive-­‐solar-­‐farm-­‐monitor
go-­‐reactive@tis.co.jp
THANK YOU

More Related Content

PDF
再帰で脱Javaライク
PDF
10分で分かるリアクティブシステム
PDF
リアクティブシステムとAkka
PDF
可用性を突き詰めたリアクティブシステム
PDF
Starting Reactive Systems with Lerna #reactive_shinjuku
PPTX
Ansible・ServerspecベースのOSS開発のCIの成功・失敗談
PPTX
Ansible・Serverspecベースの自動化フレームワークSHIFT wareの紹介
PPTX
ニイヨンサンロクゴ
再帰で脱Javaライク
10分で分かるリアクティブシステム
リアクティブシステムとAkka
可用性を突き詰めたリアクティブシステム
Starting Reactive Systems with Lerna #reactive_shinjuku
Ansible・ServerspecベースのOSS開発のCIの成功・失敗談
Ansible・Serverspecベースの自動化フレームワークSHIFT wareの紹介
ニイヨンサンロクゴ

What's hot (20)

PPTX
Diskless Compute Nodeを使ったImmutable OpenStack
PDF
商用導入実績世界1位! ミランティスが提供するOpenStackとお客様の導入事例
PDF
OpenStack東京サミットに向けて
PDF
OSC.Cloud 2012 インフラエンジニアがOpenStackを学ぶべきたった一つの理由
PDF
ベンダーロックインフリーのビジネスクラウドの世界
PPTX
ベンダーロックインフリーのビジネスクラウドの世界
PDF
OpenStackに必要な技術スキルとは
PPTX
OpenStack summit report 2016 in barcelona
PDF
Azure サポート チームの現場からお届けする落ちないサービスのために
PDF
デバイスパッケージを開発してみた @沖縄オープンラボ
PPTX
OSSのクラウド基盤 OpenStack / CloudStack
PPTX
Interop2016-openstack-user-group-mizuno
PPTX
OpenStackを使用するメリット
PDF
Why SoftLayer? なぜ、EC/通販統合パッケージリーダーのエルテックスは、SoftLayerを選んだのか?
PDF
OpenStack Days Tokyo 2016 HPE Presentation
PDF
【Interop Tokyo 2015】 DC 3: Cisco ACI と OpenStack / Cisco UCS Director
PDF
SIOS iQ:機械学習 I T O A VMware仮想環境の性能問題の原因分析 迅速な問題解決と未然防止を実現
PDF
グローバルファイル転送のベストプラクティス
PDF
OpenStackネットワーク実装の現状と運用 自動化開発の実際 第一部: OpenStackネットワーク実装の現状 – OpenStack最新情報セミナ...
PDF
クラウド運用のベストプラクティスを考える - OpenStack最新情報セミナー(2016年12月)
Diskless Compute Nodeを使ったImmutable OpenStack
商用導入実績世界1位! ミランティスが提供するOpenStackとお客様の導入事例
OpenStack東京サミットに向けて
OSC.Cloud 2012 インフラエンジニアがOpenStackを学ぶべきたった一つの理由
ベンダーロックインフリーのビジネスクラウドの世界
ベンダーロックインフリーのビジネスクラウドの世界
OpenStackに必要な技術スキルとは
OpenStack summit report 2016 in barcelona
Azure サポート チームの現場からお届けする落ちないサービスのために
デバイスパッケージを開発してみた @沖縄オープンラボ
OSSのクラウド基盤 OpenStack / CloudStack
Interop2016-openstack-user-group-mizuno
OpenStackを使用するメリット
Why SoftLayer? なぜ、EC/通販統合パッケージリーダーのエルテックスは、SoftLayerを選んだのか?
OpenStack Days Tokyo 2016 HPE Presentation
【Interop Tokyo 2015】 DC 3: Cisco ACI と OpenStack / Cisco UCS Director
SIOS iQ:機械学習 I T O A VMware仮想環境の性能問題の原因分析 迅速な問題解決と未然防止を実現
グローバルファイル転送のベストプラクティス
OpenStackネットワーク実装の現状と運用 自動化開発の実際 第一部: OpenStackネットワーク実装の現状 – OpenStack最新情報セミナ...
クラウド運用のベストプラクティスを考える - OpenStack最新情報セミナー(2016年12月)
Ad

Viewers also liked (20)

PDF
20160128 jjug Nightセミナー_Git実践入門
PDF
リアクティブ・アーキテクチャ ~大規模サービスにおける必要性と課題〜 #devsumi
PDF
SIerもはじめる わたしたちのDevOps #jjug_ccc
PDF
たとえ日本人同士でも必要な異文化理解力
PDF
第三回マイクロサービスアーキテクチャ読書会(後半)
PDF
Developers Summit 2014 「Play2/Scalaでドメイン駆動設計を利用した大規模Webアプリケーションのスクラム開発の勘所」
PPTX
CQRS+ESをAkka Persistenceを使って実装してみる。
PDF
Msa読書会#3前半
PPTX
JIRA / Confluence の 必須プラグインはこれだ
PDF
僕のチームビルディングには、Confluenceが必要だった
PDF
Preparing for distributed system failures using akka #ScalaMatsuri
PDF
⼤企業で実現するイマドキの内製開発
PDF
甲賀流Jenkins活用術
PDF
Effective Akka読書会2
PDF
akka-doc-ja
PDF
Akkaで実現するステートフルでスケーラブルなアーキテクチャ
PDF
Typesafe Reactive Platformで作るReactive System入門
PDF
バッチではじめてAkkaを使ってみた (refined)
PDF
[豆ナイト]Java small object programming
PDF
自己紹介からはじめよう
20160128 jjug Nightセミナー_Git実践入門
リアクティブ・アーキテクチャ ~大規模サービスにおける必要性と課題〜 #devsumi
SIerもはじめる わたしたちのDevOps #jjug_ccc
たとえ日本人同士でも必要な異文化理解力
第三回マイクロサービスアーキテクチャ読書会(後半)
Developers Summit 2014 「Play2/Scalaでドメイン駆動設計を利用した大規模Webアプリケーションのスクラム開発の勘所」
CQRS+ESをAkka Persistenceを使って実装してみる。
Msa読書会#3前半
JIRA / Confluence の 必須プラグインはこれだ
僕のチームビルディングには、Confluenceが必要だった
Preparing for distributed system failures using akka #ScalaMatsuri
⼤企業で実現するイマドキの内製開発
甲賀流Jenkins活用術
Effective Akka読書会2
akka-doc-ja
Akkaで実現するステートフルでスケーラブルなアーキテクチャ
Typesafe Reactive Platformで作るReactive System入門
バッチではじめてAkkaを使ってみた (refined)
[豆ナイト]Java small object programming
自己紹介からはじめよう
Ad

Similar to Typesafe Reactive Platformで作るReactive System (20)

PDF
Why Reactive Matters #ScalaMatsuri
PDF
Reactive Systems と Back Pressure
PDF
なぜリアクティブは重要か #ScalaMatsuri
PDF
Akkaの並行性
PPTX
Reactive Programming
PPTX
Spring 5に備えるリアクティブプログラミング入門
PDF
SpringOne Platform 2016 報告会「A Lite Rx API for the JVM」/ 井口 貝 @ SmartNews, Inc.
PDF
Reactive programming
PDF
SpringOne 2016 報告 Reactive APIの設計・実装・使用
PDF
Reactive Webアプリケーション - そしてSpring 5へ #jjug_ccc #ccc_ef3
PPTX
Spring I/O 2019 報告 Spring Frameworkのロードマップと5.2の新機能
PPTX
いまさらAkkaStream
PDF
BPStudy20121221
PPTX
Reactive
PDF
サービスをより“Stable”にする“ReactiveSystem”というアプローチ
PDF
APIdays Australia 2017 TOI #APIdaysAU
PDF
Akka stream
PDF
クラウドセキュリティ基礎 #seccamp
PDF
デブサミ2014-Stormで実現するビッグデータのリアルタイム処理プラットフォーム ~ストリームデータ処理から機械学習まで~
PDF
Play jjug2012spring
Why Reactive Matters #ScalaMatsuri
Reactive Systems と Back Pressure
なぜリアクティブは重要か #ScalaMatsuri
Akkaの並行性
Reactive Programming
Spring 5に備えるリアクティブプログラミング入門
SpringOne Platform 2016 報告会「A Lite Rx API for the JVM」/ 井口 貝 @ SmartNews, Inc.
Reactive programming
SpringOne 2016 報告 Reactive APIの設計・実装・使用
Reactive Webアプリケーション - そしてSpring 5へ #jjug_ccc #ccc_ef3
Spring I/O 2019 報告 Spring Frameworkのロードマップと5.2の新機能
いまさらAkkaStream
BPStudy20121221
Reactive
サービスをより“Stable”にする“ReactiveSystem”というアプローチ
APIdays Australia 2017 TOI #APIdaysAU
Akka stream
クラウドセキュリティ基礎 #seccamp
デブサミ2014-Stormで実現するビッグデータのリアルタイム処理プラットフォーム ~ストリームデータ処理から機械学習まで~
Play jjug2012spring

More from TIS Inc. (6)

PDF
AWSマネージドサービスとOSSによるミッションクリティカルなシステムの実現
PDF
Reactive Systems that focus on High Availability with Lerna
PDF
EventStormingワークショップ 〜かつてない図書館をモデリングしてみよう〜
PDF
JavaからAkkaハンズオン
PDF
Akka in Action workshop #ScalaMatsuri 2018
PDF
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)
AWSマネージドサービスとOSSによるミッションクリティカルなシステムの実現
Reactive Systems that focus on High Availability with Lerna
EventStormingワークショップ 〜かつてない図書館をモデリングしてみよう〜
JavaからAkkaハンズオン
Akka in Action workshop #ScalaMatsuri 2018
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)

Typesafe Reactive Platformで作るReactive System

  • 1. Copyright © 2015 TIS Inc. All rights reserved. Scala関西Summit2015 Typesafe  Reactive  Platformで作る Reactive  System 2015.8.1 前出 祐吾
  • 2. Copyright © 2015 TIS Inc. All rights reserved. 2 自己紹介 ■ @yugolf   ■ 甲賀  ▶ 京都   ▶ 東京   ! ■ TIS株式会社   ■ 生産革新本部 生産革新部 生産技術R&D室   ■ 社内向けエンジニアリング基盤の整備 ▶▶
  • 3. Copyright © 2015 TIS Inc. All rights reserved. 3 TIS、リアクティブコンサルはじめました http://www.tis.jp/service_solution/goreactive/
  • 4. Copyright © 2015 TIS Inc. All rights reserved. 4 Agenda 1.  Reactive  Systemとは   2.  Reactive  Systemのための技術   3.  プチReactive体験
  • 5. Copyright © 2015 TIS Inc. All rights reserved. 5 1.    Reactive  Systemとは
  • 6. Copyright © 2015 TIS Inc. All rights reserved. 6 本日の話 http://www.reactivemanifesto.org/ Reactive  Programming:   データの流れ(ストリーム)とデータの値の変化の伝播にフォーカス したプログラムの設計モデル。   ・・・ の話ではない。 Reactive  System:
  • 7. Copyright © 2015 TIS Inc. All rights reserved. 7 Reactive  manifesto 絵   ! 即応性   弾力性   耐障害性   メッセージ駆動 http://www.reactivemanifesto.org/ja
  • 8. Copyright © 2015 TIS Inc. All rights reserved. 8 アプリケーションへの高まる要求 50台のサーバで動かしていたけど、クラウド上で 1000コアの環境を作りたいんだ。 レスポンスを得るのに3秒かかるけど、 500ミリ秒くらいにしたいのよ。   それと、年1回の2時間のメンテナンス なんとかならないかしら。 最初は100ギガくらいだったけど、そ ろそろペタ行くんじゃないかな。
  • 9. Copyright © 2015 TIS Inc. All rights reserved. 9 Reactive  Systemとは 即応性と、耐障害性と、弾力性と、メッセージ駆動とを備えたシステム http://www.reactivemanifesto.org/ja
  • 10. Copyright © 2015 TIS Inc. All rights reserved. 10 Reactive  Systemの価値 届けたい価値 手段 支える原理 高レスポンス   Responsive 伸縮性   Elastic 耐障害性   Resilient メッセージ駆動   Message-driven
  • 11. Copyright © 2015 TIS Inc. All rights reserved. 11 Responsive ユーザーの要求に迅速にレスポンスするシステム 高レスポンス   Responsive 伸縮性   Elastic 耐障害性   Resilient メッセージ駆動   Message-driven 届けたい価値 手段 支える原理
  • 12. Copyright © 2015 TIS Inc. All rights reserved. 12 Elastic 通常の負荷時だけでなく、一時的な高負荷状況でも、変動するワークロードに応 じて割り当てるリソースを増加・減少させることで応答時間を一定水準に保つ   高レスポンス   Responsive 伸縮性   Elastic 耐障害性   Resilient メッセージ駆動   Message-driven 届けたい価値 手段 支える原理
  • 13. Copyright © 2015 TIS Inc. All rights reserved. 13 Resilient 部分的な障害が発生した時にもシステム全体を危険にさらすことなく回復さ せる高レスポンスを維持する 高レスポンス   Responsive 伸縮性   Elastic 耐障害性   Resilient メッセージ駆動   Message-driven 届けたい価値 手段 支える原理
  • 14. Copyright © 2015 TIS Inc. All rights reserved. 14 Message  Driven メッセージパッシングにより、コンポーネント間を疎結合にする 高レスポンス   Responsive 伸縮性   Elastic 耐障害性   Resilient メッセージ駆動   Message-driven 届けたい価値 手段 支える原理
  • 15. Copyright © 2015 TIS Inc. All rights reserved. 15 2.  Reactive  Systemのための技術
  • 16. Copyright © 2015 TIS Inc. All rights reserved. 16 Typesafe  Reactive  Platform JavaVM アプリケーション  AkkaPlay  Framework Scala Java Slick 高レスポンス   Responsive 伸縮性   Elastic 耐障害性   Resilient メッセージ駆動   Message-driven
  • 17. Copyright © 2015 TIS Inc. All rights reserved. 17 Play  Framework • 非同期/ノンブロッキング   • WebSocketサポート   • Railsのような使いやすさ
  • 18. Copyright © 2015 TIS Inc. All rights reserved. 18 これまで def index = Action { implicit request =>
 Ok(views.html.index())
 } クライアント サーバ 高レスポンス   Responsive ブロッキ ング
  • 19. Copyright © 2015 TIS Inc. All rights reserved. 19 Blocking コーヒーください。 コーヒー1つ∼ は∼い できた∼ ・・・ コーヒーどうぞ∼   100円です。 コーヒーください。 コーヒー1つ∼ Block
  • 20. Copyright © 2015 TIS Inc. All rights reserved. 20 Non-blocking コーヒーください。 コーヒー1つ∼ は∼い コーヒーどうぞ∼   コーヒーください。 コーヒー1つ∼ 100円です。 100円です。 は∼い できた∼ コーヒーください。
  • 21. Copyright © 2015 TIS Inc. All rights reserved. 21 Reactive:  迅速なレスポンス def index = Action.async {
 val customer: Future[Customer] = getCustomer()
 customer.map(c => Ok("Customer: " + c))
 } クライアント サーバ サービス 高レスポンス   Responsive ノンブロッ キング ノンブロッ キング
  • 22. Copyright © 2015 TIS Inc. All rights reserved. 22 Reactive++  :サーバからのプッシュ クライアント サーバ def socket = WebSocket.using[String] { request =>
 
 // Log events to the console
 val in = Iteratee.foreach[String](println).map { _ =>
 println("Disconnected")
 }
 
 // Send a single 'Hello!' message
 val out = Enumerator("Hello!")
 
 (in, out)
 } 高レスポンス   Responsive ノンブロッ キング WebSocket https://www.playframework.com/documentation/2.4.x/ScalaWebSockets
  • 23. Copyright © 2015 TIS Inc. All rights reserved. 23 Akka • 並行処理と分散処理をサポートするActor  System   • Supervision  Model   • 位置透過性
  • 24. Copyright © 2015 TIS Inc. All rights reserved. 24 Actor  System sender Actor メッセージ駆動   Message-driven Mailbox Mailbox
  • 25. Copyright © 2015 TIS Inc. All rights reserved. 25 Reactive+++:  Actor  Model def socket = WebSocket.acceptWithActor[String, String] { request => out =>
 MyWebSocketActor.props(out)
 } object MyWebSocketActor {
 def props(out: ActorRef) = Props(new MyWebSocketActor(out))
 }
 
 class MyWebSocketActor(out: ActorRef) extends Actor {
 def receive = {
 case msg: String =>
 out ! ("I received your message: " + msg)
 }
 } クライアント コントローラ Actor 伸縮性   Elastic 耐障害性   Resilient ノンブロッ キング WebSocket Actor https://www.playframework.com/documentation/2.4.x/ScalaWebSockets
  • 26. Copyright © 2015 TIS Inc. All rights reserved. 26 Supervision  Modelで障害に強いシステムに override val supervisorStrategy: SupervisorStrategy =
 AllForOneStrategy(maxNrOfRetries = 100, withinTimeRange = 1 minute) {
 case _ => Restart
 } スーパー   バイザー サブスーパー   バイザー Actor Actor Actor 運命共同体   -­‐OneForOne   -­‐AllForOne 障害を外へ波及させない 耐障害性   Resilient 子アクターの監視役
  • 27. Copyright © 2015 TIS Inc. All rights reserved. 27 let  it  crash
  • 28. Copyright © 2015 TIS Inc. All rights reserved. 28 Distribute https://conductr.typesafe.com/docs/1.0.x/DeployingApplication
  • 29. Copyright © 2015 TIS Inc. All rights reserved. 29 Reactive++++:  Actorを増減させ容易にスケール クライアント コントローラ Actor Actor Actor ルーティングは様々   • ランダム   • ラウンドロビン   • ブロードキャスト   • 早いの採用 伸縮性   Elastic ノンブロッ キング WebSocket Actor
  • 30. Copyright © 2015 TIS Inc. All rights reserved. 30 Reactive  Slick Slick3 • FRM(Functional  Relational  Mapping)ライブラリ   • Scalaのコレクションを扱うかのようにデータベースにアクセス出来る   • DB処理は非同期に実行される
  • 31. Copyright © 2015 TIS Inc. All rights reserved. 31 Supported  Databases • MySQL   • PostgreSQL   • H2   • HSQLDB/HyperSQL   • SQLite   • Derby/JavaDB   • Microsoft  Access • DB2   • Microsoft  SQL  Server   • Oracle Slick  Extensions
  • 32. Copyright © 2015 TIS Inc. All rights reserved. 32 Reactive+++++:  端から端までReactive def search = Action.async { implicit request => …
 val f:Future[Seq[EventRow]] = db.run(Events.filter(form)) f.map {
 case events if (events.length > 0) =>
 Ok(views.html.sample.search( form.bindFromRequest, events))
 case _ =>
 … 高レスポンス   Responsive クライアント コントローラ ノンブロッ キング WebSocket Actor ノンブロッ キング Actor データベース
  • 33. Copyright © 2015 TIS Inc. All rights reserved. 33 端から端までReactive 基本Asynchronous、   どこでWaitするかをデザインする
  • 34. Copyright © 2015 TIS Inc. All rights reserved. 34 Reactive++++++:  Reactive  Streams def search = Action.async { implicit request => …
 val q = for(e <- Event) yield e.eventNm val publisher:DatabasePublisher[String] = db.stream(q.result) publisher.foreach {e => println(e)} … 高レスポンス   Responsive クライアント コントローラ ノンブロッ キング WebSocket Actor ノンブロッ キング データベース Actor
  • 35. Copyright © 2015 TIS Inc. All rights reserved. 35 3.  プチReactive体験
  • 36. Copyright © 2015 TIS Inc. All rights reserved. 36 プチReactive体験 発電してますか?
  • 37. Copyright © 2015 TIS Inc. All rights reserved. 37 Reactive Solar Farm Monitor Solar Farm ① 何らかの原因で! 発電力が下がる ③ 故障が検知された! ソーラパネルの! アラートを表示 ID:  45412 ② 全ソーラーパネルの! 電力(W)から故障! しているパネルを検知 ソーラーパネルがそれぞれ定期的に! 発電した電力(W)のデータを送信! ・毎秒送信! ・パネル数は1万∼10万枚を想定
 ID:  45412 Reactive  Solar  Farm  Monitor Icon  made  by  Freepik  from  www.flaticon.com  is  licensed  under  CC  BY  3.0
  • 38. Copyright © 2015 TIS Inc. All rights reserved. 38 Architecture Monitor Analyzer Simulator http! &! WebSocket Subscriber Publisher Broker
  • 39. Copyright © 2015 TIS Inc. All rights reserved. 39 Message  Passing Sum   Calculator Sum   Calculator InspectorInspector Packet Mean Alert Snapshot Packet Inspection   Channel Buffer   Channel Socket Buffer Broker Execute Take
 Snapshot Collect
 Ghosts Partial  Sum Inspection   Manager Sum   Calculator Execute Inspector Done Sample Sample AnalyzerProxy Mean   Calculator Execute Measurement Measurement SocketSocket
  • 40. Copyright © 2015 TIS Inc. All rights reserved. 40 Supervision  Model AllForOne
 Strategy OneForOne
 Strategy Analysis   Supervisor Calculation   Supervisor Inspection   Manager Inspector Inspection   Channel BufferBuffer   Channel Sum   Calculator Mean   Calculator Inspection   Supervisor AllForOne
 Strategy User
  • 41. Copyright © 2015 TIS Inc. All rights reserved. 41 プチReactive体験  -  Responsive ユーザーの要求に可能な限り迅速にレスポンスするシステム 高レスポンス   Responsive 伸縮性   Elastic 耐障害性   Resilient メッセージ駆動   Message-driven
  • 42. Copyright © 2015 TIS Inc. All rights reserved. 42 プチReactive体験 支えているのはメッセージ駆動のアーキテクチャ
  • 43. Copyright © 2015 TIS Inc. All rights reserved. 43 4.  Go  Reactive  ×  3
  • 44. Copyright © 2015 TIS Inc. All rights reserved. 44 Go  Reactive  1/3 • アーキクチャの詳細   • 時間の都合で出来なかったデモ http://reactive-­‐shinjuku.connpass.com/event/17991/
  • 45. Copyright © 2015 TIS Inc. All rights reserved. 45 Go  Reactive  2/3 http://www.tis.jp/service_solution/goreactive/ go-­‐reactive@tis.co.jpリアクティブに興味のある方はご連絡下さい。
  • 46. Copyright © 2015 TIS Inc. All rights reserved. 46 Go  Reactive  3/3 ソースコードはGitHubで公開しています。 太陽光発電に興味のある方はご連絡下さい。 https://github.com/tech-­‐sketch/reactive-­‐solar-­‐farm-­‐monitor go-­‐reactive@tis.co.jp