SlideShare a Scribd company logo
reimagining the business of
apps
#Cassandra13	
  	
  
©2013 NativeX Holdings, LLC
The Perils and Triumphs of using
Cassandra at a .NET/Microsoft Shop
#Cassandra13	
  	
  
About the Presenters
Jeff Smoley – Infrastructure Architect
Derek Bromenshenkel – Infrastructure Architect
#Cassandra13	
  	
  
Agenda
•  About NativeX
•  Why Cassandra?
•  Challenges
•  Auto Id Generation
•  FluentCassandra
•  Hector
•  IKVM.NET
•  HectorNet
•  Reporting Integration
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
About NativeX
•  Formerly W3i
•  Home Office in Sartell, MN
•  75 miles NW of Minneapolis
•  Remote Offices in MSP and SF
•  150 Employees
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
What NativeX Does
•  Marketing technology
platform that enables
developers to build
successful business around
their apps.
•  We provide Publishers with
a way to monetize and
Advertisers with a way to
gain distribution.
#Cassandra13	
  	
  
Mobile Vanity Metrics
•  Over 700M unique devices
•  1000s of Apps
•  > 100M Monthly Active Users
•  > 200GB of data ingest per week
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
Backstory
•  From 100M session/quarter
to 5B.
•  Anticipate 7B sessions in
Q2.
•  Growth was anticipated.
•  Realized infrastructure
needed to change to support
this. 0	
  
1	
  
2	
  
3	
  
4	
  
5	
  
6	
  
2011	
  Q4	
   2012	
  Q1	
   2012	
  Q2	
   2012	
  Q3	
   2012	
  Q4	
   2013	
  Q1	
  
Billions	
  
API	
  Requests	
  
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
Original OLTP Architecture
•  Microsoft SQL Server
•  2 Node Cluster (Failover)
•  12 cores / node
•  192 GB mem / node
•  Compellent SAN
•  172 Tiered Disk
•  SSD, FC, SATA
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
Objectives
Scale	
  
• Horizontal	
  
• Incremental	
  cost	
  
structure	
  
Resiliency	
  
• No	
  single	
  point	
  
of	
  failure	
  
• Geographically	
  
distributed	
  
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
What is NoSQL
•  Stands for Not Only SQL.
•  The NoSQL movement is about understanding problems and
focusing on solutions.
•  It’s not about silver bullets and black boxes.
•  It is about using the right tool for the right problem.
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
Researched Products
•  Compared features like:
•  Distributed / Shared Nothing
•  Multi-Cluster Support
•  Maturity & Popularity
•  Documentation
•  .NET Support
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
Why Cassandra?
•  Multi-node
•  Multi-cluster
•  Highly Available
•  Durable
•  Shared Nothing
•  Tunable Consistency
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
Cassandra at NativeX
•  C* was not a replacement DB system.
•  We continue to use MS SQL Server alongside C*.
•  SQL Server used for storing configuration data.
•  C* solves a very specific problem for us.
•  Writing large volumes of data quickly.
•  Reading very specific data out of a large record set.
#Cassandra13	
  	
  
Challenges
•  C* does not have Auto Id generation.
•  How to connect to C* with C#?
•  Finding a connector with good Failure Tolerance.
•  How to integrate our reporting system?
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
Auto ID Generation
•  Pre-existing requirements
•  Unique, 64-bit positive integers
•  Increasing (sortable) a plus
•  Previously SQL Server Identity column
•  A Time-based UUID is sortable and unique
•  Changed everything we could
•  The future for us
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
Auto ID – What are the options?
•  SQL dummy table
•  Easy & familiar, but limited
•  Pre-generated range
•  Proposed by @mdennis
•  Distributed, but more complicated to implement
•  Sharding [Instagram]
•  Discovered too late
•  Unfamiliar with Postgres
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
We chose Snowflake
•  Built by Twitter, Apache 2.0 license
•  https://github.com/twitter/snowflake
•  “… network service for generating unique ID numbers at high
scale..”
•  Same motivation; MySQL -> C*
•  A few tweaks for our Windows environment
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
Technical reasons for Snowflake
•  Meets all requirements
•  Tested in high transaction system
•  Java based [Scala] implementation
•  Thrift server
•  Run as a Windows service with Apache Daemon
•  Con: Requires Apache Zookeeper
•  Coordinate the worker id
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
Connecting to Snowflake
•  Built our own .NET
Snowflake Client
•  Snowflake server on each
web node
•  Local instance is primary
•  Round robin failover to other
nodes
•  Auto failover AND recovery
•  “Circuit Breaker” pattern
Web	
  
App	
  
SF	
  
Server	
  1	
  
Web	
  
App	
  
SF	
  
Server	
  3	
  
Web	
  
App	
  
SF	
  
Server	
  2	
  
Web	
  
App	
  
SF	
  
Server	
  4	
  
