250 likes | 335 Views
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
E N D
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-effectivealternative
The typical scenario… Michael Jackson Tickets are on Sale! Your Application
Solution: Linear and Dynamic Scalability Linear Dynamic Scalability
Traditional 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
Peak loads are unpredictable Constant transaction, data and user growth Volatile and unpredictable loads
Scalability Disasters Are More Common Than Ever • Lost customers • Lost revenues • Brand damage
Micro-Blogging (ala Twitter) Example Application Application Read Service Read Service IIS Publish Service Publish Service Data Base Users Load Balancer IIS
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); } }
What happens on success Users Application Application Application Application Read Service Read Service Read Service Read Service The database becomes the bottleneck IIS IIS Publish Service Publish Service Publish Service Publish Service Data Base Load Balancer IIS IIS IIS IIS
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; }
Step 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 Application Read Service Publish Service Users Load Balancer Data Base Cache Service IIS
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; }
Step II – Linear Scalability: Partitioning and Collocation IIS Users Load Balancer Data Base IIS Space Space Space Space Space Reader Reader Reader Reader Reader IIS Writer Writer Writer Writer Writer IIS
Post Life Cycle Reader Writer Poster Load Balancer Post.NEW IIS ReaderClient Post.VALID Space Writer Client 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; }
Read Life Cycle Reader Writer Poster Load Balancer IIS ReaderClient Space Writer Client Post Post Post Reader
Step II – Linear Scalability: Partitioning and Collocation IIS Users Load Balancer Data Base IIS Space Space Space Space Space Reader Reader Reader Reader Reader IIS Writer Writer Writer Writer Writer • Collocation – write/read within the same process • Partitioning and Content-Based Routing • Async Writes to the Database IIS
Step III – Dynamic Scalability Monitor Provision Users Load Balancer Data Base IIS Space Space Space Reader Reader Reader IIS Writer Writer Writer • SLA Driven Policies • Dynamic Scalability • Self healing
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 Space Based Architecture Values
GigaSpaces Home Page:http://www.gigaspaces.com/ GigaSpaces XAP Product Overview: http://www.gigaspaces.com/wiki/display/XAP7/Concepts GigaSpaces XAP for the Cloud: http://www.gigaspaces.com/cloud