33
an alternative view of a distributed database Sergej Jurecko ActorDB

ActorDB - Percona · PDF file• Start with 1 node • Add a second • Start “stealing” actors, from top to middle • Redirect requests during movement 20. Actor Copy/Move 1

  • Upload
    vunhu

  • View
    216

  • Download
    3

Embed Size (px)

Citation preview

Page 1: ActorDB - Percona · PDF file• Start with 1 node • Add a second • Start “stealing” actors, from top to middle • Redirect requests during movement 20. Actor Copy/Move 1

analternativeviewofadistributed databaseSergejJurecko

ActorDB

Page 2: ActorDB - Percona · PDF file• Start with 1 node • Add a second • Start “stealing” actors, from top to middle • Redirect requests during movement 20. Actor Copy/Move 1

IntroWhatitis.Whatisitfor.

Page 3: ActorDB - Percona · PDF file• Start with 1 node • Add a second • Start “stealing” actors, from top to middle • Redirect requests during movement 20. Actor Copy/Move 1

DistributedSQLdatabase

1

What is it?

Features:• Nosinglepointoffailure• Horizontallyscalable• Consistent- usingRaftconsensusalgorithm• OntopofSQLiteandLMDB• MySQLandThriftconnectors

Page 4: ActorDB - Percona · PDF file• Start with 1 node • Add a second • Start “stealing” actors, from top to middle • Redirect requests during movement 20. Actor Copy/Move 1

Easy to use

• Workswellevenasasinglenode

• ConfiguredwithSQLandactordb_console

2

Page 5: ActorDB - Percona · PDF file• Start with 1 node • Add a second • Start “stealing” actors, from top to middle • Redirect requests during movement 20. Actor Copy/Move 1

Explicitsharding

3

What’s the catch?

Thismeans:• Manysmalldatabases,notasinglelargeone• Goodatconcurrency• Databasesper:user,entity,service• Naturalshardingkey

Page 6: ActorDB - Percona · PDF file• Start with 1 node • Add a second • Start “stealing” actors, from top to middle • Redirect requests during movement 20. Actor Copy/Move 1

Examples

• actormytype(myactor);select*fromtab;

• actort(a1,a2)create;insertintotabvalues(1,’aa’);

• actort(*); {{RESULT}}select*fromtab;

• actort(*whereidlike‘u%’);{{RESULT}}select*fromtab;

4

Page 7: ActorDB - Percona · PDF file• Start with 1 node • Add a second • Start “stealing” actors, from top to middle • Redirect requests during movement 20. Actor Copy/Move 1

File sync

• Lotsofusers,lotsofdata

• Filehierarchy

• CTE,Foreignkeys,Transactions

• Queriesalwaysper-user

5

Page 8: ActorDB - Percona · PDF file• Start with 1 node • Add a second • Start “stealing” actors, from top to middle • Redirect requests during movement 20. Actor Copy/Move 1

Great for

• SaaS

• Mobileappbackends

• Microservices

6

Page 9: ActorDB - Percona · PDF file• Start with 1 node • Add a second • Start “stealing” actors, from top to middle • Redirect requests during movement 20. Actor Copy/Move 1

Microservices

• Splitaproblemintosmallerchunks

• Decouple

• Solveproblemsonthecommunicationlayer

• Inherentlyadistributedsystem

7

Page 10: ActorDB - Percona · PDF file• Start with 1 node • Add a second • Start “stealing” actors, from top to middle • Redirect requests during movement 20. Actor Copy/Move 1

Microfail

8

Page 11: ActorDB - Percona · PDF file• Start with 1 node • Add a second • Start “stealing” actors, from top to middle • Redirect requests during movement 20. Actor Copy/Move 1

Microservices with ActorDB

• Stillrelational

• Distributedtransactions

• Asmanytypesasyouwant

9

Page 12: ActorDB - Percona · PDF file• Start with 1 node • Add a second • Start “stealing” actors, from top to middle • Redirect requests during movement 20. Actor Copy/Move 1

ActorDB vs Traditional SQL

• Codefollowsyourdatamodel

• TraditionalSQLdatabasesleadtomonoliths

• ActorDB forcesdecoupling

10

Page 13: ActorDB - Percona · PDF file• Start with 1 node • Add a second • Start “stealing” actors, from top to middle • Redirect requests during movement 20. Actor Copy/Move 1

How it worksSQLite,LMDB

Page 14: ActorDB - Percona · PDF file• Start with 1 node • Add a second • Start “stealing” actors, from top to middle • Redirect requests during movement 20. Actor Copy/Move 1

SQLite

• CTE,foreignkeys,FTS,JSON

• Embeddable

• Fast

• Stable

• Verybasicstoragelayer

11

Page 15: ActorDB - Percona · PDF file• Start with 1 node • Add a second • Start “stealing” actors, from top to middle • Redirect requests during movement 20. Actor Copy/Move 1

LMDB

• Transactions

• Compact

• Nowriteamplification

• Goodwithlargevalues

12

Page 16: ActorDB - Percona · PDF file• Start with 1 node • Add a second • Start “stealing” actors, from top to middle • Redirect requests during movement 20. Actor Copy/Move 1

SQLite + LMDB

• SQLitewal interface:findpage,readpage,writepage

• SQLiteisunmodifiedoutsidewal.c