#Cassandra13	
  	
  
Challenges
•  C* does not have Auto Id generation.
•  How to connect to C* with C#?
•  Finding a connector with good Failure Tolerance.
•  How to integrate our reporting system?
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
Connecting to Cassandra with C#
•  Thrift alone too low level
•  Needs
•  CQL support
•  Active development / support
•  Wants
•  ADO.NET / LINQ feel
•  ????
•  FluentCassandra is where we started
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
Vetting FluentCassandra
•  Pros
•  Open source -
https://github.com/fluentcassandra/fluentcassandra
•  Nick Berardi, project owner, is excellent
•  Designed for CQL
•  Familiar feel
•  Were able to start project development with it
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
Vetting FluentCassandra
•  Cons
•  Immaturity
•  Few users with high transaction system
•  Permanent node blacklisting
•  Lacked auto retry
•  Couldn’t live with these limitations
•  Tried hiring independent contractor to help us mature it
#Cassandra13	
  	
  
Challenges
•  C* does not have Auto Id generation.
•  How to connect to C* with C#?
•  Finding a connector with good Failure Tolerance.
•  How to integrate our reporting system?
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
Hector: Yes, please
•  Popular C* connector
•  Use cases matching ours
•  Good maturity
•  Auto node discovery
•  Auto retry
•  Auto failure recovery
•  Written in Java – major roadblock
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
Help!
•  We knew we still needed help.
•  We found a company named Concord.
•  Based out of the Twin Cites.
•  Specialize in System, Process, and Data Integration.
•  http://concordusa.com/
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
Concord’s Recommendation
•  Concord recommended that we use IKVM.NET to port Hector to
a .NET assembly.
•  They had previous success using IKVM for other Java to .NET
ports.
•  They felt that maturing FluentCassandra was going to take
longer than our timeline allowed.
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
About the IKVM.NET Project
•  http://www.ikvm.net/
•  Open Source Project.
•  Main contributor is Jeroen Frijters.
•  He is actively contributing to the project.
•  License allows for use in commercial applications.
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
What is IKVM.NET?
•  IKVM.NET includes the following components:
•  A Java Virtual Machine implemented in .NET.
•  A .NET implementation of the Java class libraries.
•  Set of tools that enable Java and .NET interoperability.
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
Uses for IKVM
•  Drop-in JVM
•  Included is a distribution of a .NET implementation of a Java
Virtual Machine.
•  Allows you to run jar files using the .NET stack.
•  Example: ikvm -jar myapp.jar
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
Uses for IKVM
•  Use Java libraries in your .NET applications
•  Using ikvmc you can compile Java bytecode to .NET IL.
•  Example: ikvmc -target:library mylib.jar
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
Uses for IKVM
•  Develop .NET applications in Java
•  Write code in Java.
•  Compile to JVM bytecode.
•  Use ikvmc to produce a .NET Executable.
•  Can also use .NET API’s in Java code using the ikvmstub
application to generate a Java jar file.
•  Example: ikvmstub MyDotNetAssemblyName
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
Hector Converted to .NET
•  Per Concord’s recommendation we chose to compile the Hector
jar into a .NET Assembly.
•  Hector and all of it’s dependencies are pulled into one .NET
dll that can be referenced by any .NET assembly.
•  In addition you will have to reference some core IKVM
assemblies.
•  Each Java dependency is given it’s own namespace with in
the .NET dll.
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
HectorNet
•  Concord also created a dll called HectorNet that wraps some of
the Hector behaviors and makes it feel more like .NET.
•  Such as supporting connection strings.
•  Mapping Thrift byte arrays to .NET data types.
•  Mapping to native .NET collections instead of using Java
collections.
#Cassandra13	
  	
  
Challenges
•  C* does not have Auto Id generation.
•  How to connect to C* with C#?
•  Finding a connector with good Failure Tolerance.
•  How to integrate our reporting system?
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
Integrating Reporting
OLTP	
  
C*	
  
Extract	
   Transform	
  
CUBE	
  
SSAS	
  
OLAP	
  
MS	
  SQL	
  
Load	
  
ETL	
  -­‐	
  SSIS	
  
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
Integrating Reporting
•  The SSIS Extract process uses C# Script Tasks.
•  Script Task needs references to HectorNet and all of its
dependencies.
•  SSIS can only reference assemblies that are in the GAC.
•  Assemblies in the GAC have to be Signed.
#Cassandra13	
  	
  
Why Not DataStax C# Driver?
•  We built everything using CQL 2.0.
•  Wasn’t ready in time for our launch date.
#Cassandra13	
  	
  
DSE for the Win!
•  We use DataStax Enterprise.
•  Mainly for support, which continues to be a life saver.
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
Thank you!
•  We are hiring
•  http://nativex.com/careers/
•  Join the MSP C* Meetup
•  http://www.meetup.com/Minneapolis-St-Paul-Cassandra-Meetup/
•  Contact us
•  Jeff.Smoley@nativex.com
•  Derek.Bromenshenkel@nativex.com @breakingtrail
•  Slide Deck
•  http://www.slideshare.net/jjsmoley/the-perils-and-triumphs-of-using-
cassandra-at-a-netmicrosoft-shop

More Related Content

What's hot

Melbourne Chef Meetup: Automating Azure Compliance with InSpec
Melbourne Chef Meetup: Automating Azure Compliance with InSpecMelbourne Chef Meetup: Automating Azure Compliance with InSpec
Melbourne Chef Meetup: Automating Azure Compliance with InSpec
Matt Ray
 
Cassandra and security
Cassandra and securityCassandra and security
Cassandra and security
Ben Bromhead
 
Microsoft az-104 Dumps
Microsoft az-104 DumpsMicrosoft az-104 Dumps
Microsoft az-104 Dumps
Armstrongsmith
 
Overview of HDFS Transparent Encryption
Overview of HDFS Transparent Encryption Overview of HDFS Transparent Encryption
Overview of HDFS Transparent Encryption
Cloudera, Inc.
 
Surviving the Azure Avalanche
Surviving the Azure AvalancheSurviving the Azure Avalanche
Surviving the Azure Avalanche
Michele Leroux Bustamante
 
Refactoring Into Microservices. Chicago Coders Conference 2017-06-26
Refactoring Into Microservices. Chicago Coders Conference 2017-06-26Refactoring Into Microservices. Chicago Coders Conference 2017-06-26
Refactoring Into Microservices. Chicago Coders Conference 2017-06-26
Derek Ashmore
 
Docker - The Big Picture
Docker  - The Big PictureDocker  - The Big Picture
Docker - The Big Picture
NETKO Solution
 
Protect your private data with ORC column encryption
Protect your private data with ORC column encryptionProtect your private data with ORC column encryption
Protect your private data with ORC column encryption
Owen O'Malley
 
Securing kafka with 500 billion messages a day
Securing kafka with 500 billion messages a daySecuring kafka with 500 billion messages a day
Securing kafka with 500 billion messages a day
Yanlin (Thomas) Zhou
 
