Building Scalable .NET Applications

Post on 11-Feb-2016

28 views 0 download

description

Building Scalable .NET Applications. Guy Nirpaz, EVP R&D, GigaSpaces Technologies. Who am I?. 3 Years with GigaSpaces VP of R&D Speaker at dev conferences: Agile, Technology, Architecture Veteran of several Startups Spent most of my life in design and architecture of complex systems - PowerPoint PPT Presentation

Transcript of Building Scalable .NET Applications

Building Scalable .NET Applications

Guy Nirpaz,

EVP R&D, GigaSpaces Technologies

Who am I?

• 3 Years with GigaSpaces– VP of R&D

– 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@gigspaces.com

– @gnirpaz – Twitter

– jroller.com/gnirpaz - Blog

About 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

Explore technical and business challenges of building scalable

applications. Analyze fundamental architecture limitations and propose

cost-effective alternative

Your Application

The typical scenario…

Michael Jackson Tickets are on Sale!

Linear Dynamic Scalability

Solution: Linear and Dynamic Scalability

Business tier

Back-upBack-up

Back-up

Load Balancer

Web Tier

Messaging

• 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

Traditional Tier Based Architecture is not scalable

Peak loads are unpredictable

• Constant transaction, data and user growth

• Volatile and unpredictable loads

0

100,000,000

200,000,000

300,000,000

400,000,000

500,000,000

600,000,000

700,000,000

800,000,000

900,000,000

1,000,000,000

1,100,000,000

1,200,000,000

1,300,000,000

J-04 M-04 M-04 J-04 S-04 N-04 J-05 M-05 M-05 J-05 S-05 N-05 J-06 M-06 M-06 J-06 S-06 N-06 J-07 M-07 M-07 J-07 S-07

Scalability Disasters Are More Common Than Ever

• Lost customers• Lost revenues• Brand damage

Users Load Balancer

Micro-Blogging (ala Twitter) Example

IIS

Data Base

Application

Publish Service

Read Service

IIS

Application

Publish Service

Read Service

Reader/Publisher Service

namespace MicroBlog.Services{ public interface IReaderService {

ICollection<Post> GetUserPosts(String userID);

ICollection<Post> GetUserPosts(String userID, DateTime fromDate); }}

namespace MicroBlog.Services{ public interface IPublisherService {

void PublishPost(Post post); }}

Users

Load Balancer

What happens on success

IIS

Data Base

Application

Publish Service

Read Service

IIS

Application

Publish Service

Read Service

IIS

IIS

IIS

IIS

Application

Publish Service

Read Service

Application

Publish Service

Read Service

The database becomes the bottleneck

Reader – Database Implementation

public ICollection<Post> GetUserPosts(string userID, DateTime fromDate) {

// Create command:IDbCommand dbCommand =

_dbConnection.CreateCommand();dbCommand.CommandText = String.Format(

"SELECT * FROM Post WHERE UserID='{0}' AND PostedOn > {1}",userID, fromDate);

// Execute command:IDataReader dataReader = dbCommand.ExecuteReader();

// Translate results from db records to .NET objects:List<Post> result = ReadPostsFromDataReader(dataReader);

// Return results:return result;

}

Users Load Balancer

Step I – Remove DB Bottlenecks with Caching

IIS Data Base

Application

Publish Service

Read Service

Cache Service

• Reduce I/O bottlenecks – less DB access

• In-Memory caching• Reduced Network hops (if in-

process)• Suitable for read-mostly apps

Reader – Space Implementation

public ICollection<Post> 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;

}

Users Load Balancer

Step II – Linear Scalability: Partitioning and Collocation

IIS Data Base

Writer

ReaderSpace

Writer

ReaderSpace

Writer

ReaderSpace

Writer

ReaderSpace

Writer

ReaderSpace

IIS

IIS

IIS

PosterLoad

Balancer

Post Life Cycle

WriterReader

SpaceIIS

Writer Client

ReaderClient

Post.NEW

Post.VALID

Reader

Writer Client

public class SpacePublisherService : IPublisherService{ private readonly ISpaceProxy _spaceProxy;

public void PublishPost(Post post) {

this._spaceProxy.Write(post); }}

Event 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;}

PosterLoad

Balancer

Read Life Cycle

WriterReader

SpaceIIS

Writer Client

ReaderClient

Post

Reader

PostPost

Users Load Balancer

Step II – Linear Scalability: Partitioning and Collocation

IIS Data Base

Writer

ReaderSpace

Writer

ReaderSpace

Writer

ReaderSpace

Writer

ReaderSpace

Writer

ReaderSpace

IIS

IIS

IIS• Collocation – write/read within the same process• Partitioning and Content-Based Routing• Async Writes to the Database

Users Load Balancer

Step III – Dynamic Scalability

IIS Data Base

Writer

ReaderSpace

Writer

ReaderSpace

Writer

ReaderSpace

IIS

MonitorProvision

• SLA Driven Policies• Dynamic Scalability• Self healing

Space 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

Questions?

GigaSpaces Home Page:GigaSpaces Home Page:http://www.gigaspaces.com/http://www.gigaspaces.com/

GigaSpaces XAP Product Overview:GigaSpaces XAP Product Overview:http://www.gigaspaces.com/wiki/display/XAP7/Concepts http://www.gigaspaces.com/wiki/display/XAP7/Concepts

GigaSpaces XAP for the Cloud: GigaSpaces XAP for the Cloud: http://www.gigaspaces.com/cloudhttp://www.gigaspaces.com/cloud