Scalin ling s servic ices w it it h Dis ist rib ibut ed In-Mem - - PowerPoint PPT Presentation

scalin ling s servic ices w it it h dis ist rib ibut ed
SMART_READER_LITE
LIVE PREVIEW

Scalin ling s servic ices w it it h Dis ist rib ibut ed In-Mem - - PowerPoint PPT Presentation

Scalin ling s servic ices w it it h Dis ist rib ibut ed In-Mem em ory Ca Caches SATURN 201 8 | Plano, Texas Divya Nagar and Chirag Aggarw al 900K+ Drivers 10 0 M+ Mon th ly Ord e rs 261M+ P e op le Im p acte d - 18+ P rod u cts -


slide-1
SLIDE 1

Scalin ling s servic ices w it it h Dis ist rib ibut ed In-Mem em ory Ca Caches

SATURN 201 8 | Plano, Texas Divya Nagar and Chirag Aggarw al

slide-2
SLIDE 2

900K+ Drivers 10 0 M+ Mon th ly Ord e rs 261M+ P e op le Im p acte d

slide-3
SLIDE 3
  • 18+ P rod u cts
  • 3M+ Ord e rs Daily
  • Exp on e n tial g row th

sin ce first ap p lau n ch

slide-4
SLIDE 4

Slick User Experience Low Re sp on se Tim e s Hig h Availab ility

slide-5
SLIDE 5
slide-6
SLIDE 6
slide-7
SLIDE 7
slide-8
SLIDE 8

Car Bike

  • Hig h th rou g h p u t
  • Hig h Availab ility
slide-9
SLIDE 9
slide-10
SLIDE 10
slide-11
SLIDE 11
slide-12
SLIDE 12
slide-13
SLIDE 13
slide-14
SLIDE 14
slide-15
SLIDE 15

Surge He at Map s

Acce p tab le Con siste n cy

slide-16
SLIDE 16
slide-17
SLIDE 17

Surge He at Map s

Diffe re n t Re q u ire m e n ts

slide-18
SLIDE 18
slide-19
SLIDE 19
slide-20
SLIDE 20
slide-21
SLIDE 21
slide-22
SLIDE 22
slide-23
SLIDE 23
  • Em b e d d e d & In -Me m ory
  • Distrib u te d
  • Re p licate d
  • Horizon tally Scalab le
slide-24
SLIDE 24

Prat t l t t l e

github.com /gojekfarm /prattle

slide-25
SLIDE 25

CA CACH CHE MEM EMBER ERSHIP RE REPLICA CATION

slide-26
SLIDE 26

Mem bership

3 1 2 4 5 6 7 8

slide-27
SLIDE 27

1 2 3 4 5 6

UDP Multicast

slide-28
SLIDE 28

1 3 5 2 4 6

  • Less Nodes
  • Less Congestion
slide-29
SLIDE 29

9 1 8 7 6 3 2 5 4

Quadratic Increase in Netw ork Congestion

slide-30
SLIDE 30

1 3 5 2 4 6 6 is dead 4 is dead (1,2,3,5,6) (1,2,3,4,5)

False Positives

slide-31
SLIDE 31

9 1 8 7 6 3 2 5 4 1 2 3 4 5 6 7 8

Reduce Netw ork Congestion

slide-32
SLIDE 32

SW IM IS A

MEM EMBER ERSHIP PROT OTOC OCOL OL

slide-33
SLIDE 33

FAILURE DETECTION

slide-34
SLIDE 34

func (m *Member) Ping(nodeAddress net.Addr) error { pingRequest := NewPingRequest{ NodeAddress: nodeAddress, } ackChannel := make(chan ackMessage, 1) defer close(ackChannel)

m.sendMessageUdp(&pingRequest, ackChannel) select { case ackMessage := <-ackChannel: logger.info(“ack message: + ackMessage) return nil case <-time.After(m.config.AckTimeout): return m.ProbeNode(nodeAddress) }

}

N1 N2

slide-35
SLIDE 35

func (m *Member) Ping(nodeAddress net.Addr) error { pingRequest := NewPingRequest{ NodeAddress: nodeAddress, } ackChannel := make(chan ackMessage, 1) defer close(ackChannel)

m.sendMessageUdp(&pingRequest, ackChannel)

select { case ackMessage := <-ackChannel: logger.info(“ack message: + ackMessage) return nil case <-time.After(m.config.AckTimeout): return m.ProbeNode(nodeAddress) }

}

