MD-SAL Clustering Internals Moiz Raja Open Daylight Summit 2015 - - PowerPoint PPT Presentation

md sal clustering internals
SMART_READER_LITE
LIVE PREVIEW

MD-SAL Clustering Internals Moiz Raja Open Daylight Summit 2015 - - PowerPoint PPT Presentation

MD-SAL Clustering Internals Moiz Raja Open Daylight Summit 2015 www.opendaylight.org My Collaborators Tom Pantelis Abhishek Kumar Luis Gomez Basheeruddin Ahmed Phillip Shea Colin


slide-1
SLIDE 1

www.opendaylight.org

MD-SAL Clustering Internals

Moiz Raja Open Daylight Summit 2015

slide-2
SLIDE 2

www.opendaylight.org

▪ Abhishek ¡Kumar ¡ ▪ Basheeruddin ¡Ahmed ¡ ▪ Colin ¡Dixon ¡ ▪ Harman ¡Singh ¡ ▪ Kamal ¡Rameshan ¡ ▪ Robert ¡Varga ¡ ▪ Tony ¡Tkacik ¡

My ¡Collaborators ¡

2

Tom Pantelis

▪ Luis ¡Gomez ¡ ▪ Phillip ¡Shea ¡ ▪ Radhika ¡Hirannaiah ¡ ▪ and ¡many ¡more… ¡

slide-3
SLIDE 3

www.opendaylight.org

▪ Architecture ¡ ▪ Modules ¡ ▪ Flows ¡ ▪ DiagnosHcs ¡ ▪ QuesHons ¡ ¡

Agenda ¡

slide-4
SLIDE 4

www.opendaylight.org

Architecture ¡

4

slide-5
SLIDE 5

www.opendaylight.org

Subsystems

5 member-­‑1 ¡ member-­‑2 ¡ member-­‑3 ¡

Distributed Data Store

member-­‑1 ¡ member-­‑2 ¡

Remote RPC Connector

slide-6
SLIDE 6

www.opendaylight.org

High ¡Level ¡Architecture

Distributed Data Store Remote RPC Connector Persistence Remoting Clustering

slide-7
SLIDE 7

www.opendaylight.org

Actor ¡Systems

7

Distributed Data Store Remote RPC Connector

Actor Hierarchy Configuration Dispatchers

slide-8
SLIDE 8

www.opendaylight.org

Data ¡Synchroniza:on

8

Data store Synchronized Data Tree Raft for Distributed Consensus Remote RPC Synchronized RPC Registry Gossip for data distribution

slide-9
SLIDE 9

www.opendaylight.org

Distributed ¡Data ¡Store ¡ Architecture ¡

9

slide-10
SLIDE 10

www.opendaylight.org

Accessing ¡Remote ¡Data

10

Client member-1 member-2

slide-11
SLIDE 11

www.opendaylight.org

Loca:on ¡Transparency

11

Client member-1 member-2

DistributedDataStore

slide-12
SLIDE 12

www.opendaylight.org

DistributedDataStore

12

DOMStore DistributedDataStore

slide-13
SLIDE 13

www.opendaylight.org

Communica:on

13

Client member-1 member-2

DistributedDataStore

Shard

slide-14
SLIDE 14

www.opendaylight.org

Data ¡Distribu:on

14

Client member-1

DistributedDataStore

member-2 member-3

topology ¡ inventory ¡

slide-15
SLIDE 15

www.opendaylight.org

Module ¡Based ¡Shards

15

/ /inventory /topology /toaster

slide-16
SLIDE 16

www.opendaylight.org

HA

16

member-2 member-3

inventory ¡– ¡follower ¡-­‑1 ¡ inventory ¡– ¡follower ¡-­‑ ¡2 ¡

Client member-1

DistributedDataStore inventory ¡– ¡leader ¡

slide-17
SLIDE 17

www.opendaylight.org

RaB ¡Distributed ¡Consensus

17 discovers ¡node ¡with ¡higher ¡term ¡ ¡

Follower Candidate Leader