Az 104 session 8 azure monitoring
Az 104 session 8 azure monitoringAz 104 session 8 azure monitoring
Az 104 session 8 azure monitoring
AzureEzy1
 
Database-as-a-Service with Oracle Enterprise Manager Cloud Control 12c and Or...
Database-as-a-Service with Oracle Enterprise Manager Cloud Control 12c and Or...Database-as-a-Service with Oracle Enterprise Manager Cloud Control 12c and Or...
Database-as-a-Service with Oracle Enterprise Manager Cloud Control 12c and Or...
Leighton Nelson
 
Securing Hadoop's REST APIs with Apache Knox Gateway Hadoop Summit June 6th, ...
Securing Hadoop's REST APIs with Apache Knox Gateway Hadoop Summit June 6th, ...Securing Hadoop's REST APIs with Apache Knox Gateway Hadoop Summit June 6th, ...
Securing Hadoop's REST APIs with Apache Knox Gateway Hadoop Summit June 6th, ...
Kevin Minder
 
Integrating Okta with Anypoint Platform for a mobile security use case
Integrating Okta with Anypoint Platform for a mobile security use caseIntegrating Okta with Anypoint Platform for a mobile security use case
Integrating Okta with Anypoint Platform for a mobile security use case
Bahman Kalali
 
Turbocharging php applications with zend server
Turbocharging php applications with zend serverTurbocharging php applications with zend server
Turbocharging php applications with zend server
Eric Ritchie
 
Transparent Encryption in HDFS
Transparent Encryption in HDFSTransparent Encryption in HDFS
Transparent Encryption in HDFS
DataWorks Summit
 
Hdp security overview
Hdp security overview Hdp security overview
Hdp security overview
Hortonworks
 
Az 104 session 4: azure storage
Az 104 session 4: azure storageAz 104 session 4: azure storage
Az 104 session 4: azure storage
AzureEzy1
 
An Approach for Multi-Tenancy Through Apache Knox
An Approach for Multi-Tenancy Through Apache KnoxAn Approach for Multi-Tenancy Through Apache Knox
An Approach for Multi-Tenancy Through Apache Knox
DataWorks Summit/Hadoop Summit
 
Net core vs. node.js what to choose when
Net core vs. node.js  what to choose when Net core vs. node.js  what to choose when
Net core vs. node.js what to choose when
Katy Slemon
 
Hadoop security
Hadoop securityHadoop security
Hadoop security
Shivaji Dutta
 

What's hot (20)

Melbourne Chef Meetup: Automating Azure Compliance with InSpec
Melbourne Chef Meetup: Automating Azure Compliance with InSpecMelbourne Chef Meetup: Automating Azure Compliance with InSpec
Melbourne Chef Meetup: Automating Azure Compliance with InSpec
 
Cassandra and security
Cassandra and securityCassandra and security
Cassandra and security
 
Microsoft az-104 Dumps
Microsoft az-104 DumpsMicrosoft az-104 Dumps
Microsoft az-104 Dumps
 
Overview of HDFS Transparent Encryption
Overview of HDFS Transparent Encryption Overview of HDFS Transparent Encryption
Overview of HDFS Transparent Encryption
 
Surviving the Azure Avalanche
Surviving the Azure AvalancheSurviving the Azure Avalanche
Surviving the Azure Avalanche
 
Refactoring Into Microservices. Chicago Coders Conference 2017-06-26
Refactoring Into Microservices. Chicago Coders Conference 2017-06-26Refactoring Into Microservices. Chicago Coders Conference 2017-06-26
Refactoring Into Microservices. Chicago Coders Conference 2017-06-26
 
Docker - The Big Picture
Docker  - The Big PictureDocker  - The Big Picture
Docker - The Big Picture
 
Protect your private data with ORC column encryption
Protect your private data with ORC column encryptionProtect your private data with ORC column encryption
Protect your private data with ORC column encryption
 
Securing kafka with 500 billion messages a day
Securing kafka with 500 billion messages a daySecuring kafka with 500 billion messages a day
Securing kafka with 500 billion messages a day
 
Az 104 session 8 azure monitoring
Az 104 session 8 azure monitoringAz 104 session 8 azure monitoring
Az 104 session 8 azure monitoring
 
Database-as-a-Service with Oracle Enterprise Manager Cloud Control 12c and Or...
Database-as-a-Service with Oracle Enterprise Manager Cloud Control 12c and Or...Database-as-a-Service with Oracle Enterprise Manager Cloud Control 12c and Or...
Database-as-a-Service with Oracle Enterprise Manager Cloud Control 12c and Or...
 
Securing Hadoop's REST APIs with Apache Knox Gateway Hadoop Summit June 6th, ...
Securing Hadoop's REST APIs with Apache Knox Gateway Hadoop Summit June 6th, ...Securing Hadoop's REST APIs with Apache Knox Gateway Hadoop Summit June 6th, ...
Securing Hadoop's REST APIs with Apache Knox Gateway Hadoop Summit June 6th, ...
 
Integrating Okta with Anypoint Platform for a mobile security use case
Integrating Okta with Anypoint Platform for a mobile security use caseIntegrating Okta with Anypoint Platform for a mobile security use case
Integrating Okta with Anypoint Platform for a mobile security use case
 
Turbocharging php applications with zend server
Turbocharging php applications with zend serverTurbocharging php applications with zend server
Turbocharging php applications with zend server
 
Transparent Encryption in HDFS
Transparent Encryption in HDFSTransparent Encryption in HDFS
Transparent Encryption in HDFS
 
Hdp security overview
Hdp security overview Hdp security overview
Hdp security overview
 
Az 104 session 4: azure storage
Az 104 session 4: azure storageAz 104 session 4: azure storage
Az 104 session 4: azure storage
 
An Approach for Multi-Tenancy Through Apache Knox
An Approach for Multi-Tenancy Through Apache KnoxAn Approach for Multi-Tenancy Through Apache Knox
An Approach for Multi-Tenancy Through Apache Knox
 
