(3) Scalability
Scalability in a platform is defined as the ability of the platform to
handle an increased number of user requests and users themselves,
(Throughput, in simple words) without adverse degradation in
functionality. There are two ways to scale a platform.
Scaling Up is defined as the
ability to increase Hardware or Software parameters in the system
configuration to enable more throughput – this includes
activities like increasing the software configuration for thread count
or number of users, changing the network link to higher speeds or
changing the hardware configuration by adding more resources in terms
of Memory, Processor Speed, Number of Processors, Hard Drive Space,
Hard Drive Speed, etc.
Scaling Out is quite a
different animal. You can scale out by making copies of your
implementation and directing user traffic, and user request traffic to
these multiple copies. Many techniques exist for this –
Replication, Web Farming, DNS Round Robin, Network Load Balancing
(NLB), Server Load Balancing, Quota Management, etc. You will have to
do independent research to understand each of these, but the point of
bringing this up here is that in order for your application to support
scaling out, it has to be designed in a particular way. For example,
web servers that maintain a user session cannot afford to direct user
requests within a session to a different server in the farm. This is
where you need to come up with a loosely coupled architecture where
session data is stored in the Database instead of the web server. This
would also mean that the user needs to include a unique session
identifier in each request. These and many more are the reasons why
scalability planning requires a lot of thinking ahead and planning.