40
Jose Parra [email protected] @josedavidparra Using Azure Table Storage in your Startup

Using Azure Table Storage in your Startup

Embed Size (px)

DESCRIPTION

Jose has been working during the past 10+ months on a startup project that runs on MVC4 and the Microsoft Azure Platform, making heavy use of Azure tables and blobs for data storage. Come along and hear about how it all works, tips, recommended tools, lessons learned, and pitfalls. It will be full of live demos! Time permitting, he will be sharing his experiences on building a online-service using the Microsoft .NET web stack.

Citation preview

Page 1: Using Azure Table Storage in your Startup

Jose [email protected]

@josedavidparra

Using Azure Table Storage in your Startup

Page 2: Using Azure Table Storage in your Startup
Page 3: Using Azure Table Storage in your Startup
Page 4: Using Azure Table Storage in your Startup

A candidate online service must• Runs “almost” by itself• Could be operated from

anywhere• Moving bits instead of atoms• Cheap to run• Clear revenue model• Be able to build a quick MVP

Page 5: Using Azure Table Storage in your Startup

Inspiration

Page 6: Using Azure Table Storage in your Startup

Architecture

Web

UI

XXXXX

XXXXXXX

XXX

XXX XX

XXXXX

XXXXXXX

XXX

XXX XX

XXXXX

XXXXXXX

XXX

XXX XX

Admin

Editors

Biz

Log

ic

Dat

a A

cces

sA

dapt

ers

End Users

Azure Web Role

Portals

Azure Table Storage

Azure BLOBs

Documents

Static Content

Jobs

Logs

Accounts

Payment Gateway(PayPal)

SMTP Gateway

(SendGrid)

Customer Support(UsersVoice)

Page 7: Using Azure Table Storage in your Startup

Our Manifesto• No external funding!• No need to quit our day jobs• No rush• Commitment/discipline to finish it, BUT• No fear of failure• No over-engineer it – not solving issues we do not have yet

• Every tech decision tries to implement a functionality/solve a problem we currently have

• Being open to learn new things (tech/non-tech)!

Page 8: Using Azure Table Storage in your Startup

Technologies/Tools Involved• MVC 4 – Razor• The 3 portals in 1 Single Azure Web Role• Azure Tables and Blobs for Storage• Bootstrap for layout and Responsive UI• Source Code/Task Lists/Build on Azure TFS• GeoIP using MaxMind• AutoMapper (Model <-> DTOs)• SendGrid for SMTP• UserVoice for HelpDesk/Feedback• Glimpse and MiniProfiler for profiling• PayPal as payment gateway• Google Recaptcha

Page 9: Using Azure Table Storage in your Startup

Why Azure?

• CHEAPER!• Reliable-enough• Integrated to VS and .NET• High performance• New datacenters nearby (AUS)• Catching up quickly!

Page 10: Using Azure Table Storage in your Startup

BTW, What is the cloud?A pay-as-you-go approach to computing where you control the provisioning of computing resources

Page 11: Using Azure Table Storage in your Startup

Applicationbuilding blocks

StorageBig data

Caching

CDN

Database

Identity

Media

Messaging

Networking

Traffic

Page 12: Using Azure Table Storage in your Startup

Cloud service

s

Web sites

Virtual machine

sIaaS

PaaS

PaaS

Execution Models

Page 13: Using Azure Table Storage in your Startup

TablesStructured storage. A table is a set of entities; an entity is

a set of properties.

QueuesReliable storage and delivery of messages for an application.

BlobsSimple named files along with metadata for the file.

DrivesDurable NTFS volumes for Windows Azure applications to use. Based on Blobs.

Azure SQLRelational SQL Server engine. Clustered, fully managed. SQL Reporting Support

DB

Page 14: Using Azure Table Storage in your Startup

How do you get charged?• Per Endpoint (PaaS)• Per the size of the instance• Per running instance• Per VM and its size (IaaS)• Per MB of storage• Per storage transaction• Per MB of transfer outbound (inboud:

free)• Pricing calculator:

http://www.windowsazure.com/en-us/pricing/calculator/

Page 15: Using Azure Table Storage in your Startup

Why Azure Tables for Storage?• Cost!

• US$1.75/mo for 25GB vs US$76 with SQL Azure

• $0.01 for 100K transactions (N/A for SQL Azure)

• +80% of the data will be unstructured data (logs)!

• The option of massive-scalability• Performance

Page 16: Using Azure Table Storage in your Startup

Windows Azure Storage AccountUser specified globally unique account name