Net core vs. node.js what to choose when
Net core vs. node.js  what to choose when Net core vs. node.js  what to choose when
Net core vs. node.js what to choose when
 
Hadoop security
Hadoop securityHadoop security
Hadoop security
 

Similar to C* Summit 2013: The Perils and Triumphs of using Cassandra at a .NET/Microsoft Shop by Derek Bromenshenkel and Jeff Smoley

Rami Sayar - Node microservices with Docker
Rami Sayar - Node microservices with DockerRami Sayar - Node microservices with Docker
Rami Sayar - Node microservices with Docker
Web à Québec
 
Docker for the enterprise
Docker for the enterpriseDocker for the enterprise
Docker for the enterprise
Bert Poller
 
Apache Cassandra in the Cloud
Apache Cassandra in the CloudApache Cassandra in the Cloud
Apache Cassandra in the Cloud
Instaclustr
 
Docker Birthday #3 Slides - Overview
Docker Birthday #3 Slides - OverviewDocker Birthday #3 Slides - Overview
Docker Birthday #3 Slides - OverviewChris Ciborowski
 
Docker Birthday #3 - Intro to Docker Slides
Docker Birthday #3 - Intro to Docker SlidesDocker Birthday #3 - Intro to Docker Slides
Docker Birthday #3 - Intro to Docker Slides
Docker, Inc.
 
Stay productive_while_slicing_up_the_monolith
Stay productive_while_slicing_up_the_monolithStay productive_while_slicing_up_the_monolith
Stay productive_while_slicing_up_the_monolith
Markus Eisele
 
Edge 2016 Session 1886 Building your own docker container cloud on ibm power...
Edge 2016 Session 1886  Building your own docker container cloud on ibm power...Edge 2016 Session 1886  Building your own docker container cloud on ibm power...
Edge 2016 Session 1886 Building your own docker container cloud on ibm power...
Yong Feng
 
Mongo DB at Community Engine
Mongo DB at Community EngineMongo DB at Community Engine
Mongo DB at Community Engine
Community Engine
 
MongoDB at community engine
MongoDB at community engineMongoDB at community engine
MongoDB at community engine
mathraq
 
Migrating a build farm from on-prem to AWS
Migrating a build farm from on-prem to AWSMigrating a build farm from on-prem to AWS
Migrating a build farm from on-prem to AWS
Claes Buckwalter
 
Cloud-native Data: Every Microservice Needs a Cache
Cloud-native Data: Every Microservice Needs a CacheCloud-native Data: Every Microservice Needs a Cache
Cloud-native Data: Every Microservice Needs a Cache
cornelia davis
 
Containers, microservices and serverless for realists
Containers, microservices and serverless for realistsContainers, microservices and serverless for realists
Containers, microservices and serverless for realists
Karthik Gaekwad
 
MongoDB World 2019: Why NBCUniversal Migrated to MongoDB Atlas
MongoDB World 2019: Why NBCUniversal Migrated to MongoDB AtlasMongoDB World 2019: Why NBCUniversal Migrated to MongoDB Atlas
MongoDB World 2019: Why NBCUniversal Migrated to MongoDB Atlas
MongoDB
 
Basics of Java Cloud
Basics of Java CloudBasics of Java Cloud
Basics of Java Cloud
Ankur Gupta
 
Virtualization Vs. Containers
Virtualization Vs. ContainersVirtualization Vs. Containers
Virtualization Vs. Containers
actualtechmedia
 
Microservices Development - ICP Workshop Batch II
Microservices Development - ICP Workshop Batch IIMicroservices Development - ICP Workshop Batch II
Microservices Development - ICP Workshop Batch II
PT Datacomm Diangraha
 
Enterprise Java on Azure: From Java EE to Spring, we have you covered
Enterprise Java on Azure: From Java EE to Spring, we have you coveredEnterprise Java on Azure: From Java EE to Spring, we have you covered
Enterprise Java on Azure: From Java EE to Spring, we have you covered
Ed Burns
 
Docker & aPaaS: Enterprise Innovation and Trends for 2015
Docker & aPaaS: Enterprise Innovation and Trends for 2015Docker & aPaaS: Enterprise Innovation and Trends for 2015
Docker & aPaaS: Enterprise Innovation and Trends for 2015
WaveMaker, Inc.
 
Why kubernetes matters
Why kubernetes mattersWhy kubernetes matters
Why kubernetes matters
Platform9
 
C* Summit 2013 - Hindsight is 20/20. MySQL to Cassandra by Michael Kjellman
C* Summit 2013 - Hindsight is 20/20. MySQL to Cassandra by Michael KjellmanC* Summit 2013 - Hindsight is 20/20. MySQL to Cassandra by Michael Kjellman
C* Summit 2013 - Hindsight is 20/20. MySQL to Cassandra by Michael Kjellman
DataStax Academy
 

Similar to C* Summit 2013: The Perils and Triumphs of using Cassandra at a .NET/Microsoft Shop by Derek Bromenshenkel and Jeff Smoley (20)

Rami Sayar - Node microservices with Docker
Rami Sayar - Node microservices with DockerRami Sayar - Node microservices with Docker
Rami Sayar - Node microservices with Docker
 
Docker for the enterprise
Docker for the enterpriseDocker for the enterprise
Docker for the enterprise
 
Apache Cassandra in the Cloud
Apache Cassandra in the CloudApache Cassandra in the Cloud
Apache Cassandra in the Cloud
 
Docker Birthday #3 Slides - Overview
Docker Birthday #3 Slides - OverviewDocker Birthday #3 Slides - Overview
Docker Birthday #3 Slides - Overview
 
Docker Birthday #3 - Intro to Docker Slides
Docker Birthday #3 - Intro to Docker SlidesDocker Birthday #3 - Intro to Docker Slides
Docker Birthday #3 - Intro to Docker Slides
 