starts ¡up/ ¡ ¡ recovers ¡ Hmes ¡out, ¡ ¡ starts ¡elecHons ¡ receives ¡votes ¡ from ¡majority ¡ ¡

  • f ¡nodes ¡

Hmes ¡out, ¡ ¡ restarts ¡elecHons ¡ follower-­‑2 ¡ follower-­‑1 ¡ leader ¡

Election Replication/Consensus

slide-18
SLIDE 18

www.opendaylight.org

Journal ¡replica:on

18

leader follower-1 follower-2 transaction-1 transaction-2 transaction-3 transaction-4 transaction-1 transaction-2 transaction-3 transaction-4 transaction-1 transaction-2 transaction-3 transaction-4

slide-19
SLIDE 19

www.opendaylight.org

Snapshot ¡Replica:on

19

leader follower-1 follower-2

slide-20
SLIDE 20

www.opendaylight.org

Durability/Recovery

20

Journal Snapshots

slide-21
SLIDE 21

www.opendaylight.org

Remote ¡RPC ¡Architecture ¡

21

slide-22
SLIDE 22

www.opendaylight.org

Invoking ¡a ¡Remote ¡RPC

22

Consumer member-1 member-2 Provider

slide-23
SLIDE 23

www.opendaylight.org

Loca:on ¡Transparency

23

Consumer member-1 member-2 Provider

RpcProviderProxy RemoteRpcBroker

slide-24
SLIDE 24

www.opendaylight.org

RPC ¡Registry

24

Provider RPC Registration Listener RPC Registry

slide-25
SLIDE 25

www.opendaylight.org

RPC ¡Registry ¡Replica:on ¡-­‑ ¡Gossip

25 version=1 ¡ version=2 ¡ modify ¡ change ¡ version ¡ Local ¡bucket ¡updates ¡ ¡ change ¡version ¡ m1,v1 ¡ m2,v5 ¡ m3,v7 ¡ All ¡buckets ¡and ¡their ¡ versions ¡known ¡to ¡all ¡ members ¡ Every ¡1 ¡second ¡members ¡ send ¡all ¡known ¡bucket ¡ ¡ versions ¡to ¡any ¡one ¡peer ¡ m1 ¡ m2 ¡ m3 ¡ status ¡ status ¡ m2 ¡ m3 ¡ m1 ¡ u p d a t e ¡ local ¡versions ¡higher ¡– ¡send ¡update ¡ local ¡versions ¡lower ¡– ¡send ¡status ¡to ¡sender ¡

slide-26
SLIDE 26

www.opendaylight.org

Modules ¡

26

slide-27
SLIDE 27

www.opendaylight.org

Modules

27

sal-clustering-commons sal-akka-raft sal-remoterpc-connector sal-distributed-datastore sal-clustering-config sal-akka-raft-example sal-dummy-distributed-datastore clustering-test-app

slide-28
SLIDE 28

www.opendaylight.org

▪ Some ¡common ¡messages ¡ ▪ Actor ¡base ¡classes ¡ ▪ The ¡Protobuf ¡messages ¡used ¡in ¡Helium ¡ ▪ The ¡Protobuf ¡NormalizedNode ¡serializaHon ¡code ¡ ▪ The ¡NormalizedNode ¡streaming ¡code ¡ ▪ Other ¡miscellaneous ¡uHlity ¡classes ¡

sal-­‑clustering-­‑commons

28

slide-29
SLIDE 29

www.opendaylight.org

