highly scalable web application in the cloud with cassandra, c#, and azure (from cassandra summit...

14
Highly Scalable Web Application in the Cloud with Cassandra, C# and Azure Luke Tillman (@LukeTillman) Language Evangelist, DataStax Jeremiah Talkar (@JST2Cents) Azure Evangelist, Microsoft

Upload: luke-tillman

Post on 06-Jun-2015

161 views

Category:

Technology


1 download

DESCRIPTION

Video of presentation at Cassandra Summit 2014 is available here: http://youtu.be/2ZQcCOTLdVY?list=PLqcm6qE9lgKJkxYZUOIykswDndrOItnn2 Putting together a cloud based web application that allows end users to upload, encode, manage and distribute video media files is not a difficult task these days. Especially with the number of related frameworks and services available, ready to be used or consumed. The situation gets more complex when the expected traffic is in the millions-of-users range, globally distributed, and requiring detailed monitoring for usage. Using this scenario, in this session you will learn how to use the recently updated Datastax C# Cassandra driver, how to deploy a multi-datacenter Cassandra cluster using the Microsoft Azure platform that can be accessed from different programming languages, and how to leverage existing cloud services to perform some of the tasks associated with this use case.

TRANSCRIPT

Page 1: Highly Scalable Web Application in the Cloud with Cassandra, C#, and Azure (from Cassandra Summit 2014)

Highly Scalable Web Application in the

Cloud with Cassandra, C# and Azure

Luke Tillman (@LukeTillman)

Language Evangelist, DataStax

Jeremiah Talkar (@JST2Cents)

Azure Evangelist, Microsoft

Page 2: Highly Scalable Web Application in the Cloud with Cassandra, C#, and Azure (from Cassandra Summit 2014)

KillrVideo Intro and Demo www.killrvideo.com

Page 3: Highly Scalable Web Application in the Cloud with Cassandra, C#, and Azure (from Cassandra Summit 2014)

.NET and Cassandra • Open Source (on GitHub), available via NuGet

• Bootstrap using the Builder and then reuse the ISession object

Cluster cluster = Cluster.Builder() .AddContactPoint("127.0.0.1") .Build(); ISession session = cluster.Connect("killrvideo");

Page 4: Highly Scalable Web Application in the Cloud with Cassandra, C#, and Azure (from Cassandra Summit 2014)

.NET and Cassandra • Executing CQL

• Sync and Async API available

var statement = new SimpleStatement("SELECT * FROM users WHERE userid = ?"); statement = statement.Bind(145); RowSet rows = await session.ExecuteAsync(statement);

Page 5: Highly Scalable Web Application in the Cloud with Cassandra, C#, and Azure (from Cassandra Summit 2014)

.NET and Cassandra • PROTIP: Prepared Statements are your friend

• Prepare once (server roundtrip), Bind and Execute many

• Remember: Save and reuse your Prepared Statement instances

PreparedStatement prepared = session.Prepare("SELECT * FROM users WHERE userid = ?");

BoundStatement boundStatement = prepared.Bind(145); RowSet rows = await session.ExecuteAsync(boundStatement);

Page 6: Highly Scalable Web Application in the Cloud with Cassandra, C#, and Azure (from Cassandra Summit 2014)

.NET and Cassandra • Getting values from a RowSet is easy

• Rowset is a collection of Row (IEnumerable<Row>)

RowSet rows = await _session.ExecuteAsync(boundStatement); foreach (Row row in rows) { var videoId = row.GetValue<Guid>("videoid"); var addedDate = row.GetValue<DateTimeOffset>("added_date"); var name = row.GetValue<string>("name"); }

Page 7: Highly Scalable Web Application in the Cloud with Cassandra, C#, and Azure (from Cassandra Summit 2014)

.NET and Cassandra • Mapping results to DTOs: if you like using CQL, try CqlPoco package

• Note: This package may be pulled into the official driver soon.

public class User { public Guid UserId { get; set; } public string Name { get; set; } } // Get a user by id from Cassandra or null if not found var user = client.SingleOrDefault<User>( "SELECT userid, name FROM users WHERE userid = ?", someUserId);

Page 8: Highly Scalable Web Application in the Cloud with Cassandra, C#, and Azure (from Cassandra Summit 2014)

.NET and Cassandra • Mapping results to DTOs: if you like LINQ, use built-in LINQ provider

[Table("users")] public class User { [Column("userid"), PartitionKey] public Guid UserId { get; set; } [Column("name")] public string Name { get; set; } } var user = session.GetTable<User>() .SingleOrDefault(u => u.UserId == someUserId) .Execute();

Page 9: Highly Scalable Web Application in the Cloud with Cassandra, C#, and Azure (from Cassandra Summit 2014)

Remember… • Prepared Statements are a great performance optimization but

remember to Prepare once, Bind and Execute many

• Take advantage of the async API to give your web server a break or run

queries in parallel

• Don’t write boilerplate mapping code—use LINQ or CqlPoco

Page 10: Highly Scalable Web Application in the Cloud with Cassandra, C#, and Azure (from Cassandra Summit 2014)

KillrVideo on Azure

Cassandra Cluster (DSE)

App data storage (video

metadata, comments, users,

ratings, etc.)

Azure Media Services

Uploaded video encoding,

thumbnail generation, Video

access URI generation

Azure Storage

Queues – notifications on

encoding job progress

Blob – uploaded video storage

OpsCenter

provisioning,

monitoring,

management

KillrVideo Web App C# MVC Web Application, Azure Web Role

Serves up UI, JSON Endpoints

KillrVideo Upload Worker C#, Azure Worker Role

Monitors encoding job events, publishes completed

uploads

Web UI HTML5 / JavaScript (KnockoutJS, jQuery, Bootstrap, etc)

Page 11: Highly Scalable Web Application in the Cloud with Cassandra, C#, and Azure (from Cassandra Summit 2014)

Microsoft Azure

Page 12: Highly Scalable Web Application in the Cloud with Cassandra, C#, and Azure (from Cassandra Summit 2014)

Why Azure? • Enterprise Business

• Hybrid story, not Cloud only, via single cloud platform model

• Broadest Reach via Azure regions footprint, global hosting partners and

on premises

• Azure Active Directory

• Richness of finished services O365, Azure Mobile Services, Azure

Notification Services, Azure API Management, Azure Media Services,

Device Hub, etc.

Page 13: Highly Scalable Web Application in the Cloud with Cassandra, C#, and Azure (from Cassandra Summit 2014)

Next Steps • Get the code and schema on GitHub

https://github.com/luketillman/killrvideo-csharp

• Use the live demo hosted in Azure

http://www.killrvideo.com

• Sign up for free Azure trial subscription

http://azure.microsoft.com

Page 14: Highly Scalable Web Application in the Cloud with Cassandra, C#, and Azure (from Cassandra Summit 2014)