• SQLite->WAL(compression,replication)->LMDB

13

Page 17: ActorDB - Percona · PDF file• Start with 1 node • Add a second • Start “stealing” actors, from top to middle • Redirect requests during movement 20. Actor Copy/Move 1

No wal?

• Thereisawal,it’sjustinLMDB

• EverySQLitepagehasXversions

• Checkpointsaredeletes

14

Page 18: ActorDB - Percona · PDF file• Start with 1 node • Add a second • Start “stealing” actors, from top to middle • Redirect requests during movement 20. Actor Copy/Move 1

TODO

• ExternalWAL

• Higherwriteconcurrency

• Somewriteamplification

15

Page 19: ActorDB - Percona · PDF file• Start with 1 node • Add a second • Start “stealing” actors, from top to middle • Redirect requests during movement 20. Actor Copy/Move 1

ShardingSpreadingdataacrossnodes.

Page 20: ActorDB - Percona · PDF file• Start with 1 node • Add a second • Start “stealing” actors, from top to middle • Redirect requests during movement 20. Actor Copy/Move 1

ActorDB -> Clusters -> Actor

• ActorDB dividesdataintoclusters

• Aclusterisareplicationunit

• Anactorliveswithinacluster

• Everynodehas~4shards

16

Page 21: ActorDB - Percona · PDF file• Start with 1 node • Add a second • Start “stealing” actors, from top to middle • Redirect requests during movement 20. Actor Copy/Move 1

ActorDB -> Clusters -> Actor

17

Page 22: ActorDB - Percona · PDF file• Start with 1 node • Add a second • Start “stealing” actors, from top to middle • Redirect requests during movement 20. Actor Copy/Move 1

actormytype(myactor);select*frommytab;

18

Find the shard

Whathappens:• hash(myactor)->Integer• Integerdeterminesshard• Shardbelongstoanode• Anodeisassignedtoacluster

Page 23: ActorDB - Percona · PDF file• Start with 1 node • Add a second • Start “stealing” actors, from top to middle • Redirect requests during movement 20. Actor Copy/Move 1

What is a shard?

• Ashardisanactor

• Ashardisaregistryofactors

• FromXtoYofhashspace

• Ownedbyanode,livesinacluster

19

Page 24: ActorDB - Percona · PDF file• Start with 1 node • Add a second • Start “stealing” actors, from top to middle • Redirect requests during movement 20. Actor Copy/Move 1

4 to 400 shards

• Startwith1node

• Addasecond

• Start“stealing”actors,fromtoptomiddle

• Redirectrequestsduringmovement

20

Page 25: ActorDB - Percona · PDF file• Start with 1 node • Add a second • Start “stealing” actors, from top to middle • Redirect requests during movement 20. Actor Copy/Move 1

Actor Copy/Move

1. Stopdoingcheckpoints

2. Frompage1toN,startcopying

3. Copyuntilcaughtup

4. Lockandfinishup

21

Page 26: ActorDB - Percona · PDF file• Start with 1 node • Add a second • Start “stealing” actors, from top to middle • Redirect requests during movement 20. Actor Copy/Move 1

KV storeAndwhyit’sawesome.

Page 27: ActorDB - Percona · PDF file• Start with 1 node • Add a second • Start “stealing” actors, from top to middle • Redirect requests during movement 20. Actor Copy/Move 1

Shards expanded

• Storedatadirectlyintoshards

• Expandedshardschema

• Lotskeys,notalotofdataperkey

• actormykvtype(mykey);UPDATEactorsSETval =val+1WHEREid=’mykey';

22

Page 28: ActorDB - Percona · PDF file• Start with 1 node • Add a second • Start “stealing” actors, from top to middle • Redirect requests during movement 20. Actor Copy/Move 1

Foreignkeystoactorstable

23

Sub tables

ResultsinaKVstorewith:• Structureddata• Consistentpartialupdates• Localjoins

Page 29: ActorDB - Percona · PDF file• Start with 1 node • Add a second • Start “stealing” actors, from top to middle • Redirect requests during movement 20. Actor Copy/Move 1

Distributed file system

• Hugenumberoffiles

• Smallamountofdataperfile

• Actor-per-fileimpractical

• KVstoretotherescue

24

Page 30: ActorDB - Percona · PDF file• Start with 1 node • Add a second • Start “stealing” actors, from top to middle • Redirect requests during movement 20. Actor Copy/Move 1

Distributed file system

• actorfilesystem(abc123); insertorignoreintoactors,…;insertintonodevalues(‘abc123’,’server1’); insertintouser_file(12,123, ‘abc123’);

25

Page 31: ActorDB - Percona · PDF file• Start with 1 node • Add a second • Start “stealing” actors, from top to middle • Redirect requests during movement 20. Actor Copy/Move 1

Future plans

Page 32: ActorDB - Percona · PDF file• Start with 1 node • Add a second • Start “stealing” actors, from top to middle • Redirect requests during movement 20. Actor Copy/Move 1

Future plans

• Georeplication

• Kafkalikepubsub

• WALforLMDB

• Map-reduce(luajit)

26

Page 33: ActorDB - Percona · PDF file• Start with 1 node • Add a second • Start “stealing” actors, from top to middle • Redirect requests during movement 20. Actor Copy/Move 1

That is it!Thankyou.