Reactive programming

Post on 27-Aug-2014

1.745 views 9 download

Tags:

description

 

Transcript of Reactive programming

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