N1 N2

slide-36
SLIDE 36

func (m *Member) Ping(nodeAddress net.Addr) error { pingRequest := NewPingRequest{NodeAddress: nodeAddress} ackChannel := make(chan ackMessage, 1) defer close(ackChannel) err := m.sendMessageUdp(nodeAddress.String(), &pingRequest, ackChannel) if err != nil { return err }

select { case ackMessage := <-ackChannel: logger.info(“ack message:” + ackMessage) return nil

case <-time.After(m.config.AckTimeout): return m.ProbeNode(nodeAddress) } }

N1 N2

slide-37
SLIDE 37

func (m *Member) Ping(nodeAddress net.Addr) error { pingRequest := NewPingRequest{NodeAddress: nodeAddress} ackChannel := make(chan ackMessage, 1) defer close(ackChannel) err := m.sendMessageUdp(nodeAddress.String(), &pingRequest, ackChannel) if err != nil {

return err } select { case ackMessage := <-ackChannel:

logger.info(“ack message:” + ackMessage) return nil

case <-time.After(m.config.AckTimeout): return m.ProbeNode(nodeAddress) }

}

N1 N2

slide-38
SLIDE 38

func (m *Member) ProbeNode(nodeAddress net.Addr) error { members := m.KRandomMembers() ackChannel := make(chan ackMessage, count(members))

for _, member := range members { pingRequest := NewPingRequest{NodeAddress: nodeAddress} member.sendMessageUdp(&pingRequest, ackChannel) } defer close(ackChannel) select { case ackMessage := <-ackChannel: logger.info(“ack message:” + ackMessage) return nil case <-time.After(m.config.AckTimeout): return errors.New(“timed out while probing”) }

}

N1 N2 N3

slide-39
SLIDE 39

func (m *Member) ProbeNode(nodeAddress net.Addr) error { members := m.KRandomMembers() ackChannel := make(chan ackMessage, count(members))

for _, member := range members { pingRequest := NewPingRequest{ NodeAddress: nodeAddress, } member.sendMessageUdp(&pingRequest, ackChannel) } defer close(ackChannel)

select { case ackMessage := <-ackChannel: logger.info(“ack message:” + ackMessage) return nil case <-time.After(m.config.AckTimeout): return errors.New(“timed out while probing”) }

}

N1 N2 N3

slide-40
SLIDE 40

N1 N2 N3

func (m *Member) ProbeNode(nodeAddress net.Addr) error { members := m.KRandomMembers() ackChannel := make(chan ackMessage, count(members)) for _, member := range members { pingRequest := NewPingRequest{ NodeAddress: nodeAddress, } member.sendMessageUdp(&pingRequest, ackChannel) } defer close(ackChannel)

select { case ackMessage := <-ackChannel: logger.info(“ack message:” + ackMessage) return nil

case <-time.After(m.config.AckTimeout): return errors.New(“timed out while probing”) } }

slide-41
SLIDE 41

N1 N2 N3

func (m *Member) ProbeNode(nodeAddress net.Addr) error { members := m.KRandomMembers() ackChannel := make(chan ackMessage, count(members)) for _, member := range members { pingRequest := NewPingRequest{ NodeAddress: nodeAddress, } member.sendMessageUdp(&pingRequest, ackChannel) } defer close(ackChannel) select { case ackMessage := <-ackChannel: logger.info(“ack message:” + ackMessage) return nil

case <-time.After(m.config.AckTimeout): return errors.New(“timed out”) }

}

slide-42
SLIDE 42

REPLIC ICATIO ION

slide-43
SLIDE 43

1 2 3 4 5 6 7 8

Initial Im plem entation w ith Prattle

slide-44
SLIDE 44

prattle := NewPrattle(siblingAddr string) prattle.SetViaGossip(key, value)

slide-45
SLIDE 45
slide-46
SLIDE 46

Problem s w ith Gossip Based Re p lication

  • In fe ction Style Disse m in ation
slide-47
SLIDE 47

1 2 3 4 5 6

UDP m ulticast based replication

slide-48
SLIDE 48

prattle := NewPrattle(siblingAddr string) prattle.SetViaMulticast(key, value)

slide-49
SLIDE 49
slide-50
SLIDE 50
slide-51
SLIDE 51
slide-52
SLIDE 52

Thank you