SlideShare a Scribd company logo
Scaling ASP.NET websites
from thousands to millions
of users
Lessons learnt from scaling Web 2.0 apps to millions of
users


Omar AL Zabir
Chief Architect, SaaS Platform, BT
omaralzabir.com
omaralzabir@gmail.com
Twitter.com/omaralzabir


Book “Building Web 2.0 portal using ASP.NET 3.5” from O‟Reilly
How to blow up a website

     Get some super fast fiber broadband connection.
     Run this on couple of quad core desktops:


for (int j = 0; j < 100; j ++)
{
  for (int i = 0; i < 100; i ++)
  {
    var client = new WebClient();
    client.DownloadStringAsync(
        new Uri("http://www.microsoft.com/MISReport.aspx");
  }
  Thread.Sleep(500);
}
Prevent App Level DOS attack

 Application Level DOS attacks are attempts to hit
  your expensive pages too frequently so that you
  have 100% CPU and your site goes down. For ex,
  hitting some expensive Report page continuously.
 You can run out of ASP.NET Threads and stop
  responding completely to any request.
 I‟m not talking about Network level DOS attacks
  like TCP SYN flood or DDOS attacks that hardware
  firewalls can prevent.
 Firewalls don‟t block legitimate requests.
Prevent App level DOS attacks
 Protect only expensive pages. Pages that are unlikely to
  get hit too many times within a short duration.
 Build a HttpModule and hook on OnInit event.
 Store which IP is making how many number of hits in
  last 10 minutes. Store the table in some in-memory
  cache.
 If the threshold has exceeded, stop responding to that
  IP. Call Response.End()
 Solution is here:
  http://tinyurl.com/omarDOS

   IP         Hits in last 10 mins
   128.0.0.1 500
   128.0.0.2 345

Recommended for you

Robotic Automation Process (RPA) Brochure - By Matrix-IFS
Robotic Automation Process (RPA) Brochure - By Matrix-IFSRobotic Automation Process (RPA) Brochure - By Matrix-IFS
Robotic Automation Process (RPA) Brochure - By Matrix-IFS

The RPA brochure covers the challenges & benefits of RPA as well as Matrix-IFS' methodology for RPA implementation.

rpaamlfraud prevention
Aws101
Aws101Aws101
Aws101

The document summarizes an AWS user group presentation by Shaimaa Esmaeil on AWS101. The presentation introduced cloud computing concepts, AWS global infrastructure and services, and demonstrated EC2 and S3. It discussed on-premises vs cloud, cloud models (IaaS, PaaS, SaaS), AWS regions and availability zones. It provided overviews of EC2 instances, AMIs, types, EBS, security groups and S3 buckets and objects. Useful training and practice exam resources were also shared.

aws riyadh user group
Building .NET Microservices
Building .NET MicroservicesBuilding .NET Microservices
Building .NET Microservices

SpringOne Platform 2016 Speakers: Kevin Hoffman; Advisory Solutions Architect, Pivotal & Chris Umbel; Advisory Architect, Pivotal With the advent of ASP.NET Core, developers can now build cross-platform microservices in .NET. We can build services on the Mac, Windows, or Linux and deploy anywhere--most importantly to the cloud. In this session we'll talk about Cloud Native .NET, building .NET microservices, and deploying them to the cloud. We'll build services that participate in a robust ecosystem by consuming OSS servers such as Spring Cloud Configuration Server and Eureka. We'll also show how these .NET microservices can take advantage of circuit breakers and be automatically deployed to the cloud via CI/CD pipelines.

springone platformspringone platform 2016
ASP.NET ProcessModel Optimization
 ASP.NET ProcessModel Defaults
    maxWorkerThreads = 20
    maxIOThreads = 20
    memoryLimit = 60
 Nowadays, servers are way too
  powerful. You don‟t need to be
  conservative.
 Change default process model
  setting in machine.config to make
  best use of CPU power.
ASP.NET Pipeline Optimization

 Default ASP.NET Pipeline has several components that intercept
  each and every request. Thus they add extra processing overhead
  on every request.
 Multiply the overhead by hundreds of requests per second – you
  get a significant overhead.
ASP.NET Pipeline Optimization
 Remove what you don‟t need.
 If you are using Forms Authentication, SQL Server
  storage, no web.config based role based permission then
  you can remove most of them:
Prevent large ASP.NET cookies on
static content
 Each and every request, even static files, get the
  ASP.NET cookies sent.
 517 bytes of worthless data per request.
 Avg pages have 40 resources. 40 x 517 = 20 KB.
 1M page view = 20 GB of data upload to server.

Cookie:
.DBANON=w3kYczsH8Wvzs6MgryS4JYEF0N-8ZR6aLRSTU9KwVaGa
ydD6WwUHD7X9tN8vBgjgzKf3r3SJHusTYFjU85yYfnunyCeuExcZs8
95JK9Fk1HS68ksGwm3QpxnRZvpDBAfJKEUKee2OTlND0gi43qwwtI
PLeY1; ASP.NET_SessionId=bmnbp155wilotk45gjhitoqg; .DBAUTH
12=2A848A8C200CB0E8E05C6EBA8059A0DBA228FC5F6EDD2940
1C249D237812344C15B3C5C57D6B776037FAA8F14017880E57B
DC14A7963C58B0A0B30229AF0123A6DF56601D814E75525E7DC
A9AD4A0EF200832B39A1F35A5111092F0805B0A8CD3D2FD5E3A
B6176893D86AFBEB68F7EA42BE61E89537DEAA3279F3B576D0C
44BA00B9FA1D9DD3EE985F37B0A5A134ADC0EA9C548D

Recommended for you

Auto scaling
Auto scalingAuto scaling
Auto scaling

Auto Scaling allows automatically scaling Amazon EC2 capacity up or down based on user-defined policies, schedules, and health checks. This helps maintain application availability and allows scaling capacity up during demand spikes and reducing it during low traffic periods to optimize costs. The document discusses how Auto Scaling works, its benefits over traditional scaling methods in maintaining performance and reducing costs, and provides examples of common Auto Scaling APIs for creating, describing, and managing Auto Scaling groups, launch configurations, and triggers.

auto-scalingamazoncloud-computing
Module 5: AWS Elasticity and Management Tools - AWSome Day Online Conference
Module 5: AWS Elasticity and Management Tools - AWSome Day Online Conference Module 5: AWS Elasticity and Management Tools - AWSome Day Online Conference
Module 5: AWS Elasticity and Management Tools - AWSome Day Online Conference

Module 5: AWS Elasticity and Management Tools This module will cover: - Auto Scaling concepts - Elastic Load Balancing concepts - AWS Management tools including CloudWatch

awscloudcloud computing
AWS re:Invent 2016: Workshop: Using the Database Migration Service (DMS) for ...
AWS re:Invent 2016: Workshop: Using the Database Migration Service (DMS) for ...AWS re:Invent 2016: Workshop: Using the Database Migration Service (DMS) for ...
AWS re:Invent 2016: Workshop: Using the Database Migration Service (DMS) for ...

It can help you do much more. You can use DMS to consolidate multiple databases into a single database or split a single database into multiple databases. You can also use DMS for data distribution to multiple systems. For both of these use cases your source database can be outside of AWS (on premises) or in AWS (EC2 or RDS). DMS can also be used for near real-time replication of data. Replication can be done to one or more targets within AWS, in the same region or across regions. You can also replicate data from databases within AWS to databases outside of AWS. In this session we will discuss all these usage patterns and help you try them out yourselves. Prerequisites: You should have good database knowledge and at least some experience with Amazon RDS or Amazon Aurora. Participants should have an AWS account established and available for use during the workshop. Please bring your own laptop.

awsreinvent2016cloud
Prevent ASP.NET cookies on static
content
 Setup a new website in IIS, map to the same code folder.
 Map static.yoursite.com host header to that website.
 Prefix all css, js, image links with http://static.yoursite.com/
 Add a Global.asax‟s EndResponse event on the new website.
 HttpContext context = HttpContext.Current;
 if (context.Request.Url.Host == “static.yoursite.com”)
 {
       List<string> cookiesToClear = new List<string>();
       foreach (string cookieName in context.Request.Cookies)
       {
         HttpCookie cookie =
       context.Request.Cookies[cookieName];
         cookiesToClear.Add(cookie.Name);
       }
       foreach (string name in cookiesToClear)
       {
         HttpCookie cookie = new HttpCookie(name,
       string.Empty);
         cookie.Expires = DateTime.Today.AddYears(-1);
         context.Response.Cookies.Set(cookie);
System.net optimization

 If you are using HttpWebRequest or WebClient or any
  other TCP/IP operation, increase the max connection
  limit.
 Default is 2 per IP.
 WCF service calls are limited by this setting.
 Unless you suspect rogue clients, set some reasonably
  high number on webservers, but moderate number on
  desktop clients.
System.net default setting is
suboptimal




                          Bottleneck




      Max 2 concurrent calls
ASP.NET Profile Provider

 Anonymous Provider creates one anonymous user in
  database on every first hit to Profile object‟s Custom
  properties:




 The SP aspnet_Profile_GetProperties gets called when
  you access Profile object for first time in a request. And
  this SP is slooooooooow!

Recommended for you

Cloud Enablement through AWS Learning Paths
Cloud Enablement through AWS Learning PathsCloud Enablement through AWS Learning Paths
Cloud Enablement through AWS Learning Paths

The document discusses AWS cloud enablement through training paths at ABN AMRO Bank. It outlines a 5 phase training approach including cloud awareness, foundational technical training, certification preparation, and advanced/specialty courses. It provides an example of ABN AMRO's implementation including delivering training at scale through a combination of online and classroom formats. Key lessons learned include making certification mandatory, using training partners, and measuring business objectives. The document argues cloud skills training can help organizations reduce costs, increase performance, and drive business agility through economic and talent recruitment benefits.

amsterdam-summit-2019
REST API
REST APIREST API
REST API

Mobile Computing & Application Very easy to presentation of REST API REST API very important topics

belal khan
OOW16 - Oracle Enterprise Manager 13c Cloud Control for Managing Oracle E-Bus...
OOW16 - Oracle Enterprise Manager 13c Cloud Control for Managing Oracle E-Bus...OOW16 - Oracle Enterprise Manager 13c Cloud Control for Managing Oracle E-Bus...
OOW16 - Oracle Enterprise Manager 13c Cloud Control for Managing Oracle E-Bus...

Oracle Application Management Suite for Oracle E-Business Suite delivers capabilities to facilitate management of Oracle E-Business Suite environments running in the Oracle Cloud and on-premises using a single pane of glass. Learn about key new features provided in the latest release available with Oracle Enterprise Manager 13c. Features covered include deploying patches and customization across all environments, comparing configurations between instances, provisioning a new instance to the Oracle Cloud, migrating an existing instance to the cloud, enforcing compliance standards, and automated cloning.

ASP.NET Profile Provider
 The slow SP that gets fired when you access custom Profile
  properties:


CREATE PROCEDURE [dbo].[    aspnet_Profile_GetProperties]
        @ApplicationName      nvarchar(256), @UserId …
AS
BEGIN

      DECLARE @ApplicationId uniqueidentifier
      SELECT @ApplicationId = NULL
      SELECT @ApplicationId = ApplicationId
             FROM dbo.aspnet_Applications
                 WHERE LOWER(@ApplicationName) = LoweredApplicationName

…
…
…
      IF (@@ROWCOUNT > 0)
      BEGIN
          UPDATE dbo.aspnet_Users
         SET LastActivityDate=@CurrentTimeUtc
         WHERE UserId = @UserId
      END
END
ASP.NET Profile Provider

 The slow SP‟s execution plan
ASP.NET Profile Provider
 Don‟t update LastActivityDate when Profile object is
  loaded. Do it only when Profile object is updated.
 Update once every hour or so. If LastActivityDate <
  DateTime.Now.AddHours(-1) then update. No need to do
  per request or too frequently.
 Hard code the Application ID to avoid one lookup inside
  the SP.
 tinyurl.com/omarGetProp
ASP.NET Membership
   ASP.NET Membership Provider Stored Procs use default
    transaction isolation level, which is Serializable.

   Transaction (Process ID ##) was deadlocked on lock resources
   with another process and has been chosen as the deadlock
   victim. Rerun the transaction.
   Timeout Expired. The Timeout Period Elapsed Prior To
   Completion Of The Operation Or The Server Is Not Responding.


ALTER PROCEDURE [dbo].[aspnet_Profile_GetProperties]
@ApplicationName nvarchar(256),
@UserName nvarchar(256),
@CurrentTimeUtc datetime
AS
BEGIN

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

Recommended for you

Amazon Relational Database Service (Amazon RDS)
Amazon Relational Database Service (Amazon RDS)Amazon Relational Database Service (Amazon RDS)
Amazon Relational Database Service (Amazon RDS)

Amazon RDS allows you to launch an optimally configured, secure and highly available database with just a few clicks. It provides cost-efficient and resizable capacity while managing time-consuming database administration tasks, freeing you to focus on your applications and business.

aws-loft-dublincloudcloud computing
Best Practices for Getting Started with AWS
Best Practices for Getting Started with AWSBest Practices for Getting Started with AWS
Best Practices for Getting Started with AWS

Getting started with Amazon Web Services (AWS) is fast and simple. The webinar based on this presentation outlined best practice guidance from AWS customers and the Amazon Web Services team, helping you launch your projects in AWS Cloud rapidly and ensure your applications are simple to manage, resilient and cost effective. This webinar also explores how to set up accounts, use consolidated billing and how to securely control access through AWS Identity and Access Management (IAM). Topics covered in this presentation include: • Understand the best practices for getting started in the AWS Cloud • Learn to build resilient, reliable, cost effective applications • Learn more about secure control and access to AWS for your users • Discover how to structure your AWS accounts • Hear more about cost management, instance bootstrapping and the use of availability zones You can see a recording of this webinar on YouTube here: http://youtu.be/T64qFcyTGAU

rdsec2aws
Presentation implementing oracle asm successfully
Presentation    implementing oracle asm successfullyPresentation    implementing oracle asm successfully
Presentation implementing oracle asm successfully

Download & Share Technology Presentations http://goo.gl/k80oY0 Student Guide & Best http://goo.gl/6OkI77

ASP.NET Membership Query
 Common queries that brings down hell:
    Select * from aspnet_users where UserName = „blabla‟
    Select * from aspnet_membership where Email =
     “someone@somewhere.com”
 What‟s wrong with these queries?
ASP.NET Membership Queries

 Let's look at the indexes:
 Table: aspnet_users
     Clustered Index = ApplicationID, LoweredUserName
     NonClustered Index = ApplicationID, LastActivityDate
     Primary Key = UserID
 Table: aspnet_membership
     Clustered Index = ApplicationID, LoweredEmail
     NonClustered = UserID
 Table: aspnet_Profile
     Clustered Index = UserID


 DO NOT use Email or UserName fields in WHERE clause. They are not
  part of the index instead LoweredUserName and LoweredEmail fields
  are in conjunction with ApplicationID field. All queries must have
  ApplicationID in the WHERE clause.
A love story

 .NET 3.0 was released, woohoo!
WCF!
Lambda Expressions!!
Linq to SQL!!!
 Upgraded to .NET 3.0, top to bottom.
 Major deployment over the weekend.
 Monday 9 AM, peak traffic.
 No response from site.
~100% on all web servers

Recommended for you

REST-API introduction for developers
REST-API introduction for developersREST-API introduction for developers
REST-API introduction for developers

Simple REST-API overview for developers. An newer version is here: https://www.slideshare.net/patricksavalle/super-simple-introduction-to-restapis-2nd-version-127968966

rest api software http protocol interface
Launch AWS Faster using Automated Landing Zones - AWS Online Tech Talks
Launch AWS Faster using Automated Landing Zones - AWS Online Tech TalksLaunch AWS Faster using Automated Landing Zones - AWS Online Tech Talks
Launch AWS Faster using Automated Landing Zones - AWS Online Tech Talks

Learning Objectives: - Learn about the AWS best practice recommendations for setting up your environment - Learn how the automated AWS Landing Zone solution can set up a baseline environment in just a few hours - Learn how you can extend the AWS Landing Zone to meet your organization's requirements

aws landing zoneautomated landing zonegetting started
Storage and Alfresco
Storage and AlfrescoStorage and Alfresco
Storage and Alfresco

This document provides an overview of Storage Foundation and Alfresco solutions. It discusses hardware storage concepts including drive types, interfaces, and RAID. It also covers Alfresco storage-related solutions such as the S3 connector, XAM connector, content store selector, and replication capabilities. Partnership solutions from Xenit, Star Storage, and community solutions are also mentioned. The document concludes with best practices around content store, indexes, logs, and backup/recovery.

alfrescostoragecluster
Linq to SQL is not suitable for high
volume web applications
 Linq to SQL is not optimized for web application.
 No disconnected entity support.
 Entities are not serializable.
 Linq to sql expressions consume high CPU when
  compiled to SQL.

var query = from widget in dc.Widgets
where widget.ID == id && widget.PageID == pageId
select widget;

var widget = query.SingleOrDefault();
How bad Linq to SQL is?




Source: JD Conley‟s blog
Fixing Linq to SQL
 Convert all queries to Compiled Queries.
 tinyurl.com/omarLINQ
Linq to SQL transaction deadlocks
       Large table, high read and medium write, causes query
        timeouts, high locks, transaction deadlock because of
        SERIALIZATION isolation level.

        Transaction (Process ID ##) was deadlocked on lock resources
        with another process and has been chosen as the deadlock
        victim. Rerun the transaction.
        Timeout Expired. The Timeout Period Elapsed Prior To
        Completion Of The Operation Or The Server Is Not Responding.
using (var db = new YourDataContext2())
{
  db.Connection.Open();
  db.ExecuteCommand("SET TRANSACTION ISOLATION LEVEL READ
UNCOMMITTED;");

    var user = db.aspnet_Users.First();
    var pages = user.Pages.ToList();
}

Recommended for you

Principles of microservices XP Days Ukraine
Principles of microservices   XP Days UkrainePrinciples of microservices   XP Days Ukraine
Principles of microservices XP Days Ukraine

The document outlines principles of microservices, including modeling services around business domains, having a culture of automation, hiding implementation details, decentralizing systems, isolating failures, deploying independently, making systems highly observable, and other principles. The presentation provides examples and discusses strategic goals and architectural practices for designing fine-grained microservice systems.

principlesmicroservicessoa
Web services SOAP
Web services SOAPWeb services SOAP
Web services SOAP

Web services allow for integration both within and between organizations through standardized XML messaging over the internet. The core technologies that enable web services are SOAP, which defines a standard messaging protocol, WSDL, which describes service interfaces, and UDDI, which allows services to be published and discovered. SOAP uses XML for flexible, self-describing messages and takes advantage of XML features like namespaces and schemas. It defines an envelope, header and body structure. Common uses of web services include processing purchase orders, answering inquiries, and processing shipment requests across organizational boundaries without tight coupling between partners.

10 performance and scalability secrets of ASP.NET websites
10 performance and scalability secrets of ASP.NET websites10 performance and scalability secrets of ASP.NET websites
10 performance and scalability secrets of ASP.NET websites

1) ASP.NET requires optimizations at the code, database, and configuration levels to scale to millions of hits out of the box. Common optimizations include tweaking process model settings, removing unnecessary pipeline components, and using compiled Linq queries. 2) Issues like application-level DOS attacks, slow profile provider stored procedures, and Linq to SQL performance problems can be addressed to improve scalability. Using a CDN can also help offload static content delivery. 3) Database queries must consider index usage and transaction isolation levels to prevent timeouts and deadlocks under high load.

asp.netperformanceweb 2.0
Linq to SQL transaction deadlocks
  Connection does not close!
  Bug in Data Context code.
  Solution is to override the Dispose.

class YourDataContext2 : YourDataContext, IDisposable {
 public new void Dispose() {
   if (base.Connection != null)
    if (base.Connection.State != System.Data.ConnectionState.Closed) {
       base.Connection.Close();
       base.Connection.Dispose();
    }
   base.Dispose();
 }
}
Content Delivery Network (CDN)
 CDN cache and deliver content from their servers that
  are closest to users‟ computers. The closer servers are
  to end user, the shorter roundtrip time for every request.
  For ex, Akamai has servers almost every city in the
  world.
 Content from CDN nodes get served faster with lower
  latency than coming from your servers.
 CDN Nodes have better caching and compression
  algorithms.
 CDN nodes can offload your server and network from
  delivering static files. Thus better throughput for
  dynamic content.
Content Delivery Network


              0.7
              sec


 Washington, DC

                       2.2
                       sec

                           Australia
Without CDN




              www.yoursite.com

Recommended for you

Tips and Tricks For Faster Asp.NET and MVC Applications
Tips and Tricks For Faster Asp.NET and MVC ApplicationsTips and Tricks For Faster Asp.NET and MVC Applications
Tips and Tricks For Faster Asp.NET and MVC Applications

These are the useful tips and tricks for asp.net applications's performance .These tips are suggestive not the benchmark .

asp.net
Play Framework: async I/O with Java and Scala
Play Framework: async I/O with Java and ScalaPlay Framework: async I/O with Java and Scala
Play Framework: async I/O with Java and Scala

This document discusses asynchronous I/O in Java and Scala using the Play Framework. It describes how LinkedIn uses a service-oriented architecture with hundreds of services making requests to each other. It then covers how Play supports non-blocking I/O using asynchronous code, promises, and futures to allow parallel requests without blocking threads. Key points covered include using map and flatMap to transform promises and futures, handling errors and timeouts, and the benefits of non-blocking I/O for scalability.

play frameworkjavalinkedin
PPT
PPTPPT
PPT

The document provides an overview of developing a 3-tier web application using MySQL, JavaServer Pages (JSP), and Apache Tomcat. It discusses the architecture of a 3-tier system with separate data, application, and presentation tiers. It also provides information on using MySQL for the database tier, JSP and servlets for the application tier, and HTML/JSP for the presentation tier. The document gives examples of using MySQL commands and JSP tags and objects.

mysql
How CDN works

 static.yoursite.com




                       www.yoursite.com
Two types of CDN

 Static – you upload the files to CDN and
  they give you an URL. E.g.
  yoursite.cachefly.net/logo.gif
 Dynamic – Host your dynamic application
  behind the CDN. For ex, Edgecast and
  Panther Express.
   Very cheap - $0.2/GB
How Dynamic CDN works




                        www.yoursite.com
How Dynamic CDN works




                          www.yoursite.com




                        Static content
                        cached,
                        Compressed
                        automatically

Recommended for you

ASP.NET MVC Performance
ASP.NET MVC PerformanceASP.NET MVC Performance
ASP.NET MVC Performance

1. The document discusses various optimizations that can be made to an ASP.NET MVC application to improve performance, including compiled LINQ queries, URL caching, and data caching. 2. Benchmark results show that optimizing partial view rendering, LINQ queries, and URL generation improved performance from 8 requests/second to 61.5 requests/second. Additional caching of URLs, statistics, and content improved performance to over 400 requests/second. 3. Turning off ASP.NET debug mode also provided a significant performance boost, showing the importance of running production sites in release mode.

optimizationlinqsqlperformance
SQL Injection
SQL InjectionSQL Injection
SQL Injection

This document discusses SQL injection and the sqlmap tool for automating the process of detecting and exploiting SQL injection flaws. Some key points: - SQL is a programming language used to manage data in relational database management systems. SQL injection occurs when malicious SQL code is inserted into an entry field for execution, potentially enabling control of the entire database. - Sqlmap automates the process of detecting and exploiting SQL injection vulnerabilities. It has capabilities like database fingerprinting, data extraction, accessing the underlying file system, and executing commands on the operating system via SQL injections. - The tool can detect injectable parameters, generate automatic payloads to retrieve data, fingerprint the database management system, and provide an interactive SQL shell

How to build a Citrix infrastructure on AWS
How to build a Citrix infrastructure on AWSHow to build a Citrix infrastructure on AWS
How to build a Citrix infrastructure on AWS

This document summarizes Denis Gundarev's presentation on how to build a Citrix infrastructure in the Amazon Web Services (AWS) cloud. The presentation covered: - An overview of AWS services like EC2, S3, VPC, RDS, and how to monitor with CloudWatch - Common Citrix deployment architectures on AWS like using NetScaler and AutoScaling - Limitations of running Citrix on AWS like lack of capacity management and client OS support - Guidelines for deploying Citrix on AWS like starting simple, proper sizing, and careful VPC planning

xenappcloudcitrix
How Dynamic CDN works




                          www.yoursite.com




                        Static content
                        cached,
                        Compressed
                        automatically
13 disasters for production websites
1.    Faulty hard drive supplied by supplier, data corruption within weeks.
2.    Controller malfunctions and corrupts all disks in the same controller.
3.    RAID malfunction.
4.    CPU overheated and burned out.
5.    Firewall went down.
6.    Remote Desktop stopped working after a patch installation.
7.    Remote Desktop max connection exceeded. Cannot login anymore to
      servers.
8.    Database got corrupted while we were moving the production
      database from one server to another over the network.
9.    One developer deleted the production database accidentally while
      doing routine work.
10.   Support crew at hosting service formatted our running production
      server instead of a corrupted server that we asked to format.
11.   Windows got corrupted and was not working until we reinstalled.
12.   DNS goes down. Don’t get domain from GoDaddy.
13.   Internet backbone goes down in different part of the world.

                                 http://tinyurl.com/omar13
Conclusion

 ASP.NET out of the box, does not scale for millions of
  hits.
 Must make the hacks at code, database and
  configuration level to get it to scale.
 That‟s reality for any technology, not ASP.NET specific.

More Related Content

What's hot

(DEV203) Amazon API Gateway & AWS Lambda to Build Secure APIs
(DEV203) Amazon API Gateway & AWS Lambda to Build Secure APIs(DEV203) Amazon API Gateway & AWS Lambda to Build Secure APIs
(DEV203) Amazon API Gateway & AWS Lambda to Build Secure APIs
Amazon Web Services
 
AWS Introduction
AWS IntroductionAWS Introduction
AWS Introduction
arconsis
 
REST-API design patterns
REST-API design patternsREST-API design patterns
REST-API design patterns
Patrick Savalle
 
Robotic Automation Process (RPA) Brochure - By Matrix-IFS
Robotic Automation Process (RPA) Brochure - By Matrix-IFSRobotic Automation Process (RPA) Brochure - By Matrix-IFS
Robotic Automation Process (RPA) Brochure - By Matrix-IFS
Idan Tohami
 
Aws101
Aws101Aws101
Building .NET Microservices
Building .NET MicroservicesBuilding .NET Microservices
Building .NET Microservices
VMware Tanzu
 
Auto scaling
Auto scalingAuto scaling
Auto scaling
Akash Agrawal
 
Module 5: AWS Elasticity and Management Tools - AWSome Day Online Conference
Module 5: AWS Elasticity and Management Tools - AWSome Day Online Conference Module 5: AWS Elasticity and Management Tools - AWSome Day Online Conference
Module 5: AWS Elasticity and Management Tools - AWSome Day Online Conference
Amazon Web Services
 
AWS re:Invent 2016: Workshop: Using the Database Migration Service (DMS) for ...
AWS re:Invent 2016: Workshop: Using the Database Migration Service (DMS) for ...AWS re:Invent 2016: Workshop: Using the Database Migration Service (DMS) for ...
AWS re:Invent 2016: Workshop: Using the Database Migration Service (DMS) for ...
Amazon Web Services
 
Cloud Enablement through AWS Learning Paths
Cloud Enablement through AWS Learning PathsCloud Enablement through AWS Learning Paths
Cloud Enablement through AWS Learning Paths
Amazon Web Services
 
REST API
REST APIREST API
REST API
Tofazzal Ahmed
 
OOW16 - Oracle Enterprise Manager 13c Cloud Control for Managing Oracle E-Bus...
OOW16 - Oracle Enterprise Manager 13c Cloud Control for Managing Oracle E-Bus...OOW16 - Oracle Enterprise Manager 13c Cloud Control for Managing Oracle E-Bus...
OOW16 - Oracle Enterprise Manager 13c Cloud Control for Managing Oracle E-Bus...
vasuballa
 
Amazon Relational Database Service (Amazon RDS)
Amazon Relational Database Service (Amazon RDS)Amazon Relational Database Service (Amazon RDS)
Amazon Relational Database Service (Amazon RDS)
Amazon Web Services
 
Best Practices for Getting Started with AWS
Best Practices for Getting Started with AWSBest Practices for Getting Started with AWS
Best Practices for Getting Started with AWS
Amazon Web Services
 
Presentation implementing oracle asm successfully
Presentation    implementing oracle asm successfullyPresentation    implementing oracle asm successfully
Presentation implementing oracle asm successfully
xKinAnx
 
REST-API introduction for developers
REST-API introduction for developersREST-API introduction for developers
REST-API introduction for developers
Patrick Savalle
 
Launch AWS Faster using Automated Landing Zones - AWS Online Tech Talks
Launch AWS Faster using Automated Landing Zones - AWS Online Tech TalksLaunch AWS Faster using Automated Landing Zones - AWS Online Tech Talks
Launch AWS Faster using Automated Landing Zones - AWS Online Tech Talks
Amazon Web Services
 
Storage and Alfresco
Storage and AlfrescoStorage and Alfresco
Storage and Alfresco
Toni de la Fuente
 
Principles of microservices XP Days Ukraine
Principles of microservices   XP Days UkrainePrinciples of microservices   XP Days Ukraine
Principles of microservices XP Days Ukraine
Sam Newman
 
Web services SOAP
Web services SOAPWeb services SOAP
Web services SOAP
princeirfancivil
 

What's hot (20)

(DEV203) Amazon API Gateway & AWS Lambda to Build Secure APIs
(DEV203) Amazon API Gateway & AWS Lambda to Build Secure APIs(DEV203) Amazon API Gateway & AWS Lambda to Build Secure APIs
(DEV203) Amazon API Gateway & AWS Lambda to Build Secure APIs
 
AWS Introduction
AWS IntroductionAWS Introduction
AWS Introduction
 
REST-API design patterns
REST-API design patternsREST-API design patterns
REST-API design patterns
 
Robotic Automation Process (RPA) Brochure - By Matrix-IFS
Robotic Automation Process (RPA) Brochure - By Matrix-IFSRobotic Automation Process (RPA) Brochure - By Matrix-IFS
Robotic Automation Process (RPA) Brochure - By Matrix-IFS
 
Aws101
Aws101Aws101
Aws101
 
Building .NET Microservices
Building .NET MicroservicesBuilding .NET Microservices
Building .NET Microservices
 
Auto scaling
Auto scalingAuto scaling
Auto scaling
 
Module 5: AWS Elasticity and Management Tools - AWSome Day Online Conference
Module 5: AWS Elasticity and Management Tools - AWSome Day Online Conference Module 5: AWS Elasticity and Management Tools - AWSome Day Online Conference
Module 5: AWS Elasticity and Management Tools - AWSome Day Online Conference
 
AWS re:Invent 2016: Workshop: Using the Database Migration Service (DMS) for ...
AWS re:Invent 2016: Workshop: Using the Database Migration Service (DMS) for ...AWS re:Invent 2016: Workshop: Using the Database Migration Service (DMS) for ...
AWS re:Invent 2016: Workshop: Using the Database Migration Service (DMS) for ...
 
Cloud Enablement through AWS Learning Paths
Cloud Enablement through AWS Learning PathsCloud Enablement through AWS Learning Paths
Cloud Enablement through AWS Learning Paths
 
REST API
REST APIREST API
REST API
 
OOW16 - Oracle Enterprise Manager 13c Cloud Control for Managing Oracle E-Bus...
OOW16 - Oracle Enterprise Manager 13c Cloud Control for Managing Oracle E-Bus...OOW16 - Oracle Enterprise Manager 13c Cloud Control for Managing Oracle E-Bus...
OOW16 - Oracle Enterprise Manager 13c Cloud Control for Managing Oracle E-Bus...
 
Amazon Relational Database Service (Amazon RDS)
Amazon Relational Database Service (Amazon RDS)Amazon Relational Database Service (Amazon RDS)
Amazon Relational Database Service (Amazon RDS)
 
Best Practices for Getting Started with AWS
Best Practices for Getting Started with AWSBest Practices for Getting Started with AWS
Best Practices for Getting Started with AWS
 
Presentation implementing oracle asm successfully
Presentation    implementing oracle asm successfullyPresentation    implementing oracle asm successfully
Presentation implementing oracle asm successfully
 
REST-API introduction for developers
REST-API introduction for developersREST-API introduction for developers
REST-API introduction for developers
 
Launch AWS Faster using Automated Landing Zones - AWS Online Tech Talks
Launch AWS Faster using Automated Landing Zones - AWS Online Tech TalksLaunch AWS Faster using Automated Landing Zones - AWS Online Tech Talks
Launch AWS Faster using Automated Landing Zones - AWS Online Tech Talks
 
Storage and Alfresco
Storage and AlfrescoStorage and Alfresco
Storage and Alfresco
 
Principles of microservices XP Days Ukraine
Principles of microservices   XP Days UkrainePrinciples of microservices   XP Days Ukraine
Principles of microservices XP Days Ukraine
 
Web services SOAP
Web services SOAPWeb services SOAP
Web services SOAP
 

Similar to Scaling asp.net websites to millions of users

10 performance and scalability secrets of ASP.NET websites
10 performance and scalability secrets of ASP.NET websites10 performance and scalability secrets of ASP.NET websites
10 performance and scalability secrets of ASP.NET websites
oazabir
 
Tips and Tricks For Faster Asp.NET and MVC Applications
Tips and Tricks For Faster Asp.NET and MVC ApplicationsTips and Tricks For Faster Asp.NET and MVC Applications
Tips and Tricks For Faster Asp.NET and MVC Applications
Sarvesh Kushwaha
 
Play Framework: async I/O with Java and Scala
Play Framework: async I/O with Java and ScalaPlay Framework: async I/O with Java and Scala
Play Framework: async I/O with Java and Scala
Yevgeniy Brikman
 
PPT
PPTPPT
ASP.NET MVC Performance
ASP.NET MVC PerformanceASP.NET MVC Performance
ASP.NET MVC Performance
rudib
 
SQL Injection
SQL InjectionSQL Injection
SQL Injection
Abhinav Nair
 
How to build a Citrix infrastructure on AWS
How to build a Citrix infrastructure on AWSHow to build a Citrix infrastructure on AWS
How to build a Citrix infrastructure on AWS
Denis Gundarev
 
Practical OData
Practical ODataPractical OData
Practical OData
Vagif Abilov
 
Clug 2011 March web server optimisation
Clug 2011 March  web server optimisationClug 2011 March  web server optimisation
Clug 2011 March web server optimisation
grooverdan
 
Web Security
Web SecurityWeb Security
Web Security
Chatree Kunjai
 
Introduce about Nodejs - duyetdev.com
Introduce about Nodejs - duyetdev.comIntroduce about Nodejs - duyetdev.com
Introduce about Nodejs - duyetdev.com
Van-Duyet Le
 
Apache Samza 1.0 - What's New, What's Next
Apache Samza 1.0 - What's New, What's NextApache Samza 1.0 - What's New, What's Next
Apache Samza 1.0 - What's New, What's Next
Prateek Maheshwari
 
Sherlock Homepage (Maarten Balliauw)
Sherlock Homepage (Maarten Balliauw)Sherlock Homepage (Maarten Balliauw)
Sherlock Homepage (Maarten Balliauw)
Visug
 
Sherlock Homepage - A detective story about running large web services (VISUG...
Sherlock Homepage - A detective story about running large web services (VISUG...Sherlock Homepage - A detective story about running large web services (VISUG...
Sherlock Homepage - A detective story about running large web services (VISUG...
Maarten Balliauw
 
AD102 - Break out of the Box
AD102 - Break out of the BoxAD102 - Break out of the Box
AD102 - Break out of the Box
Karl-Henry Martinsson
 
Sherlock Homepage - A detective story about running large web services - WebN...
Sherlock Homepage - A detective story about running large web services - WebN...Sherlock Homepage - A detective story about running large web services - WebN...
Sherlock Homepage - A detective story about running large web services - WebN...
Maarten Balliauw
 
Bt0083 server side programing
Bt0083 server side programing Bt0083 server side programing
Bt0083 server side programing
Techglyphs
 
6 tips for improving ruby performance
6 tips for improving ruby performance6 tips for improving ruby performance
6 tips for improving ruby performance
Engine Yard
 
Sherlock Homepage - A detective story about running large web services - NDC ...
Sherlock Homepage - A detective story about running large web services - NDC ...Sherlock Homepage - A detective story about running large web services - NDC ...
Sherlock Homepage - A detective story about running large web services - NDC ...
Maarten Balliauw
 
C sharp and asp.net interview questions
C sharp and asp.net interview questionsC sharp and asp.net interview questions
C sharp and asp.net interview questions
Akhil Mittal
 

Similar to Scaling asp.net websites to millions of users (20)

10 performance and scalability secrets of ASP.NET websites
10 performance and scalability secrets of ASP.NET websites10 performance and scalability secrets of ASP.NET websites
10 performance and scalability secrets of ASP.NET websites
 
Tips and Tricks For Faster Asp.NET and MVC Applications
Tips and Tricks For Faster Asp.NET and MVC ApplicationsTips and Tricks For Faster Asp.NET and MVC Applications
Tips and Tricks For Faster Asp.NET and MVC Applications
 
Play Framework: async I/O with Java and Scala
Play Framework: async I/O with Java and ScalaPlay Framework: async I/O with Java and Scala
Play Framework: async I/O with Java and Scala
 
PPT
PPTPPT
PPT
 
ASP.NET MVC Performance
ASP.NET MVC PerformanceASP.NET MVC Performance
ASP.NET MVC Performance
 
SQL Injection
SQL InjectionSQL Injection
SQL Injection
 
How to build a Citrix infrastructure on AWS
How to build a Citrix infrastructure on AWSHow to build a Citrix infrastructure on AWS
How to build a Citrix infrastructure on AWS
 
Practical OData
Practical ODataPractical OData
Practical OData
 
Clug 2011 March web server optimisation
Clug 2011 March  web server optimisationClug 2011 March  web server optimisation
Clug 2011 March web server optimisation
 
Web Security
Web SecurityWeb Security
Web Security
 
Introduce about Nodejs - duyetdev.com
Introduce about Nodejs - duyetdev.comIntroduce about Nodejs - duyetdev.com
Introduce about Nodejs - duyetdev.com
 
Apache Samza 1.0 - What's New, What's Next
Apache Samza 1.0 - What's New, What's NextApache Samza 1.0 - What's New, What's Next
Apache Samza 1.0 - What's New, What's Next
 
Sherlock Homepage (Maarten Balliauw)
Sherlock Homepage (Maarten Balliauw)Sherlock Homepage (Maarten Balliauw)
Sherlock Homepage (Maarten Balliauw)
 
Sherlock Homepage - A detective story about running large web services (VISUG...
Sherlock Homepage - A detective story about running large web services (VISUG...Sherlock Homepage - A detective story about running large web services (VISUG...
Sherlock Homepage - A detective story about running large web services (VISUG...
 
AD102 - Break out of the Box
AD102 - Break out of the BoxAD102 - Break out of the Box
AD102 - Break out of the Box
 
Sherlock Homepage - A detective story about running large web services - WebN...
Sherlock Homepage - A detective story about running large web services - WebN...Sherlock Homepage - A detective story about running large web services - WebN...
Sherlock Homepage - A detective story about running large web services - WebN...
 
Bt0083 server side programing
Bt0083 server side programing Bt0083 server side programing
Bt0083 server side programing
 
6 tips for improving ruby performance
6 tips for improving ruby performance6 tips for improving ruby performance
6 tips for improving ruby performance
 
Sherlock Homepage - A detective story about running large web services - NDC ...
Sherlock Homepage - A detective story about running large web services - NDC ...Sherlock Homepage - A detective story about running large web services - NDC ...
Sherlock Homepage - A detective story about running large web services - NDC ...
 
C sharp and asp.net interview questions
C sharp and asp.net interview questionsC sharp and asp.net interview questions
C sharp and asp.net interview questions
 

Recently uploaded

WhatsApp Image 2024-03-27 at 08.19.52_bfd93109.pdf
WhatsApp Image 2024-03-27 at 08.19.52_bfd93109.pdfWhatsApp Image 2024-03-27 at 08.19.52_bfd93109.pdf
WhatsApp Image 2024-03-27 at 08.19.52_bfd93109.pdf
ArgaBisma
 
DealBook of Ukraine: 2024 edition
DealBook of Ukraine: 2024 editionDealBook of Ukraine: 2024 edition
DealBook of Ukraine: 2024 edition
Yevgen Sysoyev
 
Details of description part II: Describing images in practice - Tech Forum 2024
Details of description part II: Describing images in practice - Tech Forum 2024Details of description part II: Describing images in practice - Tech Forum 2024
Details of description part II: Describing images in practice - Tech Forum 2024
BookNet Canada
 
How RPA Help in the Transportation and Logistics Industry.pptx
How RPA Help in the Transportation and Logistics Industry.pptxHow RPA Help in the Transportation and Logistics Industry.pptx
How RPA Help in the Transportation and Logistics Industry.pptx
SynapseIndia
 
[Talk] Moving Beyond Spaghetti Infrastructure [AOTB] 2024-07-04.pdf
[Talk] Moving Beyond Spaghetti Infrastructure [AOTB] 2024-07-04.pdf[Talk] Moving Beyond Spaghetti Infrastructure [AOTB] 2024-07-04.pdf
[Talk] Moving Beyond Spaghetti Infrastructure [AOTB] 2024-07-04.pdf
Kief Morris
 
Implementations of Fused Deposition Modeling in real world
Implementations of Fused Deposition Modeling  in real worldImplementations of Fused Deposition Modeling  in real world
Implementations of Fused Deposition Modeling in real world
Emerging Tech
 
Scaling Connections in PostgreSQL Postgres Bangalore(PGBLR) Meetup-2 - Mydbops
Scaling Connections in PostgreSQL Postgres Bangalore(PGBLR) Meetup-2 - MydbopsScaling Connections in PostgreSQL Postgres Bangalore(PGBLR) Meetup-2 - Mydbops
Scaling Connections in PostgreSQL Postgres Bangalore(PGBLR) Meetup-2 - Mydbops
Mydbops
 
WPRiders Company Presentation Slide Deck
WPRiders Company Presentation Slide DeckWPRiders Company Presentation Slide Deck
WPRiders Company Presentation Slide Deck
Lidia A.
 
Observability For You and Me with OpenTelemetry
Observability For You and Me with OpenTelemetryObservability For You and Me with OpenTelemetry
Observability For You and Me with OpenTelemetry
Eric D. Schabell
 
Manual | Product | Research Presentation
Manual | Product | Research PresentationManual | Product | Research Presentation
Manual | Product | Research Presentation
welrejdoall
 
7 Most Powerful Solar Storms in the History of Earth.pdf
7 Most Powerful Solar Storms in the History of Earth.pdf7 Most Powerful Solar Storms in the History of Earth.pdf
7 Most Powerful Solar Storms in the History of Earth.pdf
Enterprise Wired
 
Coordinate Systems in FME 101 - Webinar Slides
Coordinate Systems in FME 101 - Webinar SlidesCoordinate Systems in FME 101 - Webinar Slides
Coordinate Systems in FME 101 - Webinar Slides
Safe Software
 
Comparison Table of DiskWarrior Alternatives.pdf
Comparison Table of DiskWarrior Alternatives.pdfComparison Table of DiskWarrior Alternatives.pdf
Comparison Table of DiskWarrior Alternatives.pdf
Andrey Yasko
 
20240702 QFM021 Machine Intelligence Reading List June 2024
20240702 QFM021 Machine Intelligence Reading List June 202420240702 QFM021 Machine Intelligence Reading List June 2024
20240702 QFM021 Machine Intelligence Reading List June 2024
Matthew Sinclair
 
BT & Neo4j: Knowledge Graphs for Critical Enterprise Systems.pptx.pdf
BT & Neo4j: Knowledge Graphs for Critical Enterprise Systems.pptx.pdfBT & Neo4j: Knowledge Graphs for Critical Enterprise Systems.pptx.pdf
BT & Neo4j: Knowledge Graphs for Critical Enterprise Systems.pptx.pdf
Neo4j
 
The Increasing Use of the National Research Platform by the CSU Campuses
The Increasing Use of the National Research Platform by the CSU CampusesThe Increasing Use of the National Research Platform by the CSU Campuses
The Increasing Use of the National Research Platform by the CSU Campuses
Larry Smarr
 
Calgary MuleSoft Meetup APM and IDP .pptx
Calgary MuleSoft Meetup APM and IDP .pptxCalgary MuleSoft Meetup APM and IDP .pptx
Calgary MuleSoft Meetup APM and IDP .pptx
ishalveerrandhawa1
 
Password Rotation in 2024 is still Relevant
Password Rotation in 2024 is still RelevantPassword Rotation in 2024 is still Relevant
Password Rotation in 2024 is still Relevant
Bert Blevins
 
BLOCKCHAIN FOR DUMMIES: GUIDEBOOK FOR ALL
BLOCKCHAIN FOR DUMMIES: GUIDEBOOK FOR ALLBLOCKCHAIN FOR DUMMIES: GUIDEBOOK FOR ALL
BLOCKCHAIN FOR DUMMIES: GUIDEBOOK FOR ALL
Liveplex
 
20240702 Présentation Plateforme GenAI.pdf
20240702 Présentation Plateforme GenAI.pdf20240702 Présentation Plateforme GenAI.pdf
20240702 Présentation Plateforme GenAI.pdf
Sally Laouacheria
 

Recently uploaded (20)

WhatsApp Image 2024-03-27 at 08.19.52_bfd93109.pdf
WhatsApp Image 2024-03-27 at 08.19.52_bfd93109.pdfWhatsApp Image 2024-03-27 at 08.19.52_bfd93109.pdf
WhatsApp Image 2024-03-27 at 08.19.52_bfd93109.pdf
 
DealBook of Ukraine: 2024 edition
DealBook of Ukraine: 2024 editionDealBook of Ukraine: 2024 edition
DealBook of Ukraine: 2024 edition
 
Details of description part II: Describing images in practice - Tech Forum 2024
Details of description part II: Describing images in practice - Tech Forum 2024Details of description part II: Describing images in practice - Tech Forum 2024
Details of description part II: Describing images in practice - Tech Forum 2024
 
How RPA Help in the Transportation and Logistics Industry.pptx
How RPA Help in the Transportation and Logistics Industry.pptxHow RPA Help in the Transportation and Logistics Industry.pptx
How RPA Help in the Transportation and Logistics Industry.pptx
 
[Talk] Moving Beyond Spaghetti Infrastructure [AOTB] 2024-07-04.pdf
[Talk] Moving Beyond Spaghetti Infrastructure [AOTB] 2024-07-04.pdf[Talk] Moving Beyond Spaghetti Infrastructure [AOTB] 2024-07-04.pdf
[Talk] Moving Beyond Spaghetti Infrastructure [AOTB] 2024-07-04.pdf
 
Implementations of Fused Deposition Modeling in real world
Implementations of Fused Deposition Modeling  in real worldImplementations of Fused Deposition Modeling  in real world
Implementations of Fused Deposition Modeling in real world
 
Scaling Connections in PostgreSQL Postgres Bangalore(PGBLR) Meetup-2 - Mydbops
Scaling Connections in PostgreSQL Postgres Bangalore(PGBLR) Meetup-2 - MydbopsScaling Connections in PostgreSQL Postgres Bangalore(PGBLR) Meetup-2 - Mydbops
Scaling Connections in PostgreSQL Postgres Bangalore(PGBLR) Meetup-2 - Mydbops
 
WPRiders Company Presentation Slide Deck
WPRiders Company Presentation Slide DeckWPRiders Company Presentation Slide Deck
WPRiders Company Presentation Slide Deck
 
Observability For You and Me with OpenTelemetry
Observability For You and Me with OpenTelemetryObservability For You and Me with OpenTelemetry
Observability For You and Me with OpenTelemetry
 
Manual | Product | Research Presentation
Manual | Product | Research PresentationManual | Product | Research Presentation
Manual | Product | Research Presentation
 
7 Most Powerful Solar Storms in the History of Earth.pdf
7 Most Powerful Solar Storms in the History of Earth.pdf7 Most Powerful Solar Storms in the History of Earth.pdf
7 Most Powerful Solar Storms in the History of Earth.pdf
 
Coordinate Systems in FME 101 - Webinar Slides
Coordinate Systems in FME 101 - Webinar SlidesCoordinate Systems in FME 101 - Webinar Slides
Coordinate Systems in FME 101 - Webinar Slides
 
Comparison Table of DiskWarrior Alternatives.pdf
Comparison Table of DiskWarrior Alternatives.pdfComparison Table of DiskWarrior Alternatives.pdf
Comparison Table of DiskWarrior Alternatives.pdf
 
20240702 QFM021 Machine Intelligence Reading List June 2024
20240702 QFM021 Machine Intelligence Reading List June 202420240702 QFM021 Machine Intelligence Reading List June 2024
20240702 QFM021 Machine Intelligence Reading List June 2024
 
BT & Neo4j: Knowledge Graphs for Critical Enterprise Systems.pptx.pdf
BT & Neo4j: Knowledge Graphs for Critical Enterprise Systems.pptx.pdfBT & Neo4j: Knowledge Graphs for Critical Enterprise Systems.pptx.pdf
BT & Neo4j: Knowledge Graphs for Critical Enterprise Systems.pptx.pdf
 
The Increasing Use of the National Research Platform by the CSU Campuses
The Increasing Use of the National Research Platform by the CSU CampusesThe Increasing Use of the National Research Platform by the CSU Campuses
The Increasing Use of the National Research Platform by the CSU Campuses
 
Calgary MuleSoft Meetup APM and IDP .pptx
Calgary MuleSoft Meetup APM and IDP .pptxCalgary MuleSoft Meetup APM and IDP .pptx
Calgary MuleSoft Meetup APM and IDP .pptx
 
Password Rotation in 2024 is still Relevant
Password Rotation in 2024 is still RelevantPassword Rotation in 2024 is still Relevant
Password Rotation in 2024 is still Relevant
 
BLOCKCHAIN FOR DUMMIES: GUIDEBOOK FOR ALL
BLOCKCHAIN FOR DUMMIES: GUIDEBOOK FOR ALLBLOCKCHAIN FOR DUMMIES: GUIDEBOOK FOR ALL
BLOCKCHAIN FOR DUMMIES: GUIDEBOOK FOR ALL
 
20240702 Présentation Plateforme GenAI.pdf
20240702 Présentation Plateforme GenAI.pdf20240702 Présentation Plateforme GenAI.pdf
20240702 Présentation Plateforme GenAI.pdf
 

Scaling asp.net websites to millions of users

  • 1. Scaling ASP.NET websites from thousands to millions of users Lessons learnt from scaling Web 2.0 apps to millions of users Omar AL Zabir Chief Architect, SaaS Platform, BT omaralzabir.com omaralzabir@gmail.com Twitter.com/omaralzabir Book “Building Web 2.0 portal using ASP.NET 3.5” from O‟Reilly
  • 2. How to blow up a website  Get some super fast fiber broadband connection.  Run this on couple of quad core desktops: for (int j = 0; j < 100; j ++) { for (int i = 0; i < 100; i ++) { var client = new WebClient(); client.DownloadStringAsync( new Uri("http://www.microsoft.com/MISReport.aspx"); } Thread.Sleep(500); }
  • 3. Prevent App Level DOS attack  Application Level DOS attacks are attempts to hit your expensive pages too frequently so that you have 100% CPU and your site goes down. For ex, hitting some expensive Report page continuously.  You can run out of ASP.NET Threads and stop responding completely to any request.  I‟m not talking about Network level DOS attacks like TCP SYN flood or DDOS attacks that hardware firewalls can prevent.  Firewalls don‟t block legitimate requests.
  • 4. Prevent App level DOS attacks  Protect only expensive pages. Pages that are unlikely to get hit too many times within a short duration.  Build a HttpModule and hook on OnInit event.  Store which IP is making how many number of hits in last 10 minutes. Store the table in some in-memory cache.  If the threshold has exceeded, stop responding to that IP. Call Response.End()  Solution is here: http://tinyurl.com/omarDOS IP Hits in last 10 mins 128.0.0.1 500 128.0.0.2 345
  • 5. ASP.NET ProcessModel Optimization  ASP.NET ProcessModel Defaults  maxWorkerThreads = 20  maxIOThreads = 20  memoryLimit = 60  Nowadays, servers are way too powerful. You don‟t need to be conservative.  Change default process model setting in machine.config to make best use of CPU power.
  • 6. ASP.NET Pipeline Optimization  Default ASP.NET Pipeline has several components that intercept each and every request. Thus they add extra processing overhead on every request.  Multiply the overhead by hundreds of requests per second – you get a significant overhead.
  • 7. ASP.NET Pipeline Optimization  Remove what you don‟t need.  If you are using Forms Authentication, SQL Server storage, no web.config based role based permission then you can remove most of them:
  • 8. Prevent large ASP.NET cookies on static content  Each and every request, even static files, get the ASP.NET cookies sent.  517 bytes of worthless data per request.  Avg pages have 40 resources. 40 x 517 = 20 KB.  1M page view = 20 GB of data upload to server. Cookie: .DBANON=w3kYczsH8Wvzs6MgryS4JYEF0N-8ZR6aLRSTU9KwVaGa ydD6WwUHD7X9tN8vBgjgzKf3r3SJHusTYFjU85yYfnunyCeuExcZs8 95JK9Fk1HS68ksGwm3QpxnRZvpDBAfJKEUKee2OTlND0gi43qwwtI PLeY1; ASP.NET_SessionId=bmnbp155wilotk45gjhitoqg; .DBAUTH 12=2A848A8C200CB0E8E05C6EBA8059A0DBA228FC5F6EDD2940 1C249D237812344C15B3C5C57D6B776037FAA8F14017880E57B DC14A7963C58B0A0B30229AF0123A6DF56601D814E75525E7DC A9AD4A0EF200832B39A1F35A5111092F0805B0A8CD3D2FD5E3A B6176893D86AFBEB68F7EA42BE61E89537DEAA3279F3B576D0C 44BA00B9FA1D9DD3EE985F37B0A5A134ADC0EA9C548D
  • 9. Prevent ASP.NET cookies on static content  Setup a new website in IIS, map to the same code folder.  Map static.yoursite.com host header to that website.  Prefix all css, js, image links with http://static.yoursite.com/  Add a Global.asax‟s EndResponse event on the new website. HttpContext context = HttpContext.Current; if (context.Request.Url.Host == “static.yoursite.com”) { List<string> cookiesToClear = new List<string>(); foreach (string cookieName in context.Request.Cookies) { HttpCookie cookie = context.Request.Cookies[cookieName]; cookiesToClear.Add(cookie.Name); } foreach (string name in cookiesToClear) { HttpCookie cookie = new HttpCookie(name, string.Empty); cookie.Expires = DateTime.Today.AddYears(-1); context.Response.Cookies.Set(cookie);
  • 10. System.net optimization  If you are using HttpWebRequest or WebClient or any other TCP/IP operation, increase the max connection limit.  Default is 2 per IP.  WCF service calls are limited by this setting.  Unless you suspect rogue clients, set some reasonably high number on webservers, but moderate number on desktop clients.
  • 11. System.net default setting is suboptimal Bottleneck Max 2 concurrent calls
  • 12. ASP.NET Profile Provider  Anonymous Provider creates one anonymous user in database on every first hit to Profile object‟s Custom properties:  The SP aspnet_Profile_GetProperties gets called when you access Profile object for first time in a request. And this SP is slooooooooow!
  • 13. ASP.NET Profile Provider  The slow SP that gets fired when you access custom Profile properties: CREATE PROCEDURE [dbo].[ aspnet_Profile_GetProperties] @ApplicationName nvarchar(256), @UserId … AS BEGIN DECLARE @ApplicationId uniqueidentifier SELECT @ApplicationId = NULL SELECT @ApplicationId = ApplicationId FROM dbo.aspnet_Applications WHERE LOWER(@ApplicationName) = LoweredApplicationName … … … IF (@@ROWCOUNT > 0) BEGIN UPDATE dbo.aspnet_Users SET LastActivityDate=@CurrentTimeUtc WHERE UserId = @UserId END END
  • 14. ASP.NET Profile Provider  The slow SP‟s execution plan
  • 15. ASP.NET Profile Provider  Don‟t update LastActivityDate when Profile object is loaded. Do it only when Profile object is updated.  Update once every hour or so. If LastActivityDate < DateTime.Now.AddHours(-1) then update. No need to do per request or too frequently.  Hard code the Application ID to avoid one lookup inside the SP.  tinyurl.com/omarGetProp
  • 16. ASP.NET Membership  ASP.NET Membership Provider Stored Procs use default transaction isolation level, which is Serializable. Transaction (Process ID ##) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. Timeout Expired. The Timeout Period Elapsed Prior To Completion Of The Operation Or The Server Is Not Responding. ALTER PROCEDURE [dbo].[aspnet_Profile_GetProperties] @ApplicationName nvarchar(256), @UserName nvarchar(256), @CurrentTimeUtc datetime AS BEGIN SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
  • 17. ASP.NET Membership Query  Common queries that brings down hell:  Select * from aspnet_users where UserName = „blabla‟  Select * from aspnet_membership where Email = “someone@somewhere.com”  What‟s wrong with these queries?
  • 18. ASP.NET Membership Queries  Let's look at the indexes:  Table: aspnet_users  Clustered Index = ApplicationID, LoweredUserName  NonClustered Index = ApplicationID, LastActivityDate  Primary Key = UserID  Table: aspnet_membership  Clustered Index = ApplicationID, LoweredEmail  NonClustered = UserID  Table: aspnet_Profile  Clustered Index = UserID  DO NOT use Email or UserName fields in WHERE clause. They are not part of the index instead LoweredUserName and LoweredEmail fields are in conjunction with ApplicationID field. All queries must have ApplicationID in the WHERE clause.
  • 19. A love story  .NET 3.0 was released, woohoo! WCF! Lambda Expressions!! Linq to SQL!!!  Upgraded to .NET 3.0, top to bottom.  Major deployment over the weekend.  Monday 9 AM, peak traffic.  No response from site.
  • 20. ~100% on all web servers
  • 21. Linq to SQL is not suitable for high volume web applications  Linq to SQL is not optimized for web application.  No disconnected entity support.  Entities are not serializable.  Linq to sql expressions consume high CPU when compiled to SQL. var query = from widget in dc.Widgets where widget.ID == id && widget.PageID == pageId select widget; var widget = query.SingleOrDefault();
  • 22. How bad Linq to SQL is? Source: JD Conley‟s blog
  • 23. Fixing Linq to SQL  Convert all queries to Compiled Queries.  tinyurl.com/omarLINQ
  • 24. Linq to SQL transaction deadlocks  Large table, high read and medium write, causes query timeouts, high locks, transaction deadlock because of SERIALIZATION isolation level. Transaction (Process ID ##) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. Timeout Expired. The Timeout Period Elapsed Prior To Completion Of The Operation Or The Server Is Not Responding. using (var db = new YourDataContext2()) { db.Connection.Open(); db.ExecuteCommand("SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;"); var user = db.aspnet_Users.First(); var pages = user.Pages.ToList(); }
  • 25. Linq to SQL transaction deadlocks  Connection does not close!  Bug in Data Context code.  Solution is to override the Dispose. class YourDataContext2 : YourDataContext, IDisposable { public new void Dispose() { if (base.Connection != null) if (base.Connection.State != System.Data.ConnectionState.Closed) { base.Connection.Close(); base.Connection.Dispose(); } base.Dispose(); } }
  • 26. Content Delivery Network (CDN)  CDN cache and deliver content from their servers that are closest to users‟ computers. The closer servers are to end user, the shorter roundtrip time for every request. For ex, Akamai has servers almost every city in the world.  Content from CDN nodes get served faster with lower latency than coming from your servers.  CDN Nodes have better caching and compression algorithms.  CDN nodes can offload your server and network from delivering static files. Thus better throughput for dynamic content.
  • 27. Content Delivery Network 0.7 sec Washington, DC 2.2 sec Australia
  • 28. Without CDN www.yoursite.com
  • 29. How CDN works static.yoursite.com www.yoursite.com
  • 30. Two types of CDN  Static – you upload the files to CDN and they give you an URL. E.g. yoursite.cachefly.net/logo.gif  Dynamic – Host your dynamic application behind the CDN. For ex, Edgecast and Panther Express.  Very cheap - $0.2/GB
  • 31. How Dynamic CDN works www.yoursite.com
  • 32. How Dynamic CDN works www.yoursite.com Static content cached, Compressed automatically
  • 33. How Dynamic CDN works www.yoursite.com Static content cached, Compressed automatically
  • 34. 13 disasters for production websites 1. Faulty hard drive supplied by supplier, data corruption within weeks. 2. Controller malfunctions and corrupts all disks in the same controller. 3. RAID malfunction. 4. CPU overheated and burned out. 5. Firewall went down. 6. Remote Desktop stopped working after a patch installation. 7. Remote Desktop max connection exceeded. Cannot login anymore to servers. 8. Database got corrupted while we were moving the production database from one server to another over the network. 9. One developer deleted the production database accidentally while doing routine work. 10. Support crew at hosting service formatted our running production server instead of a corrupted server that we asked to format. 11. Windows got corrupted and was not working until we reinstalled. 12. DNS goes down. Don’t get domain from GoDaddy. 13. Internet backbone goes down in different part of the world. http://tinyurl.com/omar13
  • 35. Conclusion  ASP.NET out of the box, does not scale for millions of hits.  Must make the hacks at code, database and configuration level to get it to scale.  That‟s reality for any technology, not ASP.NET specific.