Copyright © 2016 TIS Inc. All rights reserved.
Akkaで実現するステートフルでスケー
ラブルなアーキテクチャ
2016.10.8 Scala関西Summit
前出祐吾
杉本貴史
with デモ
Copyright © 2016 TIS Inc. All rights reserved. 2
自己紹介
TIS株式会社
リアクティブシステム コンサルティングサービス
前出祐吾
@yugolf
杉本貴史
@tksugimoto
https://twitter.com/okapies/status/781439220330164225
Copyright © 2016 TIS Inc. All rights reserved. 3
今日の話
Akka Actor
Akka Cluster
Akka Cluster Sharding
Akka Persistence
with デモ
知ってる人は、
デモで遊んでいてください。
Copyright © 2016 TIS Inc. All rights reserved. 4
スケールアップ vs スケールアウト
ステートレス vs ステートフル
ワークロード増加の備えは万全?
Copyright © 2016 TIS Inc. All rights reserved.
スケーラブル、かつ、ステートフルにするには
5
状態を共有する
or
毎回同じノードに振り分ける
Copyright © 2016 TIS Inc. All rights reserved.
war
war
6
Load	Balancer
毎回同じノードに振り分ける
Sticky Session
状態を共有する
Session Replication
スケーラブル、かつ、ステートフルにするには
Copyright © 2016 TIS Inc. All rights reserved.
Akkaの場合
7
毎回同じノードに振り分ける
状態を共有する
or
Copyright © 2016 TIS Inc. All rights reserved.
必要な知識
8
Akka Actor
Akka Cluster
Akka Cluster Sharding
Akka Persistence
Copyright © 2016 TIS Inc. All rights reserved.
アクターモデル
9
Akka Actor
Akka Cluster
Akka Cluster Sharding
Akka Persistence
参加者
状
Actorはメッセージを到着順に処理するだけ
なのでシンプルに非同期処理を実装できる
¥3,000
yugolf
幹事さん
tksugimoto
negoro
Copyright © 2016 TIS Inc. All rights reserved. 10
フロントエンドとバックエンド
front-end back-end
Akka Actor
Akka Cluster
Akka Cluster Sharding
Akka Persistence
Copyright © 2016 TIS Inc. All rights reserved.
Cluster
node2
node1
ワークロードに応じてスケール
11
Akka Actor
Akka Cluster
Akka Cluster Sharding
Akka Persistence
front-end
Copyright © 2016 TIS Inc. All rights reserved.
Cluster
node2
node1
12
Alice
Bob
John
Nina
Actor(Entity)が状態を保つ場合
状
毎回同じノードに
振り分けたい!
Akka Actor
Akka Cluster
Akka Cluster Sharding
Akka Persistence
注)イメージ図
front-end
Copyright © 2016 TIS Inc. All rights reserved.
Cluster
13
Akka Actor
Akka Cluster
Akka Cluster Sharding
Akka Persistence Alice
John
状
Shard
Coordinator
Shardの所在は
Coordinatorに尋ねる
Shardとして扱う
ShardRegion
ShardRegion
shard
George
Sunny
node1
node2
Copyright © 2016 TIS Inc. All rights reserved. 14
Alice
George
Sunny
John
状
ノードが増えるとリバランシングされる
Akka Actor
Akka Cluster
Akka Cluster Sharding
Akka Persistence
サーバの負荷を
できるだけ均等に
node1
node2
node3
shard
Copyright © 2016 TIS Inc. All rights reserved. 15
障害が起こるとどうなる?
Copyright © 2016 TIS Inc. All rights reserved. 16
Alice
状態が失われる?
George
Sunny
John
状
ノードがダウンすると
front-end
Copyright © 2016 TIS Inc. All rights reserved. 17
Akka Actor
Akka Cluster
Akka Cluster Sharding
Akka Persistence
Alice
状態を永続化しておく
George
Sunny
John
状
ノードのダウンに備えて
Copyright © 2016 TIS Inc. All rights reserved. 18
Akka Actor
Akka Cluster
Akka Cluster Sharding
Akka Persistence
Alice
永続化した情報から
Entityを復元
George
Sunny
John
状
ノードがダウンすると
Copyright © 2016 TIS Inc. All rights reserved. 19
Akka Actor
Akka Cluster
Akka Cluster Sharding
Akka Persistence
Alice
リバランスされる
John
状
次のダウンに備えて、ノードを追加
George
Sunny
Copyright © 2016 TIS Inc. All rights reserved. 20
デモ
Copyright © 2016 TIS Inc. All rights reserved.
Cluster
21
Alice
John
3
5
Shard
Coordinator
じゃんけん!!
ShardRegion
ShardRegion
shard
Win!!
-Ranking-	
1.John		5	
2.Alice	3	
3.Nina		2
Ranking
4
cassandra
Copyright © 2016 TIS Inc. All rights reserved.
何が起こったか?
22
• 4ノードのうち1つのノードをダウン
• ダウンしたノードの代わりに別のノードでActorを復元
• ダウンしてから復元されるまでに起こったこと
• ダウンしたノードの勝数カウントがストップ