Stay productive_while_slicing_up_the_monolith
Stay productive_while_slicing_up_the_monolithStay productive_while_slicing_up_the_monolith
Stay productive_while_slicing_up_the_monolith
 
Edge 2016 Session 1886 Building your own docker container cloud on ibm power...
Edge 2016 Session 1886  Building your own docker container cloud on ibm power...Edge 2016 Session 1886  Building your own docker container cloud on ibm power...
Edge 2016 Session 1886 Building your own docker container cloud on ibm power...
 
Mongo DB at Community Engine
Mongo DB at Community EngineMongo DB at Community Engine
Mongo DB at Community Engine
 
MongoDB at community engine
MongoDB at community engineMongoDB at community engine
MongoDB at community engine
 
Migrating a build farm from on-prem to AWS
Migrating a build farm from on-prem to AWSMigrating a build farm from on-prem to AWS
Migrating a build farm from on-prem to AWS
 
Cloud-native Data: Every Microservice Needs a Cache
Cloud-native Data: Every Microservice Needs a CacheCloud-native Data: Every Microservice Needs a Cache
Cloud-native Data: Every Microservice Needs a Cache
 
Containers, microservices and serverless for realists
Containers, microservices and serverless for realistsContainers, microservices and serverless for realists
Containers, microservices and serverless for realists
 
MongoDB World 2019: Why NBCUniversal Migrated to MongoDB Atlas
MongoDB World 2019: Why NBCUniversal Migrated to MongoDB AtlasMongoDB World 2019: Why NBCUniversal Migrated to MongoDB Atlas
MongoDB World 2019: Why NBCUniversal Migrated to MongoDB Atlas
 
Basics of Java Cloud
Basics of Java CloudBasics of Java Cloud
Basics of Java Cloud
 
Virtualization Vs. Containers
Virtualization Vs. ContainersVirtualization Vs. Containers
Virtualization Vs. Containers
 
Microservices Development - ICP Workshop Batch II
Microservices Development - ICP Workshop Batch IIMicroservices Development - ICP Workshop Batch II
Microservices Development - ICP Workshop Batch II
 
Enterprise Java on Azure: From Java EE to Spring, we have you covered
Enterprise Java on Azure: From Java EE to Spring, we have you coveredEnterprise Java on Azure: From Java EE to Spring, we have you covered
Enterprise Java on Azure: From Java EE to Spring, we have you covered
 
Docker & aPaaS: Enterprise Innovation and Trends for 2015
Docker & aPaaS: Enterprise Innovation and Trends for 2015Docker & aPaaS: Enterprise Innovation and Trends for 2015
Docker & aPaaS: Enterprise Innovation and Trends for 2015
 
Why kubernetes matters
Why kubernetes mattersWhy kubernetes matters
Why kubernetes matters
 
C* Summit 2013 - Hindsight is 20/20. MySQL to Cassandra by Michael Kjellman
C* Summit 2013 - Hindsight is 20/20. MySQL to Cassandra by Michael KjellmanC* Summit 2013 - Hindsight is 20/20. MySQL to Cassandra by Michael Kjellman
C* Summit 2013 - Hindsight is 20/20. MySQL to Cassandra by Michael Kjellman
 

More from DataStax Academy

Forrester CXNYC 2017 - Delivering great real-time cx is a true craft
Forrester CXNYC 2017 - Delivering great real-time cx is a true craftForrester CXNYC 2017 - Delivering great real-time cx is a true craft
Forrester CXNYC 2017 - Delivering great real-time cx is a true craft
DataStax Academy
 
Introduction to DataStax Enterprise Graph Database
Introduction to DataStax Enterprise Graph DatabaseIntroduction to DataStax Enterprise Graph Database
Introduction to DataStax Enterprise Graph Database
DataStax Academy
 
Introduction to DataStax Enterprise Advanced Replication with Apache Cassandra
Introduction to DataStax Enterprise Advanced Replication with Apache CassandraIntroduction to DataStax Enterprise Advanced Replication with Apache Cassandra
Introduction to DataStax Enterprise Advanced Replication with Apache Cassandra
DataStax Academy
 
Cassandra on Docker @ Walmart Labs
Cassandra on Docker @ Walmart LabsCassandra on Docker @ Walmart Labs
Cassandra on Docker @ Walmart Labs
DataStax Academy
 
Cassandra 3.0 Data Modeling
Cassandra 3.0 Data ModelingCassandra 3.0 Data Modeling
Cassandra 3.0 Data Modeling
DataStax Academy
 
Cassandra Adoption on Cisco UCS & Open stack
Cassandra Adoption on Cisco UCS & Open stackCassandra Adoption on Cisco UCS & Open stack
Cassandra Adoption on Cisco UCS & Open stack
DataStax Academy
 
Data Modeling for Apache Cassandra
Data Modeling for Apache CassandraData Modeling for Apache Cassandra
Data Modeling for Apache Cassandra
DataStax Academy
 
Coursera Cassandra Driver
Coursera Cassandra DriverCoursera Cassandra Driver
Coursera Cassandra Driver
DataStax Academy
 
Production Ready Cassandra
Production Ready CassandraProduction Ready Cassandra
Production Ready Cassandra
DataStax Academy
 
Cassandra @ Netflix: Monitoring C* at Scale, Gossip and Tickler & Python
Cassandra @ Netflix: Monitoring C* at Scale, Gossip and Tickler & PythonCassandra @ Netflix: Monitoring C* at Scale, Gossip and Tickler & Python
Cassandra @ Netflix: Monitoring C* at Scale, Gossip and Tickler & Python
DataStax Academy
 
Cassandra @ Sony: The good, the bad, and the ugly part 1
Cassandra @ Sony: The good, the bad, and the ugly part 1Cassandra @ Sony: The good, the bad, and the ugly part 1
Cassandra @ Sony: The good, the bad, and the ugly part 1
DataStax Academy
 
