SlideShare a Scribd company logo
Apache Cassandra and Drivers
Overview of Apache Cassandra and DataStax Drivers
Bulat Shakirzyanov
@avalanche123
Sandeep Tamhankar
@stamhankar999
https://goo.gl/cBsRVv
Introduction
Cassandra Overview
© 2015 DataStax, All Rights Reserved.
Datacenter Datacenter
Cassandra Topology
3
Node
NodeNode
Node
Client Client
Node
NodeNode
Node
Client Client
Cluster
© 2015 DataStax, All Rights Reserved.
Datacenter Datacenter
Request Coordinator
4
Node
NodeNode
Node
Client Client
Node
NodeCoordinator
Node
Client Client
Coordinator node:
Forwards requests
to corresponding replicas
© 2015 DataStax, All Rights Reserved.
Datacenter
Row Replica
5
Replica
NodeNode
Replica
Client Client
Datacenter
Node
Node
Replica
Client Client
Coordinator
Replica node:
Stores a slice of total rows
of each keyspace
© 2015 DataStax, All Rights Reserved.
Token Ring
6
12
1
2
3
4
5
6
7
8
9
10
11
© 2015 DataStax, All Rights Reserved.
Token Ring
6
-263 … (+263 - 1)
Murmur3 Partitioner
© 2015 DataStax, All Rights Reserved.
Token Ring
6
Node
11…12
Node
12…1
Node
1…2
Node
2…3
Node
3…4
Node
4…5
Node
5…6
Node
6…7
Node
7…8
Node
8…9
Node
9…10
Node
10…11
-263 … (+263 - 1)
Murmur3 Partitioner
© 2015 DataStax, All Rights Reserved.
Keyspaces
7
CREATE KEYSPACE default WITH replication = {
'class': 'SimpleStrategy',
'replication_factor': 3
}
© 2015 DataStax, All Rights Reserved.
C*
Data Partitioning
8
Keyspace
Row
token(PK) = 1
RF = 3
Partitioner:
Gets a token by hashing
the primary key of a row
© 2015 DataStax, All Rights Reserved.
C*
Replication Strategy
9
Keyspace
1
Row
RF = 3
Replication strategy:
Determines the first
replica for the row
token(PK) = 1
© 2015 DataStax, All Rights Reserved.
C*
Replication Factor
10
Keyspace
Row
RF = 3
Replication factor:
Specifies total number of
replicas for each row
token(PK) = 1
© 2015 DataStax, All Rights Reserved.
Coordinator
Node Replica
Replica
Node
11
ReplicaApplication
Consistency Level
RF = 3, CL = Quorum
© 2015 DataStax, All Rights Reserved.
Coordinator
Node Replica
Replica
Node
11
ReplicaApplication
Consistency Level
RF = 3, CL = Quorum
INSERT
© 2015 DataStax, All Rights Reserved.
Coordinator
Node Replica
Replica
Node
11
ReplicaApplication
Consistency Level
RF = 3, CL = Quorum
INSERT
© 2015 DataStax, All Rights Reserved.
Coordinator
Node Replica
Replica
Node
11
ReplicaApplication
Consistency Level
RF = 3, CL = Quorum
INSERT
© 2015 DataStax, All Rights Reserved.
Coordinator
Node Replica
Replica
Node
11
ReplicaApplication
Consistency Level
RF = 3, CL = Quorum
INSERT
DataStax Drivers
Smart clients for Apache Cassandra
© 2015 DataStax, All Rights Reserved.
Goals of DataStax Drivers
• Consistent set of features across languages
• Asynchronous execution of requests
• Load balancing
• Fault tolerant
• Address Resolution (multi-region!)
• Automatic cluster discovery and reconnection
• Flexible to the core
• Consistent terminology
• Open source
13
© 2015 DataStax, All Rights Reserved. 14
Asynchronous Execution
IO Reactor, Request Pipelining and Future Composition
© 2015 DataStax, All Rights Reserved.
Asynchronous Core
16
Application Thread
Business Logic
Driver
Background Thread
IO Reactor
© 2015 DataStax, All Rights Reserved.
Request Pipelining
17
Client
Without
Request Pipelining
Server
Client Server
With
Request Pipelining
1
2
2
3
1
3
1
2
3
1
2
3
© 2015 DataStax, All Rights Reserved.
What is a Future?
• Represents the result of an asynchronous operation
• Returned by any *_async method in the Ruby driver
• execute_async
• prepare_async
• Will block if asked for the true result
18
© 2015 DataStax, All Rights Reserved.
Future Composition
19
select_user = session.prepare('SELECT * FROM users WHERE id = ?')
select_page = session.prepare('SELECT * FROM pages WHERE slug = ?')
user_ids = [1, 2, 3, 4]
futures = user_ids.map do |id|
future = session.execute_async(select_user, arguments: [id])
future.then do |users|
user = users.first
future = session.execute_async(select_page, arguments: [user['username']])
future.then do |pages|
page = pages.first
User.new(user, Page.new(page))
end
end
end
Cassandra::Future.all(futures).get
© 2015 DataStax, All Rights Reserved.
select_user = session.prepare('SELECT * FROM users WHERE id = ?')
select_page = session.prepare('SELECT * FROM pages WHERE slug = ?')
user_ids = [1, 2, 3, 4]
futures = user_ids.map do |id|
future = session.execute_async(select_user, arguments: [id])
future.then do |users|
user = users.first
future = session.execute_async(select_page, arguments: [user['username']])
future.then do |pages|
page = pages.first
User.new(user, Page.new(page))
end
end
end
Cassandra::Future.all(futures).get
Future Composition
20
© 2015 DataStax, All Rights Reserved.
select_user = session.prepare('SELECT * FROM users WHERE id = ?')
select_page = session.prepare('SELECT * FROM pages WHERE slug = ?')
user_ids = [1, 2, 3, 4]
futures = user_ids.map do |id|
future = session.execute_async(select_user, arguments: [id])
future.then do |users|
user = users.first
future = session.execute_async(select_page, arguments: [user['username']])
future.then do |pages|
page = pages.first
User.new(user, Page.new(page))
end
end
end
Cassandra::Future.all(futures).get
Future Composition
21
© 2015 DataStax, All Rights Reserved.
select_user = session.prepare('SELECT * FROM users WHERE id = ?')
select_page = session.prepare('SELECT * FROM pages WHERE slug = ?')
user_ids = [1, 2, 3, 4]
futures = user_ids.map do |id|
future = session.execute_async(select_user, arguments: [id])
future.then do |users|
user = users.first
future = session.execute_async(select_page, arguments: [user['username']])
future.then do |pages|
page = pages.first
User.new(user, Page.new(page))
end
end
end
Cassandra::Future.all(futures).get
Future Composition
22
© 2015 DataStax, All Rights Reserved.
select_user = session.prepare('SELECT * FROM users WHERE id = ?')
select_page = session.prepare('SELECT * FROM pages WHERE slug = ?')
user_ids = [1, 2, 3, 4]
futures = user_ids.map do |id|
future = session.execute_async(select_user, arguments: [id])
future.then do |users|
user = users.first
future = session.execute_async(select_page, arguments: [user['username']])
future.then do |pages|
page = pages.first
User.new(user, Page.new(page))
end
end
end
Cassandra::Future.all(futures).get
Future Composition
23
© 2015 DataStax, All Rights Reserved.
select_user = session.prepare('SELECT * FROM users WHERE id = ?')
select_page = session.prepare('SELECT * FROM pages WHERE slug = ?')
user_ids = [1, 2, 3, 4]
futures = user_ids.map do |id|
future = session.execute_async(select_user, arguments: [id])
future.then do |users|
user = users.first
future = session.execute_async(select_page, arguments: [user['username']])
future.then do |pages|
page = pages.first
User.new(user, Page.new(page))
end
end
end
Cassandra::Future.all(futures).get
Future Composition
24
© 2015 DataStax, All Rights Reserved.
Future Composition
25
[#<User @id=1 @username="avalanche123"; @page=#<Page @slug="avalanche123" ... > ... >, ... ]
© 2015 DataStax, All Rights Reserved.
Pop Quiz: How to make this faster?
26
select_user = session.prepare('SELECT * FROM users WHERE id = ?')
select_page = session.prepare('SELECT * FROM pages WHERE slug = ?')
user_ids = [1, 2, 3, 4]
futures = user_ids.map do |id|
future = session.execute_async(select_user, arguments: [id])
future.then do |users|
user = users.first
future = session.execute_async(select_page,
arguments: [user['username']])
future.then do |pages|
page = pages.first
User.new(user, Page.new(page))
end
end
end
Cassandra::Future.all(futures).get
© 2015 DataStax, All Rights Reserved.
Pop Quiz: How to make this faster?
27
user_future = session.prepare_async(‘SELECT * FROM users WHERE id = ?')
page_future = session.prepare_async(‘SELECT * FROM pages WHERE slug = ?’)
user_ids = [1, 2, 3, 4]
futures = user_ids.map do |id|
future = session.execute_async(user_future.get, arguments: [id])
future.then do |users|
user = users.first
future = session.execute_async(page_future.get,
arguments: [user['username']])
future.then do |pages|
page = pages.first
User.new(user, Page.new(page))
end
end
end
Cassandra::Future.all(futures).get
Load Balancing
Principles and Implementations
© 2015 DataStax, All Rights Reserved.
Application Driver
Load Balancing
29
Application
Thread
Node
Pool
Session
Pool
Pool
Pool
Application
Thread
Application
Thread
Client Cluster
Node
Node
Node
Load Balancing
Policy
© 2015 DataStax, All Rights Reserved.
Application Driver
Load Balancing
29
Application
Thread
Node
Pool
Session
Pool
Pool
Pool
Application
Thread
Application
Thread
Client Cluster
Node
Node
Node
Load Balancing
Policy
© 2015 DataStax, All Rights Reserved.
Application Driver
Load Balancing
29
Application
Thread
Node
Pool
Session
Pool
Pool
Pool
Application
Thread
Application
Thread
Client Cluster
Node
Node
Node
Load Balancing
Policy
© 2015 DataStax, All Rights Reserved.
Datacenter
Datacenter
DataCenter Aware Balancing
30
Node
Node
NodeClient
Node
Node
Node
Client
Client
Client
Client
Client
Local nodes are queried
first, if none are available,
the request could be
sent to a remote node.
© 2015 DataStax, All Rights Reserved.
Token Aware Balancing
31
Route request
directly to Replicas
Node
Node
Replica
Node
Client
Replica
Replica
Uses prepared statement
metadata to get the token
© 2015 DataStax, All Rights Reserved.
Other built-in policies
• Round Robin Policy
• ignores topology
• White List Policy
• only connect with certain hosts
32
Fault Tolerance
Sources of Failure and Error Handling
© 2015 DataStax, All Rights Reserved.
Fault Tolerance
34
Coordinator
Node Replica
Replica
Replica
Node
Business Logic
Driver
Application
© 2015 DataStax, All Rights Reserved. 35
Coordinator
Node Replica
Replica
Replica
Node
Business Logic
Driver
Application
Invalid Requests
Network Timeouts
Server Errors
Possible Failures
© 2015 DataStax, All Rights Reserved.
Application Driver
Automatic Retry of Server Errors
36
Application
Thread
Node
Pool
Session
Pool
Pool
Pool
Application
Thread
Application
Thread
Client Cluster
Node
Node
Node
Load Balancing
Policy
© 2015 DataStax, All Rights Reserved.
Application Driver
Automatic Retry of Server Errors
36
Application
Thread
Node
Pool
Session
Pool
Pool
Pool
Application
Thread
Application
Thread
Client Cluster
Node
Node
Node
Load Balancing
Policy
© 2015 DataStax, All Rights Reserved.
Application Driver
Automatic Retry of Server Errors
36
Application
Thread
Node
Pool
Session
Pool
Pool
Pool
Application
Thread
Application
Thread
Client Cluster
Node
Node
Node
Load Balancing
Policy
© 2015 DataStax, All Rights Reserved. 37
Coordinator
Node Replica
Replica
Replica
Node
Business Logic
Driver
Application
Unreachable Consistency
© 2015 DataStax, All Rights Reserved.
Coordinator
Node Replica
Replica
Node
38
Replica
Business Logic
Driver
Application
Read / Write Timeout Error
© 2015 DataStax, All Rights Reserved.
Coordinator
Node Replica
Replica
Node
38
Replica
Business Logic
Driver
Application
Read / Write Timeout Error
© 2015 DataStax, All Rights Reserved.
Coordinator
Node Replica
Replica
Node
38
Replica
Business Logic
Driver
Application
Read / Write Timeout Error
read / write timeout
© 2015 DataStax, All Rights Reserved. 39
Coordinator
Node Replica
Replica
Replica
Node
Business Logic
Driver
Application
Unavailable Error
© 2015 DataStax, All Rights Reserved. 39
Coordinator
Node Replica
Replica
Replica
Node
Business Logic
Driver
Application
Unavailable Error
unavailable
© 2015 DataStax, All Rights Reserved. 40
Error Handling
Address Resolution
Topology Aware Client
© 2015 DataStax, All Rights Reserved.
Datacenter Datacenter
Multiple Addresses
42
Node
NodeNode
Node
Client Client
Node
NodeNode
Node
Client Client
Within Datacenter:

Private IPs
Across Datacenters:

Public IPs
© 2015 DataStax, All Rights Reserved.
Application Driver
Address Resolution
43
Application
Thread
Application
Thread
Application
Thread
Client Cluster
© 2015 DataStax, All Rights Reserved.
Application Driver
Address Resolution
43
Application
Thread Node
Cluster
Application
Thread
Application
Thread
Client Cluster
Address
Resolution Policy
© 2015 DataStax, All Rights Reserved.
Application Driver
Address Resolution
43
Application
Thread Node
Cluster
Application
Thread
Application
Thread
Client Cluster
Node
Node
Node
Address
Resolution Policy
Control Connection
© 2015 DataStax, All Rights Reserved.
Application Driver
Address Resolution
43
Application
Thread Node
Cluster
Application
Thread
Application
Thread
Client Cluster
Node
Node
Node
Address
Resolution Policy
Control Connection
© 2015 DataStax, All Rights Reserved.
Application Driver
Address Resolution
43
Application
Thread Node
Pool
Cluster
Pool
Pool
Pool
Application
Thread
Application
Thread
Client Cluster
Node
Node
Node
Address
Resolution Policy
Control Connection
Session
© 2015 DataStax, All Rights Reserved.
EC2 Multi-Region Address Resolution
44
© 2015 DataStax, All Rights Reserved.
More
• Request Tracing
• Execution Information
• which node was used, # retries for query, etc.
• State Listeners
• node goes down/comes up, schema changes, etc.
• Result Paging
• SSL and Authentication
45
Questions

More Related Content

PDF
Advanced Cassandra
PPTX
Spark Cassandra Connector: Past, Present and Furure
PDF
Advanced Data Modeling with Apache Cassandra
PDF
Real Time Analytics with Dse
PDF
Cassandra 3.0 advanced preview
PPTX
Enabling Search in your Cassandra Application with DataStax Enterprise
PDF
Introduction to Apache Cassandra™ + What’s New in 4.0
PDF
Introduction to CQL and Data Modeling with Apache Cassandra
Advanced Cassandra
Spark Cassandra Connector: Past, Present and Furure
Advanced Data Modeling with Apache Cassandra
Real Time Analytics with Dse
Cassandra 3.0 advanced preview
Enabling Search in your Cassandra Application with DataStax Enterprise
Introduction to Apache Cassandra™ + What’s New in 4.0
Introduction to CQL and Data Modeling with Apache Cassandra

What's hot (20)

PDF
Storing time series data with Apache Cassandra
PDF
Coursera Cassandra Driver
PDF
Real data models of silicon valley
PDF
How We Used Cassandra/Solr to Build Real-Time Analytics Platform
PDF
Beyond the Query – Bringing Complex Access Patterns to NoSQL with DataStax - ...
PDF
Cassandra 2.0 and timeseries
PDF
Introduction to data modeling with apache cassandra
PDF
DataStax | Effective Testing in DSE (Lessons Learned) (Predrag Knezevic) | Ca...
PPTX
From Postgres to Cassandra (Rimas Silkaitis, Heroku) | C* Summit 2016
PPTX
Using Spark to Load Oracle Data into Cassandra
PPTX
DataStax | Data Science with DataStax Enterprise (Brian Hess) | Cassandra Sum...
PDF
DataStax | Advanced DSE Analytics Client Configuration (Jacek Lewandowski) | ...
PDF
Time series with apache cassandra strata
PDF
Maximum Overdrive: Tuning the Spark Cassandra Connector (Russell Spitzer, Dat...
PDF
Cassandra Basics, Counters and Time Series Modeling
PDF
How to Bulletproof Your Scylla Deployment
PDF
Time series with Apache Cassandra - Long version
PDF
Advanced Operations
PPTX
DataStax | DSE: Bring Your Own Spark (with Enterprise Security) (Artem Aliev)...
PPTX
Scylla Summit 2018: From SAP to Scylla - Tracking the Fleet at GPS Insight
Storing time series data with Apache Cassandra
Coursera Cassandra Driver
Real data models of silicon valley
How We Used Cassandra/Solr to Build Real-Time Analytics Platform
Beyond the Query – Bringing Complex Access Patterns to NoSQL with DataStax - ...
Cassandra 2.0 and timeseries
Introduction to data modeling with apache cassandra
DataStax | Effective Testing in DSE (Lessons Learned) (Predrag Knezevic) | Ca...
From Postgres to Cassandra (Rimas Silkaitis, Heroku) | C* Summit 2016
Using Spark to Load Oracle Data into Cassandra
DataStax | Data Science with DataStax Enterprise (Brian Hess) | Cassandra Sum...
DataStax | Advanced DSE Analytics Client Configuration (Jacek Lewandowski) | ...
Time series with apache cassandra strata
Maximum Overdrive: Tuning the Spark Cassandra Connector (Russell Spitzer, Dat...
Cassandra Basics, Counters and Time Series Modeling
How to Bulletproof Your Scylla Deployment
Time series with Apache Cassandra - Long version
Advanced Operations
DataStax | DSE: Bring Your Own Spark (with Enterprise Security) (Artem Aliev)...
Scylla Summit 2018: From SAP to Scylla - Tracking the Fleet at GPS Insight
Ad

Viewers also liked (20)

PPTX
Bad Habits Die Hard
PDF
Standing Up Your First Cluster
PDF
Cassandra Core Concepts
PDF
Introduction to Data Modeling with Apache Cassandra
PDF
Production Ready Cassandra
PPTX
Cassandra Adoption on Cisco UCS & Open stack
PPTX
Introduction to DataStax Enterprise Advanced Replication with Apache Cassandra
PDF
Cassandra @ Netflix: Monitoring C* at Scale, Gossip and Tickler & Python
PDF
Data Modeling for Apache Cassandra
PPTX
Introduction to DataStax Enterprise Graph Database
PDF
Cassandra 3.0 Data Modeling
PPTX
Cassandra on Docker @ Walmart Labs
PPTX
Cassandra @ Sony: The good, the bad, and the ugly part 1
PPTX
Cassandra @ Sony: The good, the bad, and the ugly part 2
PDF
C* Summit 2013: Virtual Nodes: Rethinking Topology in Cassandra by Eric Evans
PDF
Getting Started with Graph Databases
PDF
Analytics with Spark and Cassandra
PDF
Cassandra Data Maintenance with Spark
PDF
Client Drivers and Cassandra, the Right Way
PDF
Cassandra: One (is the loneliest number)
Bad Habits Die Hard
Standing Up Your First Cluster
Cassandra Core Concepts
Introduction to Data Modeling with Apache Cassandra
Production Ready Cassandra
Cassandra Adoption on Cisco UCS & Open stack
Introduction to DataStax Enterprise Advanced Replication with Apache Cassandra
Cassandra @ Netflix: Monitoring C* at Scale, Gossip and Tickler & Python
Data Modeling for Apache Cassandra
Introduction to DataStax Enterprise Graph Database
Cassandra 3.0 Data Modeling
Cassandra on Docker @ Walmart Labs
Cassandra @ Sony: The good, the bad, and the ugly part 1
Cassandra @ Sony: The good, the bad, and the ugly part 2
C* Summit 2013: Virtual Nodes: Rethinking Topology in Cassandra by Eric Evans
Getting Started with Graph Databases
Analytics with Spark and Cassandra
Cassandra Data Maintenance with Spark
Client Drivers and Cassandra, the Right Way
Cassandra: One (is the loneliest number)
Ad

Similar to Apache Cassandra and Drivers (20)

PDF
Ruby Driver Explained: DataStax Webinar May 5th 2015
PDF
Paris Cassandra Meetup - Cassandra for Developers
PDF
ChtiJUG - Cassandra 2.0
PPTX
DataStax NYC Java Meetup: Cassandra with Java
PDF
Cassandra Drivers and Tools
PDF
Cassandra: An Alien Technology That's not so Alien
PDF
Cassandra drivers and libraries
PDF
Cassandra 2.0 to 2.1
PDF
Tokyo Cassandra Summit 2014: Apache Cassandra 2.0 + 2.1 by Jonathan Ellis
PDF
Tokyo cassandra conference 2014
PDF
Introduction to .Net Driver
PDF
YaJug - Cassandra for Java Developers
PDF
Slides: Relational to NoSQL Migration
PDF
NYC Cassandra Day - Java Intro
PDF
Datastax day 2016 introduction to apache cassandra
PDF
Cassandra Summit 2013 Keynote
PDF
Geneva JUG - Cassandra for Java Developers
PDF
Going native with Apache Cassandra
PDF
Things YouShould Be Doing When Using Cassandra Drivers
PPTX
Cassandra's Sweet Spot - an introduction to Apache Cassandra
Ruby Driver Explained: DataStax Webinar May 5th 2015
Paris Cassandra Meetup - Cassandra for Developers
ChtiJUG - Cassandra 2.0
DataStax NYC Java Meetup: Cassandra with Java
Cassandra Drivers and Tools
Cassandra: An Alien Technology That's not so Alien
Cassandra drivers and libraries
Cassandra 2.0 to 2.1
Tokyo Cassandra Summit 2014: Apache Cassandra 2.0 + 2.1 by Jonathan Ellis
Tokyo cassandra conference 2014
Introduction to .Net Driver
YaJug - Cassandra for Java Developers
Slides: Relational to NoSQL Migration
NYC Cassandra Day - Java Intro
Datastax day 2016 introduction to apache cassandra
Cassandra Summit 2013 Keynote
Geneva JUG - Cassandra for Java Developers
Going native with Apache Cassandra
Things YouShould Be Doing When Using Cassandra Drivers
Cassandra's Sweet Spot - an introduction to Apache Cassandra

Recently uploaded (20)

PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PPTX
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
KodekX | Application Modernization Development
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PDF
Network Security Unit 5.pdf for BCA BBA.
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PDF
Encapsulation_ Review paper, used for researhc scholars
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
Unlocking AI with Model Context Protocol (MCP)
PPTX
Big Data Technologies - Introduction.pptx
PPT
Teaching material agriculture food technology
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
Dropbox Q2 2025 Financial Results & Investor Presentation
KodekX | Application Modernization Development
Understanding_Digital_Forensics_Presentation.pptx
Advanced methodologies resolving dimensionality complications for autism neur...
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
MIND Revenue Release Quarter 2 2025 Press Release
Network Security Unit 5.pdf for BCA BBA.
20250228 LYD VKU AI Blended-Learning.pptx
Diabetes mellitus diagnosis method based random forest with bat algorithm
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
Spectral efficient network and resource selection model in 5G networks
NewMind AI Weekly Chronicles - August'25 Week I
Encapsulation_ Review paper, used for researhc scholars
Digital-Transformation-Roadmap-for-Companies.pptx
Unlocking AI with Model Context Protocol (MCP)
Big Data Technologies - Introduction.pptx
Teaching material agriculture food technology

Apache Cassandra and Drivers

  • 1. Apache Cassandra and Drivers Overview of Apache Cassandra and DataStax Drivers Bulat Shakirzyanov @avalanche123 Sandeep Tamhankar @stamhankar999 https://goo.gl/cBsRVv
  • 3. © 2015 DataStax, All Rights Reserved. Datacenter Datacenter Cassandra Topology 3 Node NodeNode Node Client Client Node NodeNode Node Client Client Cluster
  • 4. © 2015 DataStax, All Rights Reserved. Datacenter Datacenter Request Coordinator 4 Node NodeNode Node Client Client Node NodeCoordinator Node Client Client Coordinator node: Forwards requests to corresponding replicas
  • 5. © 2015 DataStax, All Rights Reserved. Datacenter Row Replica 5 Replica NodeNode Replica Client Client Datacenter Node Node Replica Client Client Coordinator Replica node: Stores a slice of total rows of each keyspace
  • 6. © 2015 DataStax, All Rights Reserved. Token Ring 6 12 1 2 3 4 5 6 7 8 9 10 11
  • 7. © 2015 DataStax, All Rights Reserved. Token Ring 6 -263 … (+263 - 1) Murmur3 Partitioner
  • 8. © 2015 DataStax, All Rights Reserved. Token Ring 6 Node 11…12 Node 12…1 Node 1…2 Node 2…3 Node 3…4 Node 4…5 Node 5…6 Node 6…7 Node 7…8 Node 8…9 Node 9…10 Node 10…11 -263 … (+263 - 1) Murmur3 Partitioner
  • 9. © 2015 DataStax, All Rights Reserved. Keyspaces 7 CREATE KEYSPACE default WITH replication = { 'class': 'SimpleStrategy', 'replication_factor': 3 }
  • 10. © 2015 DataStax, All Rights Reserved. C* Data Partitioning 8 Keyspace Row token(PK) = 1 RF = 3 Partitioner: Gets a token by hashing the primary key of a row
  • 11. © 2015 DataStax, All Rights Reserved. C* Replication Strategy 9 Keyspace 1 Row RF = 3 Replication strategy: Determines the first replica for the row token(PK) = 1
  • 12. © 2015 DataStax, All Rights Reserved. C* Replication Factor 10 Keyspace Row RF = 3 Replication factor: Specifies total number of replicas for each row token(PK) = 1
  • 13. © 2015 DataStax, All Rights Reserved. Coordinator Node Replica Replica Node 11 ReplicaApplication Consistency Level RF = 3, CL = Quorum
  • 14. © 2015 DataStax, All Rights Reserved. Coordinator Node Replica Replica Node 11 ReplicaApplication Consistency Level RF = 3, CL = Quorum INSERT
  • 15. © 2015 DataStax, All Rights Reserved. Coordinator Node Replica Replica Node 11 ReplicaApplication Consistency Level RF = 3, CL = Quorum INSERT
  • 16. © 2015 DataStax, All Rights Reserved. Coordinator Node Replica Replica Node 11 ReplicaApplication Consistency Level RF = 3, CL = Quorum INSERT
  • 17. © 2015 DataStax, All Rights Reserved. Coordinator Node Replica Replica Node 11 ReplicaApplication Consistency Level RF = 3, CL = Quorum INSERT
  • 18. DataStax Drivers Smart clients for Apache Cassandra
  • 19. © 2015 DataStax, All Rights Reserved. Goals of DataStax Drivers • Consistent set of features across languages • Asynchronous execution of requests • Load balancing • Fault tolerant • Address Resolution (multi-region!) • Automatic cluster discovery and reconnection • Flexible to the core • Consistent terminology • Open source 13
  • 20. © 2015 DataStax, All Rights Reserved. 14
  • 21. Asynchronous Execution IO Reactor, Request Pipelining and Future Composition
  • 22. © 2015 DataStax, All Rights Reserved. Asynchronous Core 16 Application Thread Business Logic Driver Background Thread IO Reactor
  • 23. © 2015 DataStax, All Rights Reserved. Request Pipelining 17 Client Without Request Pipelining Server Client Server With Request Pipelining 1 2 2 3 1 3 1 2 3 1 2 3
  • 24. © 2015 DataStax, All Rights Reserved. What is a Future? • Represents the result of an asynchronous operation • Returned by any *_async method in the Ruby driver • execute_async • prepare_async • Will block if asked for the true result 18
  • 25. © 2015 DataStax, All Rights Reserved. Future Composition 19 select_user = session.prepare('SELECT * FROM users WHERE id = ?') select_page = session.prepare('SELECT * FROM pages WHERE slug = ?') user_ids = [1, 2, 3, 4] futures = user_ids.map do |id| future = session.execute_async(select_user, arguments: [id]) future.then do |users| user = users.first future = session.execute_async(select_page, arguments: [user['username']]) future.then do |pages| page = pages.first User.new(user, Page.new(page)) end end end Cassandra::Future.all(futures).get
  • 26. © 2015 DataStax, All Rights Reserved. select_user = session.prepare('SELECT * FROM users WHERE id = ?') select_page = session.prepare('SELECT * FROM pages WHERE slug = ?') user_ids = [1, 2, 3, 4] futures = user_ids.map do |id| future = session.execute_async(select_user, arguments: [id]) future.then do |users| user = users.first future = session.execute_async(select_page, arguments: [user['username']]) future.then do |pages| page = pages.first User.new(user, Page.new(page)) end end end Cassandra::Future.all(futures).get Future Composition 20
  • 27. © 2015 DataStax, All Rights Reserved. select_user = session.prepare('SELECT * FROM users WHERE id = ?') select_page = session.prepare('SELECT * FROM pages WHERE slug = ?') user_ids = [1, 2, 3, 4] futures = user_ids.map do |id| future = session.execute_async(select_user, arguments: [id]) future.then do |users| user = users.first future = session.execute_async(select_page, arguments: [user['username']]) future.then do |pages| page = pages.first User.new(user, Page.new(page)) end end end Cassandra::Future.all(futures).get Future Composition 21
  • 28. © 2015 DataStax, All Rights Reserved. select_user = session.prepare('SELECT * FROM users WHERE id = ?') select_page = session.prepare('SELECT * FROM pages WHERE slug = ?') user_ids = [1, 2, 3, 4] futures = user_ids.map do |id| future = session.execute_async(select_user, arguments: [id]) future.then do |users| user = users.first future = session.execute_async(select_page, arguments: [user['username']]) future.then do |pages| page = pages.first User.new(user, Page.new(page)) end end end Cassandra::Future.all(futures).get Future Composition 22
  • 29. © 2015 DataStax, All Rights Reserved. select_user = session.prepare('SELECT * FROM users WHERE id = ?') select_page = session.prepare('SELECT * FROM pages WHERE slug = ?') user_ids = [1, 2, 3, 4] futures = user_ids.map do |id| future = session.execute_async(select_user, arguments: [id]) future.then do |users| user = users.first future = session.execute_async(select_page, arguments: [user['username']]) future.then do |pages| page = pages.first User.new(user, Page.new(page)) end end end Cassandra::Future.all(futures).get Future Composition 23
  • 30. © 2015 DataStax, All Rights Reserved. select_user = session.prepare('SELECT * FROM users WHERE id = ?') select_page = session.prepare('SELECT * FROM pages WHERE slug = ?') user_ids = [1, 2, 3, 4] futures = user_ids.map do |id| future = session.execute_async(select_user, arguments: [id]) future.then do |users| user = users.first future = session.execute_async(select_page, arguments: [user['username']]) future.then do |pages| page = pages.first User.new(user, Page.new(page)) end end end Cassandra::Future.all(futures).get Future Composition 24
  • 31. © 2015 DataStax, All Rights Reserved. Future Composition 25 [#<User @id=1 @username="avalanche123"; @page=#<Page @slug="avalanche123" ... > ... >, ... ]
  • 32. © 2015 DataStax, All Rights Reserved. Pop Quiz: How to make this faster? 26 select_user = session.prepare('SELECT * FROM users WHERE id = ?') select_page = session.prepare('SELECT * FROM pages WHERE slug = ?') user_ids = [1, 2, 3, 4] futures = user_ids.map do |id| future = session.execute_async(select_user, arguments: [id]) future.then do |users| user = users.first future = session.execute_async(select_page, arguments: [user['username']]) future.then do |pages| page = pages.first User.new(user, Page.new(page)) end end end Cassandra::Future.all(futures).get
  • 33. © 2015 DataStax, All Rights Reserved. Pop Quiz: How to make this faster? 27 user_future = session.prepare_async(‘SELECT * FROM users WHERE id = ?') page_future = session.prepare_async(‘SELECT * FROM pages WHERE slug = ?’) user_ids = [1, 2, 3, 4] futures = user_ids.map do |id| future = session.execute_async(user_future.get, arguments: [id]) future.then do |users| user = users.first future = session.execute_async(page_future.get, arguments: [user['username']]) future.then do |pages| page = pages.first User.new(user, Page.new(page)) end end end Cassandra::Future.all(futures).get
  • 34. Load Balancing Principles and Implementations
  • 35. © 2015 DataStax, All Rights Reserved. Application Driver Load Balancing 29 Application Thread Node Pool Session Pool Pool Pool Application Thread Application Thread Client Cluster Node Node Node Load Balancing Policy
  • 36. © 2015 DataStax, All Rights Reserved. Application Driver Load Balancing 29 Application Thread Node Pool Session Pool Pool Pool Application Thread Application Thread Client Cluster Node Node Node Load Balancing Policy
  • 37. © 2015 DataStax, All Rights Reserved. Application Driver Load Balancing 29 Application Thread Node Pool Session Pool Pool Pool Application Thread Application Thread Client Cluster Node Node Node Load Balancing Policy
  • 38. © 2015 DataStax, All Rights Reserved. Datacenter Datacenter DataCenter Aware Balancing 30 Node Node NodeClient Node Node Node Client Client Client Client Client Local nodes are queried first, if none are available, the request could be sent to a remote node.
  • 39. © 2015 DataStax, All Rights Reserved. Token Aware Balancing 31 Route request directly to Replicas Node Node Replica Node Client Replica Replica Uses prepared statement metadata to get the token
  • 40. © 2015 DataStax, All Rights Reserved. Other built-in policies • Round Robin Policy • ignores topology • White List Policy • only connect with certain hosts 32
  • 41. Fault Tolerance Sources of Failure and Error Handling
  • 42. © 2015 DataStax, All Rights Reserved. Fault Tolerance 34 Coordinator Node Replica Replica Replica Node Business Logic Driver Application
  • 43. © 2015 DataStax, All Rights Reserved. 35 Coordinator Node Replica Replica Replica Node Business Logic Driver Application Invalid Requests Network Timeouts Server Errors Possible Failures
  • 44. © 2015 DataStax, All Rights Reserved. Application Driver Automatic Retry of Server Errors 36 Application Thread Node Pool Session Pool Pool Pool Application Thread Application Thread Client Cluster Node Node Node Load Balancing Policy
  • 45. © 2015 DataStax, All Rights Reserved. Application Driver Automatic Retry of Server Errors 36 Application Thread Node Pool Session Pool Pool Pool Application Thread Application Thread Client Cluster Node Node Node Load Balancing Policy
  • 46. © 2015 DataStax, All Rights Reserved. Application Driver Automatic Retry of Server Errors 36 Application Thread Node Pool Session Pool Pool Pool Application Thread Application Thread Client Cluster Node Node Node Load Balancing Policy
  • 47. © 2015 DataStax, All Rights Reserved. 37 Coordinator Node Replica Replica Replica Node Business Logic Driver Application Unreachable Consistency
  • 48. © 2015 DataStax, All Rights Reserved. Coordinator Node Replica Replica Node 38 Replica Business Logic Driver Application Read / Write Timeout Error
  • 49. © 2015 DataStax, All Rights Reserved. Coordinator Node Replica Replica Node 38 Replica Business Logic Driver Application Read / Write Timeout Error
  • 50. © 2015 DataStax, All Rights Reserved. Coordinator Node Replica Replica Node 38 Replica Business Logic Driver Application Read / Write Timeout Error read / write timeout
  • 51. © 2015 DataStax, All Rights Reserved. 39 Coordinator Node Replica Replica Replica Node Business Logic Driver Application Unavailable Error
  • 52. © 2015 DataStax, All Rights Reserved. 39 Coordinator Node Replica Replica Replica Node Business Logic Driver Application Unavailable Error unavailable
  • 53. © 2015 DataStax, All Rights Reserved. 40 Error Handling
  • 55. © 2015 DataStax, All Rights Reserved. Datacenter Datacenter Multiple Addresses 42 Node NodeNode Node Client Client Node NodeNode Node Client Client Within Datacenter:
 Private IPs Across Datacenters:
 Public IPs
  • 56. © 2015 DataStax, All Rights Reserved. Application Driver Address Resolution 43 Application Thread Application Thread Application Thread Client Cluster
  • 57. © 2015 DataStax, All Rights Reserved. Application Driver Address Resolution 43 Application Thread Node Cluster Application Thread Application Thread Client Cluster Address Resolution Policy
  • 58. © 2015 DataStax, All Rights Reserved. Application Driver Address Resolution 43 Application Thread Node Cluster Application Thread Application Thread Client Cluster Node Node Node Address Resolution Policy Control Connection
  • 59. © 2015 DataStax, All Rights Reserved. Application Driver Address Resolution 43 Application Thread Node Cluster Application Thread Application Thread Client Cluster Node Node Node Address Resolution Policy Control Connection
  • 60. © 2015 DataStax, All Rights Reserved. Application Driver Address Resolution 43 Application Thread Node Pool Cluster Pool Pool Pool Application Thread Application Thread Client Cluster Node Node Node Address Resolution Policy Control Connection Session
  • 61. © 2015 DataStax, All Rights Reserved. EC2 Multi-Region Address Resolution 44
  • 62. © 2015 DataStax, All Rights Reserved. More • Request Tracing • Execution Information • which node was used, # retries for query, etc. • State Listeners • node goes down/comes up, schema changes, etc. • Result Paging • SSL and Authentication 45