riak at kivra

33
RIAK at KIVRA Bip Thelin @bipthelin

Upload: bip-thelin

Post on 15-Jan-2015

1.348 views

Category:

Technology


0 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Riak at Kivra

RIAK at KIVRABip Thelin@bipthelin

Page 2: Riak at Kivra

BIPCTO & Co-founder

OO / SQL-backgroundOpen Source / Tomcat Committer

Scalable platforms / HostingBeer Homebrewer / Judge

THELIN

Page 3: Riak at Kivra
Page 4: Riak at Kivra
Page 5: Riak at Kivra

API / Delivery serviceContent compositionContent creation Digital mailbox

Page 6: Riak at Kivra

ResponsiveWeb

iOS App

Page 7: Riak at Kivra
Page 8: Riak at Kivra

x

b

a

d

c

q

r

g

z

z

t u

i

e

e

p

y

f

State machineInternal, External & Time Events

Hard to test / debugError proneHardcoded flowNo overview

Page 9: Riak at Kivra

We outgrew

our system

Page 10: Riak at Kivra

QUOTE:

24 / 7 / 365

Distributable / ScALABLE

TESTABLE / OPERATIONAL

SECURE / Stable

Marriage is a wonderful institution, but who wants to live in an institution?

Page 11: Riak at Kivra

Our PhilosophyKeep it simple, StupidDo one thing and do it wellSeparation of concernRight tool for the jobHasty generalization

Page 12: Riak at Kivra

RIAK + ErlangLightweightDistributedScalableResilient to failure

Page 13: Riak at Kivra

Backend service

RIAK

REST API

Frontend Service

qz

x y

qz

x y

Internal ServicesExternal Services

Page 14: Riak at Kivra

Right datastorefor the job

3 x Riak Clusters

Page 15: Riak at Kivra

ONEBACKENDMany

(s)t o r u l e t h e m a l l

Page 16: Riak at Kivra

LeveldbBitcaskRiak-erlang-client (PB)JSON

RIAKstack

Page 17: Riak at Kivra

OAUTH2Authorization layer

on top of Riak

Page 18: Riak at Kivra

LAZYUPGRADE

Page 19: Riak at Kivra

-­‐record(user,  {        password                  =  <<"l0ln00b">,        name                          =  <<"noname">>,        i_primary_email    =  <<"[email protected]">,        i_primary_phone    =  <<"461337">>,        i_ssn                        =  <<"0123456789">>,        l_tenant                  =  {<<"B">>,  <<"K">>}}).

Get object

Upgrade object

RIAK

Check version

[1...n]

Page 20: Riak at Kivra

LOGGING

Page 21: Riak at Kivra

1. MetricsAnything you'd want toplot on a graph

Page 22: Riak at Kivra

2. (Un)structuredloggingLog data

you'dwant toprocess

Page 23: Riak at Kivra

3. Applicationlogging Error,

Notice,Warning, etc

Page 24: Riak at Kivra
Page 25: Riak at Kivra

Lager Logglygithub.com/kivra/lager_loggly.git

Page 26: Riak at Kivra

Lager Sysloggithub.com/basho/lager_syslog

Page 27: Riak at Kivra

~197 SLOC ~23 SLOC

Page 28: Riak at Kivra

Lager{lager,  [

{handlers,  [            {lager_console_backend,  info},                    {lager_loggly_backend,  [<<"Riak">>,

                         info,  5,  3,                      "https://<Loggly  URI>"]},

                   {lager_loggly_backend,  [<<"Riak">>,                        error,  5,  3,                        "https://<Loggly  URI>"]},

                   {lager_file_backend,  [                         {"/path/error.log",  error,  10485760,  "$D0",  5},                              {"/path/console.log",  info,  10485760,  "$D0",  5}                    ]}

]},          ...]},

Page 29: Riak at Kivra
Page 30: Riak at Kivra

DEPLOYMENTCentral configuration

Infrastructure as CodeBootstrap/Upgrade

Page 31: Riak at Kivra

Data modelingConflict resolution2i slowno M/R, Links, Search, etc..Key generationCaching

DESIGNDECISIONS

andTRADEOFFS

Page 32: Riak at Kivra

Riak CoreData encryptionSearchSession backend

What’s up?