▪ ImplementaHon ¡of ¡the ¡Ra[ ¡Algorithm ¡on ¡top ¡of ¡akka ¡ ▪ Uses ¡akka-­‑persistence ¡for ¡durability ¡ ▪ Provides ¡a ¡base ¡class ¡called ¡Ra:Actor ¡which ¡when ¡can ¡be ¡ extended ¡by ¡anyone ¡who ¡wants ¡to ¡replicate ¡state ¡ ▪ See ¡sal-­‑akka-­‑ra[-­‑example ¡which ¡provides ¡a ¡simple ¡ implementaHon ¡of ¡a ¡replicated ¡HashMap ¡

sal-­‑akka-­‑raB

29

slide-30
SLIDE 30

www.opendaylight.org

▪ ConcurrentDOMDataBroker ¡ ▪ DistributedDataStore ¡ ▪ ImplementaHon ¡of ¡the ¡DOMStore ¡SPI ¡ ▪ Shard ¡built ¡on ¡top ¡of ¡Ra[Actor ¡ ▪ Creates ¡Shards ¡based ¡on ¡Sharding ¡strategy ¡ ▪ Code ¡for ¡a ¡client ¡to ¡interact ¡with ¡the ¡Shard ¡Leader ¡

sal-­‑distributed-­‑datastore

30

slide-31
SLIDE 31

www.opendaylight.org

▪ RemoteRpcProvider ¡ ▪ Default ¡RPC ¡Provider. ¡Invoked ¡when ¡an ¡RPC ¡is ¡not ¡found ¡in ¡ the ¡local ¡MD-­‑SAL ¡registry. ¡ ▪ Code ¡for ¡BucketStore ¡which ¡provides ¡a ¡mechanism ¡to ¡ replicate ¡state ¡based ¡on ¡Gossip ¡ ▪ Code ¡for ¡RpcBroker ¡which ¡allows ¡invoking ¡a ¡remote ¡rpc ¡

sal-­‑remoterpc-­‑connector

31

slide-32
SLIDE 32

www.opendaylight.org

Data ¡store ¡flows ¡

32

slide-33
SLIDE 33

www.opendaylight.org

Startup

33

DistributedConfigDataStoreProviderModule DistributedDataStore ShardManager Shard1 Shard Shard3 Shard4

createInstance

ActorContext

waitTillReadyLatch

create & waitTillReady

slide-34
SLIDE 34

www.opendaylight.org

Recovery

34

Shard1 Shard Shard3 Shard4 ShardManager

read last known state from disk ready waitTillReadyLatch countDown

slide-35
SLIDE 35

www.opendaylight.org

▪ Recovery ¡must ¡be ¡complete ¡ ▪ All ¡Shard ¡Leaders ¡must ¡be ¡known ¡ ▪ Three ¡messages ¡are ¡monitored ¡by ¡ShardManager ¡

▪ Cluster.MemberStatusUp ▪ Used to figure out the address of a cluster member ▪ LeaderStateChanged ▪ Used to figure out if a Follower has a different Leader ▪ ShardRoleChanged ▪ Use to figured out any changes in a Shard’s Role

▪ WaiHng ¡is ¡not ¡infinite, ¡by ¡default ¡it ¡lasts ¡only ¡90 ¡seconds ¡but ¡ is ¡configurable ¡ ▪ Will ¡block ¡config ¡sub-­‑system ¡

Wai:ng ¡for ¡Ready

35

slide-36
SLIDE 36

www.opendaylight.org

Crea:ng ¡a ¡Transac:on

36

DistributedDataStore newReadWriteTransaction TransactionProxy create

slide-37
SLIDE 37

www.opendaylight.org

First ¡Opera:on

37

ActorContext.findPrimary PrimaryCache.lookup/ ShardManager.findPrimary Found? LocalTransactionContext RemoteTransactionContext NoOpTransactionContext TransactionProxy write(“inventory”, node) Local? N Y N

slide-38
SLIDE 38

www.opendaylight.org

Transac:ons

38

Client

DistributedDataStore inventory ¡– ¡leader ¡

Client

DistributedDataStore inventory ¡– ¡leader ¡

Local Transaction Remote Transaction member-1 member-1 member-2

slide-39
SLIDE 39

www.opendaylight.org

Local ¡Transac:on ¡Op:miza:on

39

LocalTransactionContext Shard - Leader write merge delete ready member-1

slide-40
SLIDE 40

www.opendaylight.org

Remote ¡Transac:on ¡Op:miza:on

40

RemoteTransactionContext Shard Leader write merge delete ready

write ¡mod ¡ merge ¡mod ¡ delete ¡mod ¡

member-1 member-2

slide-41
SLIDE 41

www.opendaylight.org

Transac:on ¡Rate ¡Limi:ng

41

rate-limit = 100 Tx/Sec Tx Cohort Shard Leader member-2 20ms Tx Cohort 50ms Tx Cohort 15ms after rate-limit/2 transactions done…. new-rate-limit = 25 Tx/Sec

slide-42
SLIDE 42

www.opendaylight.org

Opera:on ¡Limi:ng

42

RemoteTransactionContext Shard Leader write merge delete

write ¡mod ¡ merge ¡mod ¡ delete ¡mod ¡

member-1 member-2

… ¡

… block

slide-43
SLIDE 43

www.opendaylight.org

Commit ¡Coordina:on

43

Shard Leader member-2 Shard CommitCoordinator

Tx1 ¡-­‑ ¡ready ¡ Tx2 ¡-­‑ ¡ready ¡ Tx3 ¡-­‑ ¡ready ¡ Tx1 ¡-­‑ ¡commit ¡ Tx3 ¡-­‑ ¡commit ¡ Tx3 ¡-­‑ ¡abort ¡ Tx2 ¡-­‑ ¡commit ¡ Tx1 ¡ Tx2 ¡ Tx3 ¡

slide-44
SLIDE 44

www.opendaylight.org

Managing ¡the ¡in-­‑memory ¡journal ¡ Replicated ¡To ¡All

44

Client leader follower-1 follower-2 commit transaction txn txn txn

slide-45
SLIDE 45

www.opendaylight.org

Managing ¡the ¡in-­‑memory ¡journal ¡ Cluster ¡member ¡unavailable

45

Client leader follower-1 follower-2 commit transaction txn txn txn txn txn txn txn txn

slide-46
SLIDE 46

www.opendaylight.org

Data ¡Change ¡No:fica:ons

46

Client leader follower-1 follower-2 commit transaction txn txn txn notify

slide-47
SLIDE 47

www.opendaylight.org

RPC ¡Connector ¡flows ¡

47

slide-48
SLIDE 48

www.opendaylight.org

Startup

48

RemoteRpcBrokerModule createInstance RpcManager RemoteRpcProvider RpcBroker RpcRegistry RemoteRpcImpl RpcListener

slide-49
SLIDE 49

www.opendaylight.org

Default ¡RPC ¡Delegate

49

RpcManager SchemaContext DOMRpcProviderService read all rpc definitions registerImplementation(remoteRpcImpl)

slide-50
SLIDE 50

www.opendaylight.org

RPC ¡Registered

50

RpcProviderRegistry addRoutedRpcImpl RoutedRpcRegistration registerPath RpcListener RpcRegistry

slide-51
SLIDE 51

www.opendaylight.org

Invoking ¡a ¡Remote ¡RPC

51

RemoteRpcImpl invokeRpc RpcRegistry Route found? RpcBroker ExecuteRpc FooService throw Exception

slide-52
SLIDE 52

www.opendaylight.org

Invoking ¡a ¡Remote ¡RPC

52

RemoteRpcImpl Consumer Provider member-1 member-2 RpcBroker RpcRegistry invokeRpc invokeRpc findRoute ExecuteRpc

slide-53
SLIDE 53

www.opendaylight.org

Data ¡store ¡DiagnosCcs ¡

53

slide-54
SLIDE 54

www.opendaylight.org

Transac:on ¡Tracing

54

Created ¡txn ¡member-­‑2-­‑txn-­‑9400 ¡of ¡type ¡READ_WRITE ¡on ¡chain ¡member-­‑2-­‑txn-­‑chain-­‑13 ¡

Client Server

Tx ¡member-­‑2-­‑txn-­‑9400 ¡read ¡/(urn:opendaylight:inventory?... ¡ member-­‑3-­‑shard-­‑inventory-­‑operaHonal: ¡CreaHng ¡transacHon ¡: ¡shard-­‑member-­‑2-­‑txn-­‑9400 ¡ Tx ¡member-­‑2-­‑txn-­‑9400 ¡Readying ¡1 ¡transacHons ¡for ¡commit ¡ Tx ¡member-­‑2-­‑txn-­‑9400 ¡commit ¡ member-­‑3-­‑shard-­‑inventory-­‑operaHonal: ¡Readying ¡transacHon ¡member-­‑2-­‑txn-­‑9400 ¡ member-­‑3-­‑shard-­‑inventory-­‑operaHonal: ¡Commigng ¡transacHon ¡member-­‑2-­‑txn-­‑9400 ¡ Tx ¡member-­‑2-­‑txn-­‑9400: ¡commit ¡succeeded ¡ Cluster ¡Member ¡ IniHator ¡ Counter ¡ TransacHon ¡Type ¡ Module ¡ Data ¡store ¡type ¡

slide-55
SLIDE 55

www.opendaylight.org

Replica:on ¡Tracing

55

Leader

Sending ¡AppendEntries ¡to ¡follower ¡member-­‑2-­‑shard-­‑topology-­‑operaHonal: ¡AppendEntries ¡ [term=2, ¡leaderId=member-­‑1-­‑shard-­‑topology-­‑operaHonal, ¡prevLogIndex=520, ¡prevLogTerm=2, ¡ entries=[Entry{index=521, ¡term=2}], ¡leaderCommit=520, ¡replicatedToAllIndex=-­‑1] ¡

Follower

handleAppendEntries: ¡AppendEntries ¡[term=2, ¡leaderId=member-­‑2-­‑shard-­‑topology-­‑operaHonal, ¡ ¡ prevLogIndex=520, ¡prevLogTerm=2, ¡entries=[Entry{index=521, ¡term=2}], ¡leaderCommit=520, ¡ ¡ replicatedToAllIndex=-­‑1] ¡ handleAppendEntries ¡returning ¡: ¡AppendEntriesReply ¡[term=2, ¡success=true, ¡logLastIndex=521, ¡ ¡ logLastTerm=2, ¡followerId=member-­‑1-­‑shard-­‑topology-­‑operaHonal] ¡ handleAppendEntriesReply ¡from ¡member-­‑2-­‑shard-­‑topology-­‑operaHonal: ¡applying ¡to ¡log ¡– ¡ ¡ commitIndex: ¡521, ¡lastAppliedIndex: ¡520 ¡ handleAppendEntriesReply ¡-­‑ ¡FollowerLogInformaHon ¡for ¡member-­‑2-­‑shard-­‑topology-­‑operaHonal ¡updated: ¡ ¡ matchIndex: ¡521, ¡nextIndex: ¡522 ¡

slide-56
SLIDE 56

www.opendaylight.org

Shard ¡MBean

56

  • rg.opendaylight.controller:type=DistributedOperaHonalDataStore,Category=Shards,name=member-­‑1-­‑shard-­‑inventory-­‑operaHonal ¡

OperaHonal ¡ Config ¡ member-­‑1 ¡ member-­‑2 ¡ member-­‑3 ¡ default ¡ inventory ¡ topology ¡

  • peraHonal ¡

config ¡

Attributes

AbortTransacHonsCount ¡ CommitIndex ¡ CommiledTransacHon sCount ¡ CurrentTerm ¡ FailedTransacHonsCount ¡ FollowerInfo ¡ FollowerIniHalSync ¡ Status ¡ InMemoryJournalData ¡ Size ¡ InMemoryJournalLog Size ¡ LastApplied ¡ LastCommiledTransacHon Time ¡ LastIndex ¡ LastTerm ¡ Leader ¡ Ra[State ¡ ReadOnlyTransacHon ¡ Count ¡ ReadWriteTransacHon Count ¡ WriteOnlyTransacHon ¡ Count ¡ VotedFor ¡ and ¡more…. ¡

slide-57
SLIDE 57

www.opendaylight.org

ShardManager ¡MBean

57

  • rg.opendaylight.controller:type=DistributedOperaHonalDataStore,Category=ShardManager,name=shard-­‑manager-­‑operaHonal ¡

OperaHonal ¡ Config ¡

  • peraHonal ¡

config ¡

Attributes

  • LocalShards ¡
  • SyncStatus ¡
slide-58
SLIDE 58

www.opendaylight.org

Data ¡store ¡GeneralRun:meInfo ¡ MBean

58

  • rg.opendaylight.controller:type=DistributedConfigDatastore,name=GeneralRunHmeInfo ¡

OperaHonal ¡ Config ¡

Attributes

  • TransacHonCreaHonRateLimit ¡
slide-59
SLIDE 59

www.opendaylight.org

Transac:on ¡Commit ¡Rate ¡ MBean

59

  • rg.opendaylight.controller.cluster.datastore:name=distributed-­‑data-­‑store.config.commit.rate ¡

Attributes

  • 50thPercentile
  • 75thPercenHle ¡
  • 90thPercenHle ¡
  • and ¡so ¡on… ¡
  • peraHonal ¡

config ¡

  • Count
  • Min ¡
  • Max ¡
  • StdDev ¡
slide-60
SLIDE 60

www.opendaylight.org

Data ¡store ¡GeneralRun:meInfo ¡ MBean

60

  • rg.opendaylight.controller:type=DistributedConfigDatastore,name=GeneralRunHmeInfo ¡

OperaHonal ¡ Config ¡

Attributes

  • TransacHonCreaHonRateLimit ¡
slide-61
SLIDE 61

www.opendaylight.org

Message ¡Sta:s:cs ¡MBean

61

  • rg.opendaylight.controller.actor.metric:name=/user/shardmanager-­‑config.msg-­‑rate.ActorIniHalized ¡

Attributes

  • 50thPercentile
  • 75thPercenHle ¡
  • 90thPercenHle ¡
  • and ¡so ¡on… ¡
  • peraHonal ¡

config ¡

  • Count
  • Min ¡
  • Max ¡
  • StdDev ¡

Message ¡Name ¡

slide-62
SLIDE 62

www.opendaylight.org

Remote ¡RPC ¡Broker ¡DiagnosCcs ¡

62

slide-63
SLIDE 63

www.opendaylight.org

RemoteRpcBroker ¡MBean

63

  • rg.opendaylight.controller:type=RemoteRpcBroker,name=RemoteRpcRegistry ¡

Attributes

  • BucketVersions
  • GlobalRpc ¡
  • LocalRegisteredRoutedRpc ¡

Operations

  • findRpcByName ¡
  • findRpcByRoute ¡
slide-64
SLIDE 64

www.opendaylight.org

Message ¡Sta:s:cs ¡MBean

64

  • rg.opendaylight.controller.actor.metric:name=/user/rpc/registry.msg-­‑rate.AddOrUpdateRoutes ¡

Attributes

  • 50thPercentile
  • 75thPercenHle ¡
  • 90thPercenHle ¡
  • and ¡so ¡on… ¡
  • Count
  • Min ¡
  • Max ¡
  • StdDev ¡

Message ¡Name ¡

slide-65
SLIDE 65

www.opendaylight.org 65

slide-66
SLIDE 66

www.opendaylight.org

▪ Deploy ¡a ¡cluster ¡ ▪ Run ¡clustering ¡integraHon ¡tests ¡ ▪ Write ¡an ¡applicaHon ¡that ¡works ¡in ¡the ¡cluster ¡ ▪ Write ¡bugs ¡to ¡report ¡features ¡which ¡you ¡find ¡missing ¡ ▪ Try ¡running ¡dsBenchMark ¡on ¡a ¡cluster ¡ ▪ Test ¡out ¡replicaHon ¡using ¡the ¡dummy ¡data ¡store ¡ ▪ Check ¡out ¡the ¡code ¡ ▪ Send ¡email ¡to ¡controller-­‑dev@lists.opendaylight.org ¡with ¡ quesHons ¡

Suggested ¡Next ¡Steps… ¡

66