Top Banner
CASSANDRA Introduksjon til Apache Cassandra K15/Faggruppemøte Andreas Baakind 27/03/14
53

Cassandra intro

Jul 17, 2015

Download

Software

Andreas Baakind
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Cassandra intro

CASSANDRA

Introduksjon til Apache Cassandra

K15/Faggruppemøte

Andreas Baakind

27/03/14

Page 2: Cassandra intro

HVA ER CASSANDRA? 2

• NoSQL database

• Extensible record store

• Eventual consistent

• Basert på

• Amazon Dynamo

• Google BigTable

• Laget av Facebook

• Videreført av Datastax

• Enterprise

• Flest commits

• Eget spørrespråk

• CQL

Page 3: Cassandra intro

Kan minne om datamodellen til relasjonsdatabaser

EXTENSIBLE RECORD STORE

Page 4: Cassandra intro

KEYSPACE 4

• Tilsvarer en database i relasjonsdatabase-verden

• Ett eller flere keyspace i samme cluster

• Mindre applikasjoner kan dele cluster

• Replikasjonsfaktor settes på keyspace-nivå

• Ulik replikasjonsfaktor i samme cluster

Page 5: Cassandra intro

TABELLER 5

• Sammenlignes med tabeller i relasjonsdatabaser

• Spres over hele clusteret

• Inneholder rader

• Identifiseres av en primary-key

Page 6: Cassandra intro

SUPER COLUMNS & COLUMN FAMILIES 6

• Column families

• Sterk kobling basert på applikasjonens domene

• Lagres sammen

• Rask uthenting

• Forventes å leses samtidig

• Super columns

• Enda ett abstraksjonsnivå

Page 7: Cassandra intro

COLUMNS 7

• Satt sammen av tre attributter

• Name

• Navnet på kolonnen

• Value

• Verdien som lagres

• Timestamp

• Tidsstempel for når dataen ble lagret

• Brukes for å bestemme nyeste verdi

Page 8: Cassandra intro

EVENTUAL CONSISTENT 8

• Cassandra er ikke ACID-compliant

• Ofret for å oppnå skalerbarhet og tilgjengelighet

• Slipper overheaden som følger med ACID

• Konsistent innen kort tid

• Ikke akseptabelt for pengetransaksjoner, aksjesystemer o.l.

• Akseptabelt for sosiale nettverk, analyse-verktøy o.l.

• Oppdaterer replika-noder asynkront

Page 9: Cassandra intro

CASSANDRA @ FACEBOOK 9

• Løse “Inbox-search” problemet

• Laget av Avinash Lakshman & Prashant Malik

• Lakshman var med å lage Amazon Dynamo

• Amazon sin Key-value store

• Cassandra baserer seg på denne

• Open sourced i 2008

• Apache prosjekt i 2009

Page 10: Cassandra intro

STERKESTE SIDER 10

• Skalerbarhet og tilgjengelighet

• Takler ekstremt store mengder lese- og skriveoperasjoner

• “One million writes per second” – Google Cloud Platform

• Desentralisert -> “no single point of failure”

Page 11: Cassandra intro

BRUKSOMRÅDER 11

• Analyseverktøy ala Google Analytics

• Applikasjoner med høy read- and writethroughput

• Som kan akseptere at dataen er eventual consistent!

• Overvåkning

• Logging

Page 12: Cassandra intro

BENCHMARK TEST 12

• Utført av et uavhengig selskap (End Point Corporation)

• Kjørt på Amazon EC2 instanser

• Hver test ble utført tre ganger, på tre ulike dager

• Minimerer sjansen for støy fra andre pga delte ressurser

• YCSB

• (Yahoo Cloud Service Benchmark)

• http://labs.yahoo.com/news/yahoo-cloud-serving-benchmark/

• Benchmark whitepaper:

• http://www.datastax.com/resources/whitepapers/benchmarking-top-nosql-databases

Cassandra, MongoDB & HBase

Page 13: Cassandra intro

THROUGHPUT RESULTATER 13