Cassandra @ Sony: The good, the bad, and the ugly part 2
Cassandra @ Sony: The good, the bad, and the ugly part 2Cassandra @ Sony: The good, the bad, and the ugly part 2
Cassandra @ Sony: The good, the bad, and the ugly part 2
DataStax Academy
 
Standing Up Your First Cluster
Standing Up Your First ClusterStanding Up Your First Cluster
Standing Up Your First Cluster
DataStax Academy
 
Real Time Analytics with Dse
Real Time Analytics with DseReal Time Analytics with Dse
Real Time Analytics with Dse
DataStax Academy
 
Introduction to Data Modeling with Apache Cassandra
Introduction to Data Modeling with Apache CassandraIntroduction to Data Modeling with Apache Cassandra
Introduction to Data Modeling with Apache Cassandra
DataStax Academy
 
Cassandra Core Concepts
Cassandra Core ConceptsCassandra Core Concepts
Cassandra Core Concepts
DataStax Academy
 
Enabling Search in your Cassandra Application with DataStax Enterprise
Enabling Search in your Cassandra Application with DataStax EnterpriseEnabling Search in your Cassandra Application with DataStax Enterprise
Enabling Search in your Cassandra Application with DataStax Enterprise
DataStax Academy
 
Bad Habits Die Hard
Bad Habits Die Hard Bad Habits Die Hard
Bad Habits Die Hard
DataStax Academy
 
Advanced Data Modeling with Apache Cassandra
Advanced Data Modeling with Apache CassandraAdvanced Data Modeling with Apache Cassandra
Advanced Data Modeling with Apache Cassandra
DataStax Academy
 

More from DataStax Academy (20)

Forrester CXNYC 2017 - Delivering great real-time cx is a true craft
Forrester CXNYC 2017 - Delivering great real-time cx is a true craftForrester CXNYC 2017 - Delivering great real-time cx is a true craft
Forrester CXNYC 2017 - Delivering great real-time cx is a true craft
 
Introduction to DataStax Enterprise Graph Database
Introduction to DataStax Enterprise Graph DatabaseIntroduction to DataStax Enterprise Graph Database
Introduction to DataStax Enterprise Graph Database
 
Introduction to DataStax Enterprise Advanced Replication with Apache Cassandra
Introduction to DataStax Enterprise Advanced Replication with Apache CassandraIntroduction to DataStax Enterprise Advanced Replication with Apache Cassandra
Introduction to DataStax Enterprise Advanced Replication with Apache Cassandra
 
Cassandra on Docker @ Walmart Labs
Cassandra on Docker @ Walmart LabsCassandra on Docker @ Walmart Labs
Cassandra on Docker @ Walmart Labs
 
Cassandra 3.0 Data Modeling
Cassandra 3.0 Data ModelingCassandra 3.0 Data Modeling
Cassandra 3.0 Data Modeling
 
Cassandra Adoption on Cisco UCS & Open stack
Cassandra Adoption on Cisco UCS & Open stackCassandra Adoption on Cisco UCS & Open stack
Cassandra Adoption on Cisco UCS & Open stack
 
Data Modeling for Apache Cassandra
Data Modeling for Apache CassandraData Modeling for Apache Cassandra
Data Modeling for Apache Cassandra
 
Coursera Cassandra Driver
Coursera Cassandra DriverCoursera Cassandra Driver
Coursera Cassandra Driver
 
Production Ready Cassandra
Production Ready CassandraProduction Ready Cassandra
Production Ready Cassandra
 
Cassandra @ Netflix: Monitoring C* at Scale, Gossip and Tickler & Python
Cassandra @ Netflix: Monitoring C* at Scale, Gossip and Tickler & PythonCassandra @ Netflix: Monitoring C* at Scale, Gossip and Tickler & Python
Cassandra @ Netflix: Monitoring C* at Scale, Gossip and Tickler & Python
 
Cassandra @ Sony: The good, the bad, and the ugly part 1
Cassandra @ Sony: The good, the bad, and the ugly part 1Cassandra @ Sony: The good, the bad, and the ugly part 1
Cassandra @ Sony: The good, the bad, and the ugly part 1
 
Cassandra @ Sony: The good, the bad, and the ugly part 2
Cassandra @ Sony: The good, the bad, and the ugly part 2Cassandra @ Sony: The good, the bad, and the ugly part 2
Cassandra @ Sony: The good, the bad, and the ugly part 2
 
Standing Up Your First Cluster
Standing Up Your First ClusterStanding Up Your First Cluster
Standing Up Your First Cluster
 
Real Time Analytics with Dse
Real Time Analytics with DseReal Time Analytics with Dse
Real Time Analytics with Dse
 
Introduction to Data Modeling with Apache Cassandra
Introduction to Data Modeling with Apache CassandraIntroduction to Data Modeling with Apache Cassandra
Introduction to Data Modeling with Apache Cassandra
 
Cassandra Core Concepts
Cassandra Core ConceptsCassandra Core Concepts
Cassandra Core Concepts
 
Enabling Search in your Cassandra Application with DataStax Enterprise
Enabling Search in your Cassandra Application with DataStax EnterpriseEnabling Search in your Cassandra Application with DataStax Enterprise
Enabling Search in your Cassandra Application with DataStax Enterprise
 
Bad Habits Die Hard
Bad Habits Die Hard Bad Habits Die Hard
Bad Habits Die Hard
 
Advanced Data Modeling with Apache Cassandra
Advanced Data Modeling with Apache CassandraAdvanced Data Modeling with Apache Cassandra
Advanced Data Modeling with Apache Cassandra
 
Advanced Cassandra
Advanced CassandraAdvanced Cassandra
Advanced Cassandra
 

Recently uploaded

GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
Neo4j
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
DianaGray10
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
Kari Kakkonen
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance
 
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdfSAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
Peter Spielvogel
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance
 
By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024
Pierluigi Pugliese
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
Ralf Eggert
 
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
James Anderson
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
Alan Dix
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
Matthew Sinclair
 