Can choose geo-location to host storage account:

Page 17: Using Azure Table Storage in your Startup

Azure Tables• Provides Structured Storage

• Massively Scalable Tables• Billions of entities (rows) and TBs of data• Can use thousands of servers as traffic

grows

• Highly Available & Durable

• Data is replicated several times (default)• 2x Same region (GRS)• 3x Same sub-region (LRS)

Page 18: Using Azure Table Storage in your Startup

Scalability Targets for Storage Accounts• Capacity – Up to 200 TBs• Transactions – Up to 20,000

entities/messages/blobs per second• Bandwidth for a Geo

Redundant storage account• Ingress – up to 5 gigabits per second• Egress – up to 10 gigabits per second

• Bandwidth for a Locally Redundant storage account

• Ingress – up to 10 gigabits per second• Egress – up to 15 gigabits per second

Page 19: Using Azure Table Storage in your Startup

Table Storage Concepts

EntityTableStorageAccount

contoso

Name =…Email = …

Name =…EMailAdd=

customers

Photo ID =…Date =…

photos

Photo ID =…Date =…

Page 20: Using Azure Table Storage in your Startup

Entity Properties• Entity can have up to 255 properties

• Up to 1MB per entity• Mandatory Properties for every entity

• PartitionKey & RowKey (only indexed properties)• Uniquely identifies an entity• Defines the sort order

• RowKeys must be unique within the same partition

• Timestamp (Auto)• Optimistic Concurrency

• No fixed schema for other properties• Each property is stored as a <name, typed value> pair• No schema stored for a table

Page 21: Using Azure Table Storage in your Startup

Purpose of the PartitionKey•Entity Locality

• Entities in the same partition will be stored together (Efficient querying and cache locality)

•Entity Group Transactions• Atomic multiple Insert/Update/Delete in

same partition in a single transaction•Table Scalability

• Target throughput – 500 tps/partition, several thousand tps/account

• Automatically load balance partitions• Each partition can be served by a different storage node• Scale to meet the traffic needs of your table

Page 22: Using Azure Table Storage in your Startup

PARTITIONKEY(CATEGORY)

ROWKEY(TITLE)

TIMESTAMP MODELYEAR

Rafts 14ft Super Tourer … 1999

… … … …

Skis Fabrikam Back Trackers

… 2009

… … … …

Tents Super Palace … 2008

PARTITIONKEY(CATEGORY)

ROWKEY(TITLE)

TIMESTAMP MODELYEAR

Bikes Super Duper Cycle … 2009

Bikes Quick Cycle 200 Deluxe

… 2007

… … … …

Canoes Whitewater … 2009

Canoes Flatwater … 2006

Partitions and Partition Ranges

Server ATable = Products

Server BTable = Products

[Canoes - MaxKey)

Server ATable = Products

[MinKey - Canoes)

PARTITIONKEY(CATEGORY)

ROWKEY(TITLE)

TIMESTAMP MODELYEAR

Bikes Super Duper Cycle … 2009

Bikes Quick Cycle 200 Deluxe

… 2007

… … … …

Canoes Whitewater … 2009

Canoes Flatwater … 2006

Rafts 14ft Super Tourer … 1999

… … … …

Skis Fabrikam Back Trackers

… 2009

… … … …

Tents Super Palace … 2008

Page 23: Using Azure Table Storage in your Startup

Data Types

Page 24: Using Azure Table Storage in your Startup

No Fixed Schema

FIRST LAST BIRTHDATE

Wade Wegner 2/2/1981

Nathan Totten 3/15/1965

Nick Harris May 1, 1976

FAV SPORT

Canoeing

Page 25: Using Azure Table Storage in your Startup

Demo Time!

Page 26: Using Azure Table Storage in your Startup

The Storage Client API

• OData (Atom) protocol with WCF Data Services

• Microsoft.WindowsAzure.StorageClient

• REST• LINQ• PowerShell!

Page 27: Using Azure Table Storage in your Startup

InsertUpdate Merge – Partial update

Replace – Update entire entity

UpsertDeleteQueryEntity Group TransactionsMultiple CUD Operations in a single atomic transaction

Create, Query, DeleteUnnormalized dataTable URL: http://<storage account>.table.core.windows.net/<table>

Not an RDBMS! Table

Entities

Page 28: Using Azure Table Storage in your Startup

Single Entity Query

Server A

PartitionKey(Category)

RowKey (Title)

Action Fast & Furious

… 10000 more Action movies

Action The Bourne Ultimatum