Kilde: http://www.datastax.com/resources/whitepapers/benchmarking-top-nosql-databases

Page 14: Cassandra intro

THROUGHPUT RESULTATER 14

Kilde: http://www.datastax.com/resources/whitepapers/benchmarking-top-nosql-databases

Page 15: Cassandra intro

LATENCY RESULTATER 15

Kilde: http://www.datastax.com/resources/whitepapers/benchmarking-top-nosql-databases

Page 16: Cassandra intro

“ONE MILLION WRITES PER SECOND” 16

• Postet på Google Cloud platform sin blogg den 20.mars.2014

• Skrevet av Performance Engine Lead @ Google Cloud Platform

• Gir en pekepinn på hva Cassandra klarer

“Cassandra Hits One Million Writes Per Second on Google Compute Engine”

Kilde: http://goo.gl/7MmdO8

Page 17: Cassandra intro

HVEM BRUKER CASSANDRA? 17

Page 18: Cassandra intro

DESIGN

Page 19: Cassandra intro

CLUSTER 19

Page 20: Cassandra intro

REPLIKASJON 20

• Settes på keyspace-nivå

• Bestemmer hvor mange “kopier” av dataen som lagres

• To strategier

• SimpleStrategy

• Default strategi

• Ett datasenter

• NetworkTopologyStrategy

• Har, eller planlegger flere datasentre

• Definerer antall replikaer i hvert datasenter

Page 21: Cassandra intro

SIMPLESTRATEGY 21

Page 22: Cassandra intro

PRIMARY KEY 22

• Bestemmer plassering i clusteret

• Første kolonne i definisjonen er primary key

• Kan kombinere flere kolonner

• Compound key

• Resterende kolonner > clustering columns

• Clustering column

• Defineres etter viktighet

• Resultatsettet sorteres basert på clustering columns

• Kun spørre på kolonner som er definert i primary key’en

• Hvilke kolonner må være med I en spørring?

Eksempler

col1

col1, col2, col3

(col1, col2), col3

Page 23: Cassandra intro

SECONDARY INDEX 23

• Oppretter en “skjult” tabell

• En kopi per node

• For verdier på den lokale noden

• Anbefales kun hvis det er lav kardinalitet

• Kjønn, Sjangre, Land, …

• Høy kardinalitet = dårligere performance

• Bl.a. unødvendig oppslag

• Mye ekstra data

• Denormalisere!

Page 24: Cassandra intro

DENORMALISERING 24

• Diskplass er billig

• Verdt å ofre for skalerbarhet og tilgjengelighet

• Dupliserer verdier

• Tabeller basert på spørringene, eks:

• Track_by_artist

• Track_by_id

• Track_by_title

• Applikasjonens ansvar å holde tabeller i synk

• F.eks via batch-jobber

Page 25: Cassandra intro

COUNTER-TABLES 25

• Perfekt for

• Spore trafikk på nettsider

• Registrere “pings” fra mange sensorer, f.eks

• Passeringer

• Hvis telleren ikke finnes, opprettes den

CREATE TABLE websitestats (

page varchar PRIMARY KEY,

visitors counter

);

UPDATE websitestats SET visitors = visitors + 1 WHERE page = 'demo';

Page 26: Cassandra intro

DATATYPER 26

Kilde: http://goo.gl/X78Rsb

Page 27: Cassandra intro

LIGHTWEIGHT TRANSACTIONS 27

• Brukes til insert og update (upsert)

• IF EXISTS

• IF NOT EXISTS

• IF a = b

Insert into users (username, password) VALUES (‘foo’,’bar’) IF NOT EXISTS;

Update users SET reset_code = null, password = ‘foobar’ WHERE username = ‘foo’ IF reset_code = ‘provided-reset-code’

Page 28: Cassandra intro

TIME-TO-LIVE (TTL) 28

• Antall sekunder en verdi skal være gyldig

• Blir slettet etter gitt tid

• Markeres med en tombstone

• Slettes av Garbage collectoren til Cassandra etterhvert

• Kan settes på rader og kolonner