Free Complete Python - A step towards Data Science
Free Complete Python - A step towards Data ScienceFree Complete Python - A step towards Data Science
Free Complete Python - A step towards Data Science
RinaMondal9
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
Laura Byrne
 
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptxSecstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
nkrafacyberclub
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
James Anderson
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
Alpen-Adria-Universität
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
Adtran
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
DianaGray10
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
Jemma Hussein Allen
 

Recently uploaded (20)

GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
 
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdfSAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
 
By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
 
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
 
Free Complete Python - A step towards Data Science
Free Complete Python - A step towards Data ScienceFree Complete Python - A step towards Data Science
Free Complete Python - A step towards Data Science
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
 
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptxSecstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
 

C* Summit 2013: The Perils and Triumphs of using Cassandra at a .NET/Microsoft Shop by Derek Bromenshenkel and Jeff Smoley

  • 1. reimagining the business of apps #Cassandra13     ©2013 NativeX Holdings, LLC The Perils and Triumphs of using Cassandra at a .NET/Microsoft Shop
  • 2. #Cassandra13     About the Presenters Jeff Smoley – Infrastructure Architect Derek Bromenshenkel – Infrastructure Architect
  • 3. #Cassandra13     Agenda •  About NativeX •  Why Cassandra? •  Challenges •  Auto Id Generation •  FluentCassandra •  Hector •  IKVM.NET •  HectorNet •  Reporting Integration
  • 4. ©2013 NativeX Holdings, LLC#Cassandra13     About NativeX •  Formerly W3i •  Home Office in Sartell, MN •  75 miles NW of Minneapolis •  Remote Offices in MSP and SF •  150 Employees
  • 5. ©2013 NativeX Holdings, LLC#Cassandra13     What NativeX Does •  Marketing technology platform that enables developers to build successful business around their apps. •  We provide Publishers with a way to monetize and Advertisers with a way to gain distribution.
  • 6. #Cassandra13     Mobile Vanity Metrics •  Over 700M unique devices •  1000s of Apps •  > 100M Monthly Active Users •  > 200GB of data ingest per week
  • 7. ©2013 NativeX Holdings, LLC#Cassandra13     Backstory •  From 100M session/quarter to 5B. •  Anticipate 7B sessions in Q2. •  Growth was anticipated. •  Realized infrastructure needed to change to support this. 0   1   2   3   4   5   6   2011  Q4   2012  Q1   2012  Q2   2012  Q3   2012  Q4   2013  Q1   Billions   API  Requests  
  • 8. ©2013 NativeX Holdings, LLC#Cassandra13     Original OLTP Architecture •  Microsoft SQL Server •  2 Node Cluster (Failover) •  12 cores / node •  192 GB mem / node •  Compellent SAN •  172 Tiered Disk •  SSD, FC, SATA
  • 9. ©2013 NativeX Holdings, LLC#Cassandra13     Objectives Scale   • Horizontal   • Incremental  cost   structure   Resiliency   • No  single  point   of  failure   • Geographically   distributed  
  • 10. ©2013 NativeX Holdings, LLC#Cassandra13     What is NoSQL •  Stands for Not Only SQL. •  The NoSQL movement is about understanding problems and focusing on solutions. •  It’s not about silver bullets and black boxes. •  It is about using the right tool for the right problem.
  • 11. ©2013 NativeX Holdings, LLC#Cassandra13     Researched Products •  Compared features like: •  Distributed / Shared Nothing •  Multi-Cluster Support •  Maturity & Popularity •  Documentation •  .NET Support
  • 12. ©2013 NativeX Holdings, LLC#Cassandra13     Why Cassandra? •  Multi-node •  Multi-cluster •  Highly Available •  Durable •  Shared Nothing •  Tunable Consistency
  • 13. ©2013 NativeX Holdings, LLC#Cassandra13     Cassandra at NativeX •  C* was not a replacement DB system. •  We continue to use MS SQL Server alongside C*. •  SQL Server used for storing configuration data. •  C* solves a very specific problem for us. •  Writing large volumes of data quickly. •  Reading very specific data out of a large record set.
  • 14. #Cassandra13     Challenges •  C* does not have Auto Id generation. •  How to connect to C* with C#? •  Finding a connector with good Failure Tolerance. •  How to integrate our reporting system?
  • 15. ©2013 NativeX Holdings, LLC#Cassandra13     Auto ID Generation •  Pre-existing requirements •  Unique, 64-bit positive integers •  Increasing (sortable) a plus •  Previously SQL Server Identity column •  A Time-based UUID is sortable and unique •  Changed everything we could •  The future for us
  • 16. ©2013 NativeX Holdings, LLC#Cassandra13     Auto ID – What are the options? •  SQL dummy table •  Easy & familiar, but limited •  Pre-generated range •  Proposed by @mdennis •  Distributed, but more complicated to implement •  Sharding [Instagram] •  Discovered too late •  Unfamiliar with Postgres
  • 17. ©2013 NativeX Holdings, LLC#Cassandra13     We chose Snowflake •  Built by Twitter, Apache 2.0 license •  https://github.com/twitter/snowflake •  “… network service for generating unique ID numbers at high scale..” •  Same motivation; MySQL -> C* •  A few tweaks for our Windows environment
  • 18. ©2013 NativeX Holdings, LLC#Cassandra13     Technical reasons for Snowflake •  Meets all requirements •  Tested in high transaction system •  Java based [Scala] implementation •  Thrift server •  Run as a Windows service with Apache Daemon •  Con: Requires Apache Zookeeper •  Coordinate the worker id
  • 19. ©2013 NativeX Holdings, LLC#Cassandra13     Connecting to Snowflake •  Built our own .NET Snowflake Client •  Snowflake server on each web node •  Local instance is primary •  Round robin failover to other nodes •  Auto failover AND recovery •  “Circuit Breaker” pattern Web   App   SF   Server  1   Web   App   SF   Server  3   Web   App   SF   Server  2   Web   App   SF   Server  4  
  • 20. #Cassandra13     Challenges •  C* does not have Auto Id generation. •  How to connect to C* with C#? •  Finding a connector with good Failure Tolerance. •  How to integrate our reporting system?
  • 21. ©2013 NativeX Holdings, LLC#Cassandra13     Connecting to Cassandra with C# •  Thrift alone too low level •  Needs •  CQL support •  Active development / support •  Wants •  ADO.NET / LINQ feel •  ???? •  FluentCassandra is where we started
  • 22. ©2013 NativeX Holdings, LLC#Cassandra13     Vetting FluentCassandra •  Pros •  Open source - https://github.com/fluentcassandra/fluentcassandra •  Nick Berardi, project owner, is excellent •  Designed for CQL •  Familiar feel •  Were able to start project development with it
  • 23. ©2013 NativeX Holdings, LLC#Cassandra13     Vetting FluentCassandra •  Cons •  Immaturity •  Few users with high transaction system •  Permanent node blacklisting •  Lacked auto retry •  Couldn’t live with these limitations •  Tried hiring independent contractor to help us mature it
  • 24. #Cassandra13     Challenges •  C* does not have Auto Id generation. •  How to connect to C* with C#? •  Finding a connector with good Failure Tolerance. •  How to integrate our reporting system?
  • 25. ©2013 NativeX Holdings, LLC#Cassandra13     Hector: Yes, please •  Popular C* connector •  Use cases matching ours •  Good maturity •  Auto node discovery •  Auto retry •  Auto failure recovery •  Written in Java – major roadblock
  • 26. ©2013 NativeX Holdings, LLC#Cassandra13     Help! •  We knew we still needed help. •  We found a company named Concord. •  Based out of the Twin Cites. •  Specialize in System, Process, and Data Integration. •  http://concordusa.com/
  • 27. ©2013 NativeX Holdings, LLC#Cassandra13     Concord’s Recommendation •  Concord recommended that we use IKVM.NET to port Hector to a .NET assembly. •  They had previous success using IKVM for other Java to .NET ports. •  They felt that maturing FluentCassandra was going to take longer than our timeline allowed.
  • 28. ©2013 NativeX Holdings, LLC#Cassandra13     About the IKVM.NET Project •  http://www.ikvm.net/ •  Open Source Project. •  Main contributor is Jeroen Frijters. •  He is actively contributing to the project. •  License allows for use in commercial applications.
  • 29. ©2013 NativeX Holdings, LLC#Cassandra13     What is IKVM.NET? •  IKVM.NET includes the following components: •  A Java Virtual Machine implemented in .NET. •  A .NET implementation of the Java class libraries. •  Set of tools that enable Java and .NET interoperability.
  • 30. ©2013 NativeX Holdings, LLC#Cassandra13     Uses for IKVM •  Drop-in JVM •  Included is a distribution of a .NET implementation of a Java Virtual Machine. •  Allows you to run jar files using the .NET stack. •  Example: ikvm -jar myapp.jar
  • 31. ©2013 NativeX Holdings, LLC#Cassandra13     Uses for IKVM •  Use Java libraries in your .NET applications •  Using ikvmc you can compile Java bytecode to .NET IL. •  Example: ikvmc -target:library mylib.jar
  • 32. ©2013 NativeX Holdings, LLC#Cassandra13     Uses for IKVM •  Develop .NET applications in Java •  Write code in Java. •  Compile to JVM bytecode. •  Use ikvmc to produce a .NET Executable. •  Can also use .NET API’s in Java code using the ikvmstub application to generate a Java jar file. •  Example: ikvmstub MyDotNetAssemblyName
  • 33. ©2013 NativeX Holdings, LLC#Cassandra13     Hector Converted to .NET •  Per Concord’s recommendation we chose to compile the Hector jar into a .NET Assembly. •  Hector and all of it’s dependencies are pulled into one .NET dll that can be referenced by any .NET assembly. •  In addition you will have to reference some core IKVM assemblies. •  Each Java dependency is given it’s own namespace with in the .NET dll.
  • 34. ©2013 NativeX Holdings, LLC#Cassandra13     HectorNet •  Concord also created a dll called HectorNet that wraps some of the Hector behaviors and makes it feel more like .NET. •  Such as supporting connection strings. •  Mapping Thrift byte arrays to .NET data types. •  Mapping to native .NET collections instead of using Java collections.
  • 35. #Cassandra13     Challenges •  C* does not have Auto Id generation. •  How to connect to C* with C#? •  Finding a connector with good Failure Tolerance. •  How to integrate our reporting system?
  • 36. ©2013 NativeX Holdings, LLC#Cassandra13     Integrating Reporting OLTP   C*   Extract   Transform   CUBE   SSAS   OLAP   MS  SQL   Load   ETL  -­‐  SSIS  
  • 37. ©2013 NativeX Holdings, LLC#Cassandra13     Integrating Reporting •  The SSIS Extract process uses C# Script Tasks. •  Script Task needs references to HectorNet and all of its dependencies. •  SSIS can only reference assemblies that are in the GAC. •  Assemblies in the GAC have to be Signed.
  • 38. #Cassandra13     Why Not DataStax C# Driver? •  We built everything using CQL 2.0. •  Wasn’t ready in time for our launch date.
  • 39. #Cassandra13     DSE for the Win! •  We use DataStax Enterprise. •  Mainly for support, which continues to be a life saver.
  • 40. ©2013 NativeX Holdings, LLC#Cassandra13     Thank you! •  We are hiring •  http://nativex.com/careers/ •  Join the MSP C* Meetup •  http://www.meetup.com/Minneapolis-St-Paul-Cassandra-Meetup/ •  Contact us •  Jeff.Smoley@nativex.com •  Derek.Bromenshenkel@nativex.com @breakingtrail •  Slide Deck •  http://www.slideshare.net/jjsmoley/the-perils-and-triumphs-of-using- cassandra-at-a-netmicrosoft-shop