Upload
tis-inc
View
1.148
Download
0
Embed Size (px)
Citation preview
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
LoadBalancer
毎回同じノードに振り分ける 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.John52.Alice33.Nina2
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
リアクティブ TIS
THANK YOU