Insert into users (username, password) values (‘foo’,’bar’) USING TTL 60;

UPDATE users USING TTL 10 SET password = ‘bar’ WHERE username =‘foo’;

Page 29: Cassandra intro

ALLOW FILTERING 29

• Nyttig for debugging

• Ikke anbefalt i produksjon

• Kan spørre på alle indekserte kolonner

• Tar mye ressurser

• Tidkrevende på større datamengder

• Løsning

• Denormaliser tabellen

• Ny tabell-struktur

Page 30: Cassandra intro

BATCH 30

• Bruke samme timestamp for alle operasjoner innad i batchen

• ATOMIC BATCH

• Alt eller ingenting blir gjort

• Skriver til en batchlog

• Slettes når ferdig

• NB: Ingen isolasjon!

• UNLOGGED BATCH

• 30% raskere enn atomic batch

• Skriver ikke til batchloggen

• COUNTER BATCH

• Designet for counter tables

Page 31: Cassandra intro

ANTI-PATTERNS 31

• Design og/eller implementasjon som påvirker performance

Anti-pattern Løsning

Gjøre read før write Bruk IF (NOT) EXISTS

JOIN Denormaliser dataen, lag tabell basertpå spørringen

Store batch-prosesseringer Om mulig brytes ned I mindrebatchjobber. Husk: Ingen isolasjon!

Retur av store resultatsett Default LIMIT er 10.000- Senk denne om mulig- Bruk paging

Risikerer OutOfMemoryException

Page 32: Cassandra intro

PAGING 32

• Begrenser antall returnerte verdier

• Innebygd i Cassandra 2.0

• Enkelt å bruker med java-driveren

Statement.setFetchSize(N)

do

Iterate ResultSet

while ResultSet.fetchMoreResults()

Page 33: Cassandra intro

SIKKERHET 33

• Client-to-node authentication

• Bruker SSL

• Alle nodene må

• Ha SSL-sertifikatene

• Skru på enable_encryption

• Autentisering basert på brukernavn/passord

• Interne brukerprofiler

• Kan bruke clienter som: Hector, Astyanax, CQLSH, Java & C# driveren til DataStax

• Object permission management

• Gi lese/skrive-rettigheter til ulike deler av dataen

• Extern autentisering med DataStax Enterprise

• Støtter LDAP og Kereberos

Page 34: Cassandra intro

CONSISTENCY LEVEL 34

• ANY

• Kun writes

• Kjappeste.

• Skrive til hvilen som helst node

• Hvis ansvarlig node er nede

• Lagres som hinted handoff

• ONE

• Må skrive/lese fra en av nodene

• ALL

• Må skrive/lese til alle nodene

• QUORUM

• Matematisk definert

• Rundes alltid ned

• (replikasjons_faktor / 2 ) + 1

Page 35: Cassandra intro

COMMITLOG, MEMTABLE OG SSTABLE 35

• Commitlog

• Append-only filer

• Write er ikke ferdig før data er skrevet hit

• Memtable

• Opprettes asynkront

• Samler data fra commitloggene

• Fjerner dupliserte verdier

• SSTable

• Memtables flushes til disk som SSTables

• Periodisk

• Når en gitt størrelse

• En SSTable = En fil i filsystemet

• Immutable

• In-memory indeksen finner riktig SSTable

Page 36: Cassandra intro

HVORDAN EN WRITE FUNGERER 36

• Request treffer en vilkårlig node > Coordinator-node

• Router writen til riktig node

• Venter på svar basert på consistency-level

• ANY - returneres første svar

• Evt. hinted handoff

• ONE – første node som svarer

• ALL - venter man på alle

• Asynkront skrives data til memtables, og deretter til SSTables.

Page 37: Cassandra intro

HVORDAN EN READ FUNGERER 37

• Samme måte som en write

• Venter på antall svar, basert på consistency-level og replikasjonsfaktoren

• Hvis ulike verdier mottas fra nodene

• Returner nyeste basert på timestamp

• Oppdater resterende noder asynkront

Page 38: Cassandra intro

