göteborg distributed: eventual consistency in apache cassandra

17
©2013 DataStax Confidential. Do not distribute without consent. Jeremy Hanna Support Engineer Eventual Consistency in Apache Cassandra

Upload: jeremy-hanna

Post on 19-Jun-2015

327 views

Category:

Software


1 download

DESCRIPTION

A brief introduction to Cassandra and an overview of eventual consistency in Cassandra.

TRANSCRIPT

Page 1: Göteborg Distributed: Eventual Consistency in Apache Cassandra

©2013 DataStax Confidential. Do not distribute without consent.

Jeremy Hanna Support Engineer

Eventual Consistency in Apache Cassandra

Page 2: Göteborg Distributed: Eventual Consistency in Apache Cassandra

Cassandra Design•Massive scalability •High Performance •Reliability/Availability •Ease of use

Page 3: Göteborg Distributed: Eventual Consistency in Apache Cassandra

Developer friendly•CQL3 •Collections (List, Map, Set) •User defined types (2.1) •Cassandra native drivers •Native paging •Tracing •DataStax DevCenter tool •Atomic batches •Lightweight transactions •Triggers

Page 4: Göteborg Distributed: Eventual Consistency in Apache Cassandra

CQL3 examples

CREATE KEYSPACE shire WITH REPLICATION = {'class': 'NetworkTopologyStrategy', 'eu' : 3, 'us-east' : 2};

SELECT * FROM emp WHERE empID IN (130,104) ORDER BY deptID DESC;

INSERT INTO excelsior.clicks (userid, url, date, name) VALUES ( 3715e600-2eb0-11e2-81c1-0800200c9a66, ‘http://cassandra.apache.org', ‘2013-10-09', ‘Mary') USING TTL 86400;

UPDATE users SET email = ‘[email protected]’ WHERE login = ‘cbucket64'IF email = ‘[email protected]

CREATE USER bombadil WITH PASSWORD 'goldberry4ever' SUPERUSER;

GRANT ALTER ON KEYSPACE shire TO gandalf;

Page 5: Göteborg Distributed: Eventual Consistency in Apache Cassandra

Ops Friendly•Simple design

•no special role, no single point of failure

•Lots of exposed metrics via JMX •Nodes and entire datacenters can go down with no loss of service •Rapid read protection •DataStax OpsCenter

•Visual monitoring tool •REST interface to metric data •Free version •Hands-off services

Page 6: Göteborg Distributed: Eventual Consistency in Apache Cassandra

Some C* Users

Page 7: Göteborg Distributed: Eventual Consistency in Apache Cassandra

Cassandra Design•Massive scalability

•Multi-datacenter

•High Performance •Reliability/Availability

•no SPOF, no special roles

•Ease of Use

Page 8: Göteborg Distributed: Eventual Consistency in Apache Cassandra

Fully Distributed•Distributed systems introduce complex problems •What is “down”?

•Individual server is down •Network link is down •Long server pause (e.g. GC pause) •Variable network latency

•What do I do when a server is overloaded? •How can I stay available/reliable in such circumstances? •How can I maintain consistency? •How do I reconcile differences?

Page 9: Göteborg Distributed: Eventual Consistency in Apache Cassandra

CAP Theorem•Select two

Consistency

Availability

Partition Tolerance

Page 10: Göteborg Distributed: Eventual Consistency in Apache Cassandra

Eventual Consistency•Individual server durability

•Write to commitlog (batch or periodic sync) •Write to memtable (which gets flushed to disk)

•Achieving consistency level •ONE, QUORUM, ALL •LOCAL_ONE, LOCAL_QUORUM •ANY, EACH_QUORUM (for writes)

•Important to note: •All replicas always get a copy of the write

Page 11: Göteborg Distributed: Eventual Consistency in Apache Cassandra

Stuff happens•Overloaded node •“Down” node(s) •Network partition •Datacenter down •Outcome: inconsistency among replicas

Page 12: Göteborg Distributed: Eventual Consistency in Apache Cassandra

Continually cleaning•Hinted handoff

•valid for a window of time •replays back to node restored to service

•Read repair •after a read, check that data for agreement (digest) •read_repair_chance defaults to 0.1 •also dclocal_read_repair_chance

•Anti-entropy service (manual repair) •Check for agreement for all data for range A-B •Run manual repair every gc grace seconds

Page 13: Göteborg Distributed: Eventual Consistency in Apache Cassandra

Advanced Repair•Manual repairs have limited resolution

•“There is something different in these 1000 rows” •Therefore you have to stream all 1000 rows •Leads to overstreaming, waste

•You can specify start/end keys •Get row level precision •More complicated to execute •DataStax has a repair service to help

Page 14: Göteborg Distributed: Eventual Consistency in Apache Cassandra

Safely consistent?•(LOCAL_)QUORUM reads/writes to be safe? •Ultimately depends on your requirements •Theoretical versus empirical

Page 15: Göteborg Distributed: Eventual Consistency in Apache Cassandra

Netflix Study•Two datacenters (US-East and US-West) •Wrote 500,000 records in each datacenter •50k write operations per second in each DC •Wrote at consistency level ONE •All data read back correctly in other DC •Tried 5 different runs, introduced failures along the way

See planetcassandra.org/blog/post/a-netflix-experiment-eventual-consistency-hopeful-consistency-by-christos-kalantzis/

Page 16: Göteborg Distributed: Eventual Consistency in Apache Cassandra

Practical Consistency•ONE is not suitable for all cases •Review your requirements, SLA •Do your own testing to get comfortable •Flexibility translates into the best performance for your use case

Page 17: Göteborg Distributed: Eventual Consistency in Apache Cassandra

Questions?