したが、復旧後に正しくカウントされた
じゃんけん ランキング
運のいい人
(node1,2,3)
○
△(一部更新さ
れない)運の悪い人
(node4)
△(結果が不明)
Copyright © 2016 TIS Inc. All rights reserved.
レジリエント
23
部分的な障害が発生したときも、
動かし続けることができ、
元の状態に回復する
http://www.reactivemanifesto.org/
Copyright © 2016 TIS Inc. All rights reserved.
必ずメッセージを届けたい
24
At least once
勝った!
オッケー
勝った!ってば
❌
Copyright © 2016 TIS Inc. All rights reserved.
まとめ
25
で実現するステートフルでスケーラブルなシステムは
レジリエンスも実現できる
ただし、スケーラビリティやレジリエンスは
レスポンスタイムとのトレードオフ
実現したい性能要件に合わせた設計をしましょう
メッセージの信頼性もね
Akka Actor
Akka Cluster
Akka Cluster Sharding
Akka Persistence
Copyright © 2016 TIS Inc. All rights reserved.
• ダウンしてから復元されるまでに起こったこと
• サーバダウンしたユーザの勝数カウントが

ストップしたが、復旧後に正しくカウントされた
レジリエンス設計
26
じゃんけん ランキング
運のいい人
(node1,2,3)
○
△(一部更新さ
れない)運の悪い人
(node4)
△(結果が不明)
重要
もっと	
重要
Copyright © 2016 TIS Inc. All rights reserved.
TISリアクティブシステム コンサルティングサービス
27
• PoC支援
• 設計レビュー
• コードレビュー
      etc
リアクティブ TIS
THANK YOU