USE CASES 38

Firma Bruksområde

Netflix - Metadata for filmer- Subscriber system- Visningshistorikk

Spotify - Spillelister- Radiostasjoner- Notifikasjoner- Artister du følger

Ebay - Brukeraktivitet- Anbefalinger i real-time (liker, ikke liker)

Finn.no - Dine siste søk- Innboks (samme som Cassandra var for Facebook)- Annonse-statistikk til bruker- Scam-deteksjon

Page 39: Cassandra intro

DATASTAX

Page 40: Cassandra intro

DATASTAX 40

• Viktigste bidragsyter til Cassandra-kodebasen

• Kommersielle verktøy for Cassandra

• OpsCenter

• Overvåkning og administrasjon av clustere

• DevCenter

• GUI for CQL-spørringer

• Enterprise

• Pakke som inkluderer blandt annet support

Page 41: Cassandra intro

DATASTAX SERTIFISERING 41

• Enkel og grei intro til Cassandra

• Litt Java 101 innimellom

• Syv sesjoner

• Videoer med spørsmål og forklaring

• Oppgaver etter hver sesjon

https://datastaxacademy.elogiclearning.com/

Page 42: Cassandra intro

DATSTAX OPSCENTER 42

• Visuell overvåkning

• Trafikk

• Datamengde

• Feil

• Varsling ved behov

• Skalering

• Detekter skjevheter idata-distribusjonen

Page 43: Cassandra intro

DATASTAX DEVCENTER 43

• Visuelt verktøy for spørringer i CQL

• Bra for testing & verifisering

• Lagre serier med CQL-kommandoer > Script

Page 44: Cassandra intro

DATASTAX ENTERPRISE 44

• Produksjonsklar versjon av Cassandra

• Analyse-verktøy

• Integrert søk med Solr

• Bedre sikkerhetsløsninger

• In-memory feature*

• Support

*In-memory processing gir 100 ganger raskere prosessering av data

Page 45: Cassandra intro

DRIVERE 45

• Datastax sine egne drivere

• Java

• C#

• Python

• Community-drivere

• Clojure

• Erlang

• Go

• .Net

• Node.js

• Scala

• Ruby

• …

http://www.datastax.com/download#dl-datastax-drivers

Page 46: Cassandra intro

MASTEROPPGAVEN

Automatisk skalering av noder i et Cassandra-cluster

Page 47: Cassandra intro

MOTIVASJON 47

• Cassandra brukes hos mange av de store

• Facebook

• Netflix

• Spotify

• Ingen løsning for automatisk opp- og nedskalering

• Netflix’ Priam

Page 48: Cassandra intro

PRIAM 48

• Open sourced av Netflix i 2012

• Kjører parallellt med Cassandra på nodene

• Utfører backup og recovery

• Dobler antall noder ved oppskalering

• Ingen nedskalering

• Spesialtilpasset AWS

Page 49: Cassandra intro

HECUBA 49

• Automatisk opp- og nedskalering av noder

• Kjører parallellt med Cassandra på nodene

• En agent-implementasjon lignende Priam sin

• Fungerer i teorien på alle cloud services

• Inkludert interne

Page 50: Cassandra intro

HVORFOR HECUBA? 50

• Gresk mytologi

Page 51: Cassandra intro

MÅL 51

• Avlaste db-admin

• Ikke erstatte

• Løse nedskalering av noder

• Finnes ingen kjent implementasjon

• Mye vanskeligere enn oppskalering

• Grunnlag for videre utvikling

Page 52: Cassandra intro

FORSØKENE 52

• Flere forsøk på implementasjon

• Første forsøk direkte i kildekoden

• Eget STAGE

• Utvide gossip-protokollen

• Ta i bruk timestamps

• Endelig forsøk: Separat implementasjon

• Master – Agent

• Master kjører separat fra nodene

• En agent per node

• Enklere vedlikehold

• Uavhengig av oppdateringer til Cassandra

• Generell funksjonalitet

Page 53: Cassandra intro

SPØRSMÅL?