28
Copyright © 2016 TIS Inc. All rights reserved. Akkaで実現するステートフルでスケー ラブルなアーキテクチャ 2016.10.8 Scala関西Summit 前出祐吾 杉本貴史 with デモ

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

  • Upload
    tis-inc

  • View
    1.148

  • Download
    0

Embed Size (px)

Citation preview

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

Copyright © 2016 TIS Inc. All rights reserved.

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

前出祐吾杉本貴史

with デモ

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

Copyright © 2016 TIS Inc. All rights reserved. 2

自己紹介

TIS株式会社 リアクティブシステム コンサルティングサービス

前出祐吾 @yugolf

杉本貴史 @tksugimoto

https://twitter.com/okapies/status/781439220330164225

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

Copyright © 2016 TIS Inc. All rights reserved. 3

今日の話

Akka Actor Akka Cluster Akka Cluster Sharding Akka Persistence with デモ

知ってる人は、 デモで遊んでいてください。

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

Copyright © 2016 TIS Inc. All rights reserved. 4

スケールアップ vs スケールアウト

ステートレス vs ステートフル

ワークロード増加の備えは万全?

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

Copyright © 2016 TIS Inc. All rights reserved.

スケーラブル、かつ、ステートフルにするには

5

状態を共有する

or

毎回同じノードに振り分ける

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

Copyright © 2016 TIS Inc. All rights reserved.

war

war

6

LoadBalancer

毎回同じノードに振り分ける Sticky Session

状態を共有する Session Replication

スケーラブル、かつ、ステートフルにするには

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

Copyright © 2016 TIS Inc. All rights reserved.

Akkaの場合

7

毎回同じノードに振り分ける

状態を共有する

or

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

Copyright © 2016 TIS Inc. All rights reserved.

必要な知識

8

Akka Actor Akka Cluster

Akka Cluster Sharding Akka Persistence

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

Copyright © 2016 TIS Inc. All rights reserved.

アクターモデル

9

Akka Actor Akka Cluster Akka Cluster Sharding Akka Persistence

参加者

Actorはメッセージを到着順に処理するだけなのでシンプルに非同期処理を実装できる

¥3,000

yugolf

幹事さん

tksugimoto

negoro

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

Copyright © 2016 TIS Inc. All rights reserved. 10

フロントエンドとバックエンド

front-end back-end

Akka Actor Akka Cluster Akka Cluster Sharding Akka Persistence

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

Copyright © 2016 TIS Inc. All rights reserved.

Cluster

node2

node1

ワークロードに応じてスケール

11

Akka Actor

Akka Cluster Akka Cluster Sharding Akka Persistence

front-end

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

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

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

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

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

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

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

Copyright © 2016 TIS Inc. All rights reserved. 15

障害が起こるとどうなる?

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

Copyright © 2016 TIS Inc. All rights reserved. 16

Alice

状態が失われる?

George

Sunny

John

状ノードがダウンすると

front-end

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

Copyright © 2016 TIS Inc. All rights reserved. 17

Akka Actor Akka Cluster Akka Cluster Sharding

Akka Persistence

Alice

状態を永続化しておく

George

Sunny

John

状ノードのダウンに備えて

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

Copyright © 2016 TIS Inc. All rights reserved. 18

Akka Actor Akka Cluster Akka Cluster Sharding

Akka Persistence

Alice

永続化した情報から Entityを復元

George

Sunny

John

状ノードがダウンすると

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

Copyright © 2016 TIS Inc. All rights reserved. 19

Akka Actor Akka Cluster Akka Cluster Sharding

Akka Persistence

Alice

リバランスされる

John

状次のダウンに備えて、ノードを追加

George

Sunny

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

Copyright © 2016 TIS Inc. All rights reserved. 20

デモ

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

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

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

Copyright © 2016 TIS Inc. All rights reserved.

何が起こったか?

22

• 4ノードのうち1つのノードをダウン • ダウンしたノードの代わりに別のノードでActorを復元

• ダウンしてから復元されるまでに起こったこと

• ダウンしたノードの勝数カウントがストップしたが、復旧後に正しくカウントされた

じゃんけん ランキング運のいい人

(node1,2,3) ○ △(一部更新されない)運の悪い人

(node4) △(結果が不明)

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

Copyright © 2016 TIS Inc. All rights reserved.

レジリエント

23

部分的な障害が発生したときも、 動かし続けることができ、

元の状態に回復する

http://www.reactivemanifesto.org/

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

Copyright © 2016 TIS Inc. All rights reserved.

必ずメッセージを届けたい

24

At least once

勝った!

オッケー

勝った!ってば

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

Copyright © 2016 TIS Inc. All rights reserved.

まとめ

25

で実現するステートフルでスケーラブルなシステムは レジリエンスも実現できる

ただし、スケーラビリティやレジリエンスは レスポンスタイムとのトレードオフ

実現したい性能要件に合わせた設計をしましょう

メッセージの信頼性もね

Akka Actor Akka Cluster Akka Cluster Sharding Akka Persistence

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

Copyright © 2016 TIS Inc. All rights reserved.

• ダウンしてから復元されるまでに起こったこと

• サーバダウンしたユーザの勝数カウントがストップしたが、復旧後に正しくカウントされた

レジリエンス設計

26

じゃんけん ランキング運のいい人

(node1,2,3) ○ △(一部更新されない)運の悪い人

(node4) △(結果が不明)

重要

もっと

重要

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

Copyright © 2016 TIS Inc. All rights reserved.

TISリアクティブシステム コンサルティングサービス

27

• PoC支援 • 設計レビュー • コードレビュー       etc

リアクティブ TIS

リアクティブ TIS

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

THANK YOU