… 100000 more Action & Animation movies

Animation Open Season 2

… 100000 more Animation movies

Animation The Ant Bully

Comedy Office Space

… 1000000 more Comedy & SciFi movies

SciFi Star Trek

… 100000 more SciFi & War movies

… 100000 more War movies

War Defiance

Client

Server B

> Where PartitionKey=‘SciFi’ and RowKey = ‘Star Trek’

> Efficient processing> No continuation tokens

28

Request

Result

Page 29: Using Azure Table Storage in your Startup

Client

Server A

Server B

Table Scan Query

Request

PartitionKey(Category)

RowKey(Title)

Rating

Action Fast & Furious 5

… 999 more movies rated > 4

… Action and Anim. movies here with rating < 4

Animation A Bug’s life 2

… 100 more movies < 4 here

Animation The Ant Bully 3

Comedy Are we there yet? 2

… More movies here …

Comedy Office Space 5

… 800000 more movies here

Drama A Beautiful Mind 5

… 1200000 more movies here

War Defiance 4

Cont.

> Select * from Movies where Rating > 4> Returns Continuation token

> 1000 movies in result set> Partition range boundary

> Serial Processing: Wait for continuation token before proceeding

Request Cont.

Cont.

Request Cont.

Cont.

29

Returns 1000 movies

Partition range boundary hit

Return continuation

Page 30: Using Azure Table Storage in your Startup

Client

Server A

Server B

Make Scans Faster

Request

PartitionKey(Category)

RowKey(Title)

Rating

Action Fast & Furious 5

… More movies here …

Comedy Office Space 5

… More movies here …

Documentary

Planet Earth 4

… More movies here

Drama Seven Pounds 4

Horror Saw 5 3

… More movies here …

Music 8 Mile 2

… More movies here …

SciFi Star Trek 5

… More movies here …

Cont.

> Split “Select * from Movies where Rating > 4” into> Where PartitionKey >= “A” and PartitionKey < “D” and Rating > 4> Where PartitionKey >= “D” and PartitionKey < “I” and Rating > 4> Etc.

> Execute in parallel> Each query handles continuation

Cont.

30

Request

Request

Cont.

Page 31: Using Azure Table Storage in your Startup

Some Patterns..> Ex: Store Account Information and Rental details in

same table..> Maintain same PartitionKey to enforce transactions

> Account ID as PartitionKey> Update total count and Insert new rentals using Entity

Group Transaction> Prefix RowKey with “Kind” code: A = Account, R = Rental

> Row key for account info: [Kind Code]_[AccountId]> Row Key for rental info: [Kind Code]_[Title]

> Rental Properties not set for Account row and vice versaPartitionKey(AccountID)

RowKey(Kind_*)

Kind TotalRentals

Name Address CheckOutOn Title DueOn

… … … … … … … … …

Sally A_Sally Account

8 Sally Field

Ann Arbor, MI

Sally R_Jaws Rental 2009/11/16 Jaws 2009/11/20

Sally R_Taxi Rental 2009/11/16 Taxi 2009/11/20

… … … … … … … … …31

Page 32: Using Azure Table Storage in your Startup

How to Connect to an Azure Table• Get the latest SDK (2.2)• Install the

“WindowsAzure.Storage” nuget• Get Azure Storage Account,

container and keys• Inherit class from TableEntity• Connect to table• Query and display

Page 33: Using Azure Table Storage in your Startup

Demo Time!

Page 34: Using Azure Table Storage in your Startup

Watch Out!

• A reduced set of supported Data types

• Initializing DateTime properties (set them as nullable)

• Retrieving error details• Issuing complex queries• Only supported operators:

• From, Where, Take, First, FirstOrDefault, Select

Page 35: Using Azure Table Storage in your Startup

Demo Time!

Page 36: Using Azure Table Storage in your Startup

Blobs

Page 37: Using Azure Table Storage in your Startup

BlobContainer

Account

http://<account>.blob.core.windows.net/<container>/<blobname>

Pages/ Blocks

contoso

PIC01.JPG

Block/Page

Block/Page

PIC02.JPG

images

VID1.AVIvideos

Blob Storage Concepts

Page 38: Using Azure Table Storage in your Startup

Demo Time!

Page 39: Using Azure Table Storage in your Startup

Thanks!

Jose [email protected]

@josedavidparra

Page 40: Using Azure Table Storage in your Startup

Links

• Manage.azure.com• http://www.windowsazure.com/

en-us/pricing/calculator/• http://azurestorageexplorer.cod

eplex.com/