reactive programming
Post on 27-Aug-2014
1.746 Views
Preview:
DESCRIPTION
TRANSCRIPT
Reactive ProgramingYasuki Okumura
自己紹介
● シャノン所属● Play + Scala歴: 1.5 年● PHP, Javascript, C++, python, ruby, Octave● Web full stack engineer ● 趣味: ジム, MOOC受講
Reactive とは?
http://www.reactivemanifesto.org/
背景
*クラウド = Scale out/in up/down*Scale Up = CPUコア数UP*ユーザ = 人間 + 物(Intenet of Things)
Play
Reactive Programing
1. Non-blocking2. Future3. Akka4. DB
Non-blocking
Blocking: 無駄にThreadを占有してしまうこと
Non-blocking: Non-blocking IO を使っている
● Nginx● WS● Reactive mongo
Future[A] - Await
● 基本的には使わない。● 例外
○ テストコード○ アプリケーション起動時 or 終了時
Future[A] - map
def map[B](f: A => B): Future[B]
val json: Future[Option[JsValue]] = WS.url(“http://example.com/index”).get.map { res => if(200 == res.status) { Some(res.json) } else { None } }
Future[A] - flatMap
def flatMap[B](f: A => Future[B]): Future[B]val json: Future[Option[JsValue]] = WS.url(url1).get.flatMap { res => val id = (res.json ¥ “id” ).as[String] WS.url(url2 + id).get.map{ res => if(200 == res.status){ Some(res.json) } else { None } } }
Future[A] - Future.successful
def successful(result:B): Future[B]val json: Future[Option[JsValue]] = WS.url(url1).get.flatMap { res => if( 200 == res.status ){ val id = (res.json ¥ “id” ).as[String] WS.url(url2 + id).get.map{ res => if(200 == res.status){ Some(res.json) } else { None } } } else { Future.successful(None) } }
データの操作は?
● synchronized ?
→ Deadlock or Livelock, Blocking
class Counter { private var count = 0 def increment = this.synchronized { count = count + 1 } def getCount = count}
Akka
● 分散処理フレームワーク● Actor model
Actor
class Counter extends Actor { var count = 0 def receive = { case “incr” => count += 1 case “get” => sender ! count }}
DBは?
Database Challenge
● 速さ● 量● 複雑なデータ● マルチコアでのConcurrency control
Modern database - VoltDB
● disk -> In-memory● Multi thread -> single thread● Dynamic lock -> Timestamp order● Data log -> Command log● SQL -> Stored procedure● Auto partitioning
まとめ
● 時代が代わり求められている物も変わって来ている
-> 新しいアーキテクチャが必要
参考
https://class.coursera.org/reactive-001
http://voltdb.com/stonebraker-says
top related