10. Session Objectives
Build on Stefan’s introduction of
of cloud computing
Provide you with 5 patterns for
cloud-based applications
Show implementations of
these patterns
12. Defining Cloud Computing
Application runs
on-premises
• Bring my own
machines,
Buy my own
connectivity,
software, etc.and
hardware,
• manage my own
Complete control
data center
and responsibility
• Upfront capital
costs for the
infrastructure
13. Defining Cloud Computing
Application runs Application runs at a
on-premises hoster
• Bring my own • Rent machines,
machines, connectivity,
Buy my own Pay someone to
software
connectivity,
software, etc.and
hardware, host my application
• Less control, but
• manage my own
Complete control using hardware that
fewer
data center
and responsibility I specify
responsibilities
• Upfront capital • Lower capital costs,
costs for the but pay for fixed
infrastructure capacity, even if idle
14. Defining Cloud Computing
Application runs Application runs at a Application runs using
on-premises hoster cloud platform
• Bring my own • Rent machines, • Shared,
machines, connectivity, multi-tenant
Pay someone for a
Buy my own Pay someone to
software environment
connectivity, pool of computing
software, etc.and
hardware, host my application
• Less control, but • Offers pool of
resources that can
• manage my own
Complete control using hardware that
fewer computing
be applied to a set
data center
and responsibility I specify
responsibilities resources,
of applications
abstracted from
• Upfront capital • Lower capital costs,
costs for the but pay for fixed infrastructure
infrastructure capacity, even if idle • Pay as you go
19. Defining Cloud Computing
Pool of computing resources that lives
within a self managed datacenter
20. Defining Cloud Computing
Pool of computing resources that lives
within a datacenter with no sharing
21. Defining Cloud Computing
Compute: Virtualized compute based on Windows Server
Storage: Durable, scalable, & available storage
Management: Automated, management of the service
Database: Relational processing for structured/
unstructured data
Service Bus: General purpose application bus
Access Control: Rules-driven, claims-based access control
22. Defining Cloud Computing
Different Models
Infrastructure as a Service (IaaS)
vs.
Platform as a Service (PaaS)
23. Defining Cloud Computing
Your Application Deployment
Frameworks
Deployment Web Server
OS Services Provided by
Windows Azure
Operating System
Provided Virtualized Instance
By
Amazon
Hardware
EC2
24. Defining Cloud Computing
Deployment Your Application Deployment
Frameworks
Web Server
Provided by OS Services Provided by
Google
Windows Azure
AppEngine
Operating System
Virtualized Instance
Hardware
35. #1 - Using the Cloud for Scale
How would Jim do this today on premises?
Browser
Browser Web Tier
N
Browser L Web Tier B/L Tier Database
B
Browser Web Tier
Browser
36. #1 - Using the Cloud for Scale
How would Jim do this today on premises?
Browser
Browser B/L Tier
N
Browser Web Tier L B/L Tier Database
B
Browser B/L Tier
Browser
37. #1 - Using the Cloud for Scale
How would Jim do this today on premises?
Browser
Browser Web Tier B/L Tier
N N
Browser L Web Tier L B/L Tier Database
B B
Browser Web Tier B/L Tier
Browser
38. #1 - Using the Cloud for Scale
How would Jim do this today on premises?
Browser p1 p2 p3
Browser Web Tier B/L Tier
N N
Browser L Web Tier L B/L Tier Database
B B
Browser Web Tier B/L Tier
Browser
40. #1 - Using the Cloud for Scale
How would Jim do this today on premises?
Browser p1 p2 p3
Browser Web Tier B/L Tier
N N
Browser L Web Tier L B/L Tier Database
B B
Browser Web Tier B/L Tier
Browser “That took a lot of work - and money!”
41. #1 - Using the Cloud for Scale
How would Jim do this today on premises?
p1 p2 p3
“Not so great now…”
Web Tier B/L Tier
N N
Browser L Web Tier L B/L Tier Database
B B
Web Tier B/L Tier
“That took a lot of work - and money!”
“Hmmm... Most of this stuff is sitting idle...”
42. #1 - Using the Cloud for Scale
Datacenter peak load
Usage Idle time
Jan Apr Jul Oct
44. #1 - Using the Cloud for Scale
“Wow! What a great site!”
Request
Browser Web Role Worker Role Azure
Storage
Response
45. #1 - Using the Cloud for Scale
Browser
Browser
Browser Web Role Worker Role Azure
Storage
“Server Busy”
Browser
Browser
46.
47.
48. #1 - Using the Cloud for Scale
Browser
Browser Web Role
N
Browser L Web Role Worker Role Azure
B Storage
Browser Web Role
Browser
You don’t see
this bit
49. #1 - Using the Cloud for Scale
Browser
Browser Web Role Worker Role
N N
Browser L Web Role L Worker Role Azure
B B Storage
Browser Web Role Worker Role
Browser
50. OK, so changing config is easy...
…but what else do I need to know?
51. #1 - Using the Cloud for Scale
Browser
Browser Web Role Worker Role
N N
Browser L Web Role L Worker Role Azure
B B Storage
Browser Web Role Worker Role
Browser
52. #1 - Using the Cloud for Scale
Browser
Browser Web Role Worker Role
N N
Browser L Web Role L Worker Role Azure
B B Storage
Browser Web Role Worker Role
Browser Tight coupling between web and
worker role is an anti-pattern
53. #1 - Using the Cloud for Scale
4. Process
Web Role Worker Role
2. Respond to UI
Req
1 Place on queue
. 3. Pickup from queue
Queue
54. #1 - Using the Cloud for Scale
4. Process
Web Role Worker Role
Req 5. Add result to table
Queue
6. Query table on refresh
Table
58. #1 - Using the Cloud for Scale
WMI_Win32_PerfFormattedData_ASPNET_ASPNETApplications
/RequestsPerSecond
Browser
Browser Web Role
N
Browser L Web Role Worker Role Azure
B Storage
Browser Web Role
Browser
Management API
Log Worker Role
or Email
60. #1 - Using the Cloud for Scale
Web Role
Web Role
Web Role Worker Role
Req Req Req
Queue
Web Role
Web Role Monitor queue
length against user’s
Web Role expectations
61. #1 - Using the Cloud for Scale
Web Role Worker Role
Web Role Worker Role
Web Role Worker Role
Req Req Req
Queue
Web Role Worker Role
Web Role Monitor queue Worker Role
length against user’s
Web Role expectations Worker Role
62. Patterns for Cloud Computing
Takeaways
A core tenet of cloud computing is
the ability to scale up/down
Understand how to communicate
between roles and nodes
Strategy on when to scale up/down
roles in production
68. #2 - Using the Cloud for Multi Tenancy
How would Jim do this today on premises?
Browser Web Tier B/L Tier Database
Customer #1
Browser Web Tier B/L Tier Database
Customer #2
Browser Web Tier B/L Tier Database
Customer #3
74. #2 - Using the Cloud for Multi Tenancy
Browser
Fixed Schema
Customer #1
Browser Web Tier B/L Tier Database
Customer #2
Browser
Option 1: Everyone Uses the Same Database/Schema
Customer #3
Pros: Simplest approach, easy to maintain/upgrade.
Cons: No customizations. Restoring of tenant data.
75. #2 - Using the Cloud for Multi Tenancy
Browser Database
Customer #1 Customer #1
Browser Web Tier B/L Tier Database
Customer #2 Customer #2
Browser Database
Customer #3 Customer #3
Option 2: Give Each Customer Their Own Database/Schema
Pros: Flexible. Tenant restore is easier. High Isolation.
Cons: Can be costly. Difficult to upgrade db schemas.
76. #2 - Using the Cloud for Multi Tenancy
Browser Fixed Schema
with Customizations
Customer #1
Browser Web Tier B/L Tier Database
Customer #2
Browser
Option 3: Fixed Database/Schema, with customizations
Customer #3
Pros: Customers can add their own custom fields
Cons: Non standard way of customizing the schema.
Tenant restore is difficult.
77. #2 - Using the Cloud for Multi Tenancy
Tenant
*
1
TenantID int
TenantName nvarchar
*
Employee
EmployeeId int TypeID
*
Type
int
FirstName nvarchar Name nvarchar
LastName nvarchar CLRType nvarchar
1 1
Customization
*
int
*
CustomizationID
Value nvarchar
78. #2 - Using the Cloud for Multi Tenancy
Tenant
*
1
TenantID 1
TenantName UK Branch
*
Employee
EmployeeId 1 TypeID
*
Type
1
FirstName Gordon Name PostalCode
LastName Brown CLRType string
1 1
Customization
*
1
*
CustomizationID
Value SW1 2AA
A
79. #2 - Using the Cloud for Multi Tenancy
Tenant
*
1
TenantID 2
TenantName US Branch
*
Employee
EmployeeId 2 TypeID
*
Type
2
FirstName Barack Name ZipCode
LastName Obama CLRType string
1 1
Customization
*
2
*
CustomizationID
Value 20500
80. #2 - Using the Cloud for Multi Tenancy
Tenant
*
1
Fixed Schema TenantID 2
Applies to All Could be both
TenantName US Branch
* *
Tenants
Employee Type
EmployeeId 2 TypeID 2
Customizable
FirstName Barack Tenant by Tenant Name ZipCode
LastName Obama Basis CLRType string
1 1
Customization
*
2
*
CustomizationID
Value 20500
89. Patterns for Cloud Computing
Takeaways
Always consider Multi Tenancy first,
even if only one customer
Design considerations must include
both data and UI
Many other considerations, such as
identity – p&p guidance
91. Patterns for Cloud Computing
Jim sees how cloud computing supports
scaling up/down nodes
92. Patterns for Cloud Computing
“Can I use all of these nodes in parallel?”
93. Patterns for Cloud Computing
“I’ve got this complex calculation I would like to
share across these multiple nodes…”
94. #3 - Using the Cloud for Compute
Data
Data Worker
Data
Client Master Worker
Data
Worker
95. #3 - Using the Cloud for Compute
Result
Worker
Result
Client Master Worker
Result
Worker
Result
96. Popularized by the term “MapReduce”*
* 2004 OSDI paper by Jeff Dean and Sanjay Ghemawat (Google)
97. #3 - Using the Cloud for Compute
How many ”e”’s in
“The quick brown fox jumps over the lazy dog”?
M<k,v>
Data Worker
M<k,v>
Client Master Worker
M<k.v>
Worker
“Map”
M<“the quick brown”.”e”>
M<“fox jumps over”.”e”>
M<“the lazy dog”.”e”>
98. #3 - Using the Cloud for Compute
L<k,v>
Worker
L<k,v>
Client Master Worker
Result
Worker
L<k,v>
3 x ”e”s found
“Reduce”
L<”e”,”1”>
L<”e”,”1”>
L<”e”,”1”>
100. #3 - Using the Cloud for Compute
Google
20pb of data analyzed every day using MapReduce
Yahoo!
10k+ cores, 4pb of data using MapReduce
Facebook
2500+ cores, 1pb of data using MapReduce
102. #3 - Using the Cloud for Compute
Apache Hadoop
Open Source Java “Inspired by MapReduce”
(Core, HDFS, many more)
Cloudera
Consulting, training, distribution of Hadoop
Amazon Elastic MapReduce
Hadoop implementation on EC2
104. #3 - Using the Cloud for Compute
How would Jim do this today on premises?
Data
Data Worker
Data
Client Master Worker
Client Application Job/Task Scheduler Worker
Data
Remote Service
106. #3 - Using the Cloud for Compute
Data
Worker
Data
Data
Worker
Client Web Role
Data
Client Application Job/Task Scheduler Worker
Remote Service
Req
Queue
Table
108. Patterns for Cloud Computing
Takeaways
MapReduce very visible, although
can be difficult to initially grasp
Learn about existing frameworks,
especially Apache Hadoop
Read up on Dryad (DryadLINQ) for
future direction
114. #4 - Using the Cloud for Storage
How would Jim do this today on premises?
File
RPC/NFS
Client File Server Store
115. #4 - Using the Cloud for Storage
How would Jim do this today on premises?
Data TDS (Tabular Data Stream)
Client DB Server RDBMS
116. #4 - Using the Cloud for Storage
How would Jim do this today on premises?
Data
HTTP POST
Browser Web Server Database
117. #4 - Using the Cloud for Storage
I love I love
you! you too!
Server Data
Affinity between your data and physical
hardware that serves it
118. #4 - Using the Cloud for Storage
I love I love
you! you too!
Server Data
Symptoms:
Which RAID number was that again?
Tedious to backup exponentially growing data
Crap! I’m at 95% capacity - got to move to a bigger disk
123. #4 - Using the Cloud for Storage
PutBlob Blob Container
PUT http://account.blob.core.windows./net/containername/blobname
REST API
Client Azure
Blob Storage
http://account.blob.core.windows.net/containername/blobname
PutBlob = 64Mb MAX
MetaData = 8Kb per Blob
124. #4 - Using the Cloud for Storage
Blob Container
REST API
Client Azure
Blob Storage
GetBlob
GET http://account.blob.core.windows./net/containername/blobname
http://account.blob.core.windows.net/containername/blobname
125. #4 - Using the Cloud for Storage
Blob Container
REST API
Client Azure
Blob Storage
GetBlob
GET http://account.blob.core.windows./net/containername/blobname
Range: bytes=329300 - 730000
http://account.blob.core.windows.net/containername/blobname
126. #4 - Using the Cloud for Storage
PutBlock(blobname, blockid, data) Blob Container
PutBlockList(blobname, blockid1 …, blockidN)
,
REST API
Client Azure
Blob Storage
http://account.blob.core.windows.net/containername/blobname
PutBlock = 4Mb MAX to a maximum of 50Gb
BlockId = 64 bytes
128. #4 - Using the Cloud for Storage
REST:
GET http://account.table.core.windows.net/Customer?$filter=%20PartitionKey%20eq%20value
LINQ:
var customers = from o in context.CreateQuery<customer>(“Customer”) where o.PartitionKey
== value select o;
Worker Role Azure
Table Storage
http://account.table.core.windows.net
Each Table:
PartitionKey (e.g. DocumentName) to ensure
scalability
RowKey (e.g. version number)
[fields] for data
143. Patterns for Cloud Computing
Takeaways
Storage in the cloud may look the
same, but breaks the affinity issue
Understand the pricing model for
storage on-premises vs. cloud
SQL Azure as a factor for
migration/move from on premises
153. #5 - Using the Cloud for Communications
http://app.queue.core.windows.net/
REST
Client Azure Queue
154. #5 - Using the Cloud for Communications
Company 1
http://app.queue.core.windows.net/
Client
REST
Azure Queue
Company 2
Client
155. #5 - Using the Cloud for Communications
Company 1
http://app.queue.core.windows.net/
Client
REST
Azure Queue
Company 2
Client
156. #5 - Using the Cloud for Communications
Company 1
http://app.queue.core.windows.net/
Client
Primary Access Key
REST
Azure Queue
Company 2
Client
Primary Access Key
157. #5 - Using the Cloud for Communications
Company 1
http://app.queue.core.windows.net/
Client
REST
Web Role Azure Queue
Company 2
Client
158. #5 - Using the Cloud for Communications
Proxy?
Company 1
Firewall
http://app.queue.core.windows.net/
Client
REST
Web Role Azure Queue
Company 2
Client
Firewall
159. #5 - Using the Cloud for Communications
Company 1
Firewall
http://app.queue.core.windows.net/
Client
REST
Web Role Azure Queue
Company 2 65.55.33.204
Client
Firewall
192.168.14.100
NAT?
160. #5 - Using the Cloud for Communications
Company 1
Firewall
http://app.queue.core.windows.net/
Client
REST
Web Role Azure Queue
Company 2 65.55.33.204
Client
Firewall
192.168.14.100
OK, so I’ll do a HTTP
poll every minute
161. #5 - Using the Cloud for Communications
Company 1
Firewall
http://app.queue.core.windows.net/
Client
REST
Web Role Azure Queue
Company 2 65.55.33.204
Client
Firewall
192.168.14.100
…and how about other
protocols other than HTTP?
166. #5 - Using the Cloud for Communications
Company 1
sb://.../myqueue
Client
.NET
Service Bus
Company 2
Client
Firewall
Outbound bi-directional socket
Kept alive in background
167. #5 - Using the Cloud for Communications
Company 1
Firewall
sb://.../myqueue
Client Outbound one-way socket
.NET
Service Bus
Company 2
Message routed
Client
accordingly
Firewall
Outbound bi-directional socket
Kept alive in background
168. #5 - Using the Cloud for Communications
This Conference
Application Firewall
sb://.../myqueue
My Laptop Outbound one-way socket
Localhost:1000
.NET
Service Bus
My Home
Message routed
Home PC
accordingly
192.168.14.193 Firewall
Outbound bi-directional socket
Kept alive in background
SQL
Express
Port 1433
170. #5 - Using the Cloud for Communications
Company 1
sb://.../myqueue
Client
.NET
Service Bus
Company 2
ATOMPub via REST
Client
Firewall
Consumer defines and creates
a Message Buffer
171. #5 - Using the Cloud for Communications
Company 1
Producer sends messages to
the Message Buffer
sb://.../myqueue
Client
Firewall
.NET
Service Bus
Company 2
ATOMPub via REST
Client
Firewall
172. #5 - Using the Cloud for Communications
Company 1
sb://.../myqueue
Client
Firewall
.NET
Service Bus
Company 2
ATOMPub via REST
Client
Firewall
Consumer picks up these messages
(retrieve, peek, lock)
173. Patterns for Cloud Computing
Takeaways
Be careful consuming REST based
queues using shared secret
Firewalls/NATs can add additional
trouble (especially non-HTTP)
Learn how .NET Service Bus
traverses in these scenarios
175. Patterns for Cloud Computing
We’ve covered 5 patterns, but Jim has one last
question…
176. Patterns for Cloud Computing
Are there cases where these patterns work
together?
177. Putting the Patterns Together
Windows Azure
PHP
Let’s build an
application in PHP
that scales to many
nodes…
178. Putting the Patterns Together
Use the principles of Windows Azure
multi tenancy to PHP (10 nodes)
create a version of
the application across
multiple vendors
Google AppEngine
Java Servlet
Amazon EC2
(5 nodes
ASP
.NET
using ELB)
179. Putting the Patterns Together
Windows Azure
PHP
Job
Google AppEngine
Client Job Java Servlet
Compute results with
Job a MapReduce-like way
of distributing work
Amazon EC2 across all of these
ASP
.NET applications
180. Putting the Patterns Together
Store the results
in a SQL Azure Windows Azure
database PHP
Job
Google AppEngine
Client Job Java Servlet SQL Azure
Database
Job
Amazon EC2
ASP
.NET
181. Putting the Patterns Together
.NET Service Bus
Windows Azure
PHP
Job
Google AppEngine
Client Job Java Servlet SQL Azure
Database
Job
Coordinate Amazon EC2
communication ASP
.NET
through the .NET
Service Bus
182. Putting the Patterns Together
.NET Service Bus
Windows Azure
PHP
Job
Google AppEngine
Client Job Java Servlet SQL Azure
Database
Job
Amazon EC2
ASP
.NET
183. Putting the Patterns Together
.NET Service Bus
Windows Azure Store results
How many prime in SQL Azure
numbers between PHP
1 and 10,000,000? Compute
Job
Google AppEngine
Client Job Java Servlet SQL Azure
Database
Compute
Job
40 jobs of
Amazon EC2
250,000
numbers ASP
.NET
Compute
186. Next Steps
Obviously, our friend Jim, is fake…
187. Next Steps
Make sure you have a clear definition
of Cloud Computing
Explore the 5 usage patterns for
your scenarios today
Think about the next steps for
implementation and migration