Title: Building Scalable 'NET Applications
1Building Scalable .NET Applications
Guy Nirpaz, EVP RD, GigaSpaces Technologies
2Who am I?
- 3 Years with GigaSpaces
- VP of RD
- Speaker at dev conferences
- Agile, Technology, Architecture
- Veteran of several Startups
- Spent most of my life in design and architecture
of complex systems - Financial Services, Command and Control, Teleco
- Mercury, IBM, others
- Contact
- guyn_at_gigspaces.com
- _at_gnirpaz Twitter
- jroller.com/gnirpaz - Blog
3About GigaSpaces
- A Scale-Out Platform, optimized for distributed
and virtualized environments - Any deployment environments clouds, grids,
commodity servers, multi-core - Any languages Spring/Java, .Net, C, Dynamic
- Driven by the need for
- confidence to handle unpredictable demand and
peak loads - guaranteed performance under any processing
loads - cost-effective, on-demand scalability for clouds
and grids - rapidly develop, change and scale applications
4Global 1000 Companies Rely on GigaSpaces
5- Explore technical and business challenges of
building scalable applications. Analyze
fundamental architecture limitations and propose
cost-effective alternative
6The typical scenario
Michael Jackson Tickets are on Sale!
Your Application
7Solution Linear and Dynamic Scalability
Linear Dynamic Scalability
8Traditional Tier Based Architecture is not
scalable
Business tier
- Relies on centralized resources
- Hard to install
- Bound to static resources (IPs, disk drives,
etc.) - Separate clustering model for each tier
- Hard to maintain
- Non-scalable
Web Tier
Load Balancer
Back-up
Back-up
Back-up
Messaging
9Peak loads are unpredictable
- Constant transaction, data and user growth
- Volatile and unpredictable loads
10Scalability Disasters Are More Common Than Ever
- Lost customers
- Lost revenues
- Brand damage
11Micro-Blogging (ala Twitter) Example
IIS
Data Base
Users
Load Balancer
IIS
12Reader/Publisher Service
namespace MicroBlog.Services public
interface IReaderService ICollectionltPostgt
GetUserPosts(String userID) ICollectionltPostgt
GetUserPosts(String userID, DateTime fromDate)
namespace MicroBlog.Services public
interface IPublisherService void
PublishPost(Post post)
13What happens on success
Users
The database becomes the bottleneck
IIS
Data Base
IIS
Load Balancer
IIS
IIS
IIS
IIS
14Reader Database Implementation
public ICollectionltPostgt GetUserPosts(string
userID, DateTime fromDate) // Create
command IDbCommand dbCommand
_dbConnection.CreateCommand() dbCommand.Com
mandText String.Format( "SELECT FROM Post
WHERE UserID'0' AND PostedOn gt
1", userID, fromDate) // Execute
command IDataReader dataReader
dbCommand.ExecuteReader() // Translate results
from db records to .NET objects ListltPostgt
result ReadPostsFromDataReader(dataReader) //
Return results return result
15Step I Remove DB Bottlenecks with Caching
- Reduce I/O bottlenecks less DB access
- In-Memory caching
- Reduced Network hops (if in-process)
- Suitable for read-mostly apps
Users
Load Balancer
Data Base
Cache Service
IIS
16Reader Space Implementation
public ICollectionltPostgt GetUserPosts(String
userID) // Create a template to get all posts
by a user id Post template new
Post() template.UserID userID // Use space
proxy to read entries matching template Post
result _spaceProxy.ReadMultiple(template) //
Return result return result
17Step II Linear Scalability Partitioning and
Collocation
IIS
Users
Load Balancer
Data Base
IIS
IIS
IIS
18Post Life Cycle
Writer
Reader
Poster
Load Balancer
Post.NEW
IIS
ReaderClient
Post.VALID
Space
Writer Client
Reader
19Writer Client
public class SpacePublisherService
IPublisherService private readonly
ISpaceProxy _spaceProxy public void
PublishPost(Post post) this._spaceProxy.Writ
e(post)
20Event Driven Programming Writer Example
PollingEventDriven, TransactionalEvent public
class PendingPostsProcessor
DataEventHandler public Post
ProcessPendingPost(Post post)
PostStatus newStatus PostStatus.Published
foreach (String illegalWord in _illegalWords)
if (post.Subject.Contains(illegalWord)
post.Body.Contains(illegalWord))
newStatus PostStatus.Rejected break
// Set new status
post.Status newStatus return post
21Read Life Cycle
Writer
Reader
Poster
Load Balancer
IIS
ReaderClient
Space
Writer Client
Post
Post
Post
Reader
22Step II Linear Scalability Partitioning and
Collocation
IIS
Users
Load Balancer
Data Base
IIS
IIS
- Collocation write/read within the same process
- Partitioning and Content-Based Routing
- Async Writes to the Database
IIS
23Step III Dynamic Scalability
Monitor
Provision
Users
Load Balancer
Data Base
IIS
IIS
- SLA Driven Policies
- Dynamic Scalability
- Self healing
24Space Based Architecture Values
- Linear Scalability
- Predictable cost model pay per value
- Predictable growth model
- Dynamic
- On demand grow only when needed
- Scale back when resources are not needed anymore
- SLA Driven
- Automatic
- Self healing
- Application aware
- Simple
- Non intrusive programming model
- Single clustering Model
25Questions?
26GigaSpaces Home Pagehttp//www.gigaspaces.com/
GigaSpaces XAP Product Overview http//www.gigasp
aces.com/wiki/display/XAP7/Concepts GigaSpaces
XAP for the Cloud http//www.gigaspaces.com/clou
d