Akkaで実現するステートフルでスケーラブルなアーキテクチャ

  • 1.
    Copyright © 2016TIS Inc. All rights reserved. Akkaで実現するステートフルでスケー ラブルなアーキテクチャ 2016.10.8 Scala関西Summit 前出祐吾 杉本貴史 with デモ
  • 2.
    Copyright © 2016TIS Inc. All rights reserved. 2 自己紹介 TIS株式会社 リアクティブシステム コンサルティングサービス 前出祐吾 @yugolf 杉本貴史 @tksugimoto https://twitter.com/okapies/status/781439220330164225
  • 3.
    Copyright © 2016TIS Inc. All rights reserved. 3 今日の話 Akka Actor Akka Cluster Akka Cluster Sharding Akka Persistence with デモ 知ってる人は、 デモで遊んでいてください。
  • 4.
    Copyright © 2016TIS Inc. All rights reserved. 4 スケールアップ vs スケールアウト ステートレス vs ステートフル ワークロード増加の備えは万全?
  • 5.
    Copyright © 2016TIS Inc. All rights reserved. スケーラブル、かつ、ステートフルにするには 5 状態を共有する or 毎回同じノードに振り分ける
  • 6.
    Copyright © 2016TIS Inc. All rights reserved. war war 6 Load Balancer 毎回同じノードに振り分ける Sticky Session 状態を共有する Session Replication スケーラブル、かつ、ステートフルにするには
  • 7.
    Copyright © 2016TIS Inc. All rights reserved. Akkaの場合 7 毎回同じノードに振り分ける 状態を共有する or
  • 8.
    Copyright © 2016TIS Inc. All rights reserved. 必要な知識 8 Akka Actor Akka Cluster Akka Cluster Sharding Akka Persistence
  • 9.
    Copyright © 2016TIS Inc. All rights reserved. アクターモデル 9 Akka Actor Akka Cluster Akka Cluster Sharding Akka Persistence 参加者 状 Actorはメッセージを到着順に処理するだけ なのでシンプルに非同期処理を実装できる ¥3,000 yugolf 幹事さん tksugimoto negoro
  • 10.
    Copyright © 2016TIS Inc. All rights reserved. 10 フロントエンドとバックエンド front-end back-end Akka Actor Akka Cluster Akka Cluster Sharding Akka Persistence
  • 11.
    Copyright © 2016TIS Inc. All rights reserved. Cluster node2 node1 ワークロードに応じてスケール 11 Akka Actor Akka Cluster Akka Cluster Sharding Akka Persistence front-end
  • 12.
    Copyright © 2016TIS Inc. All rights reserved. Cluster node2 node1 12 Alice Bob John Nina Actor(Entity)が状態を保つ場合 状 毎回同じノードに 振り分けたい! Akka Actor Akka Cluster Akka Cluster Sharding Akka Persistence 注)イメージ図 front-end
  • 13.
    Copyright © 2016TIS Inc. All rights reserved. Cluster 13 Akka Actor Akka Cluster Akka Cluster Sharding Akka Persistence Alice John 状 Shard Coordinator Shardの所在は Coordinatorに尋ねる Shardとして扱う ShardRegion ShardRegion shard George Sunny node1 node2
  • 14.
    Copyright © 2016TIS Inc. All rights reserved. 14 Alice George Sunny John 状 ノードが増えるとリバランシングされる Akka Actor Akka Cluster Akka Cluster Sharding Akka Persistence サーバの負荷を できるだけ均等に node1 node2 node3 shard
  • 15.
    Copyright © 2016TIS Inc. All rights reserved. 15 障害が起こるとどうなる?
  • 16.
    Copyright © 2016TIS Inc. All rights reserved. 16 Alice 状態が失われる? George Sunny John 状 ノードがダウンすると front-end
  • 17.
    Copyright © 2016TIS Inc. All rights reserved. 17 Akka Actor Akka Cluster Akka Cluster Sharding Akka Persistence Alice 状態を永続化しておく George Sunny John 状 ノードのダウンに備えて
  • 18.
    Copyright © 2016TIS Inc. All rights reserved. 18 Akka Actor Akka Cluster Akka Cluster Sharding Akka Persistence Alice 永続化した情報から Entityを復元 George Sunny John 状 ノードがダウンすると
  • 19.
    Copyright © 2016TIS Inc. All rights reserved. 19 Akka Actor Akka Cluster Akka Cluster Sharding Akka Persistence Alice リバランスされる John 状 次のダウンに備えて、ノードを追加 George Sunny
  • 20.
    Copyright © 2016TIS Inc. All rights reserved. 20 デモ
  • 21.
    Copyright © 2016TIS Inc. All rights reserved. Cluster 21 Alice John 3 5 Shard Coordinator じゃんけん!! ShardRegion ShardRegion shard Win!! -Ranking- 1.John 5 2.Alice 3 3.Nina 2 Ranking 4 cassandra
  • 22.
    Copyright © 2016TIS Inc. All rights reserved. 何が起こったか? 22 • 4ノードのうち1つのノードをダウン • ダウンしたノードの代わりに別のノードでActorを復元 • ダウンしてから復元されるまでに起こったこと • ダウンしたノードの勝数カウントがストップ
 したが、復旧後に正しくカウントされた じゃんけん ランキング 運のいい人 (node1,2,3) ○ △(一部更新さ れない)運の悪い人 (node4) △(結果が不明)
  • 23.
    Copyright © 2016TIS Inc. All rights reserved. レジリエント 23 部分的な障害が発生したときも、 動かし続けることができ、 元の状態に回復する http://www.reactivemanifesto.org/
  • 24.
    Copyright © 2016TIS Inc. All rights reserved. 必ずメッセージを届けたい 24 At least once 勝った! オッケー 勝った!ってば ❌
  • 25.
    Copyright © 2016TIS Inc. All rights reserved. まとめ 25 で実現するステートフルでスケーラブルなシステムは レジリエンスも実現できる ただし、スケーラビリティやレジリエンスは レスポンスタイムとのトレードオフ 実現したい性能要件に合わせた設計をしましょう メッセージの信頼性もね Akka Actor Akka Cluster Akka Cluster Sharding Akka Persistence
  • 26.
    Copyright © 2016TIS Inc. All rights reserved. • ダウンしてから復元されるまでに起こったこと • サーバダウンしたユーザの勝数カウントが
 ストップしたが、復旧後に正しくカウントされた レジリエンス設計 26 じゃんけん ランキング 運のいい人 (node1,2,3) ○ △(一部更新さ れない)運の悪い人 (node4) △(結果が不明) 重要 もっと 重要
  • 27.
    Copyright © 2016TIS Inc. All rights reserved. TISリアクティブシステム コンサルティングサービス 27 • PoC支援 • 設計レビュー • コードレビュー       etc リアクティブ TIS
  • 28.