Any website developed on Internet wants to increase its audiences. Though they can expect different behavior from their audiences such as:
- Just simple browsing and spreading the word
- Engage into e-commerce
- Engage into networking
- Use the utilities or facilities available
- And so on…
There are very rare websites or web apps which expect limited number of audience, but more than 99% of the websites actually expect to have as many users as possible. The irony is, many of the websites fail to perform when they actually receive the masses on their websites as visitors. This is because of the lack of testing in terms of scalability, robustness and load balancing. So in turn, first they do a lot of efforts to get their website popular so that they can do good business and when they get the audiences, they simply fail to take the leverage.
Scalability, Robustness and Load Bearing Capacity go hand in hand. None is useful than the other. To give you a little idea, in context to a website:
- Scalability refers to the ability of a website to handle growing amount of tasks in a capable manner including its ability to be enlarged to accommodate that growth.
- Robustness refers to the ability of a website to function in the “as expected” manner ensuring that it doesn’t break easily.
- With an aim to make a website scalable and robust, Load Balancing basically refers to the distribution of workloads across multiple resources in order to optimize resource use, maximize throughput, minimize response time, and avoid overload of any single resource.
Scalability ~ an Insight
Scalability of a website can be measured in various dimensions, such as:
- Administrative: This refers to the ability of a website to handle increasing number of users.
- Functional: This refers to the ability of a website to enhance functionality at minimal effort, yet keeping it stable.
- Geographic: This refers to the ability of a website to expand in a wider geographical area and yet maintaining its performance, usefulness, and usability.
- Load: This refers to the ability of a website to easily expand and contract its resource pool (primarily server resources) to accommodate heavier or lighter loads or number of inputs.
Broadly classifying, there are two methods of increasing scalability of a website:
- Scaling Horizontally Method (or Scale Out: This refers to expanding a system itself by adding more nodes to it. For example, scaling out from one web server to more in a cloud environment.
- Scaling Vertically Method (or Scale Up): This refers to expanding the strength of a single node of a system. For example, increasing or enhancing the specifications of a web server is one such method which increases the scalable attribute of a website.
Robustness ~ an Insight
Robustness of a website can be measured in various dimensions, such as:
- Catastrophic: This refers to the issues which cause website server to corrupt or to crash/reboot.
- Restart: This refers to the issues which cause web services or servers to hangs and then could be terminated only by force.
- Abort: This refers to the issues which cause abnormal termination of a web-service.
- Execution: This refers to the issues which cause abnormal or unexpected behavior.
- Silent: This refers to the issues which often cause that even after a timeout no error is indicated on an operation that cannot be performed.
- Hindering: This refers to the issues which cause incorrect error codes to return or too much delay in the response.
Typically, robustness in a system is expected to fulfill or achieve the following objectives:
Partially validate the application (i.e., to determine if it fulfills its robustness requirements):
- Operational requirements specified by exceptional use case paths
- Operational availability requirements
- Reliability requirements
- Robustness requirements
To help ensure that the application will not fail catastrophically when the unexpected occurs by determining how well it:
- Handles failures of its Hardware components.
- Handles failures of its Software components.
- Handles failures of its Dependent applications (e.g., ISP provider or back-end legacy system) or databases (e.g., unavailability).
- Handles failures of its Human users or operators (e.g., invalid data input).
- Gracefully performs Rollover and failover.
- Gracefully performs Disaster recovery
- Cause failures concerning the exceptional operational requirements and robustness requirements that help identify defects that may not have been found during unit and integration testing.
- Report these failures to the development teams so that the associated defects can be fixed.
- Help determine the extent to which the application is ready for launch.
- Provide input to the defect trend analysis effort.
Broadly classifying, there are two major approaches to test the robustness of a website:
- Interface Robustness Testing: This refers to the testing of the website by bombarding with valid and exceptional inputs.
- Dependability Benchmarking: This refers to the testing of a website to develop a public benchmarking by evaluating the dependability of a website. It considers factors like availability, maintainability etc. of both the resources as well as the users.
Load Balancing ~ an Insight
As explained earlier, load balancing is the most important measure to make a website truly scalable and robust. In short, the two most common uses of Load Balancing are:
- Minimizing Failover and redundancy: By limiting the available points of failure, the uptime can be easily increased.
- Load Distribution: With the increasing usage of a website, it is required to distribute the web services to ensure smooth operation.
There are several ways to do load balancing. Though below are some of the major techniques deployed:
- Round-robin DNS: In this technique, multiple IP addresses are associated with a single domain/website. The clients are then expected to choose the server to connect, and also it is allocated randomly or by some criteria to clients. Thus this technique balances the load by exposing multiple backend servers to clients.
- Scheduling Algorithms: In this technique, numerous scheduling algorithms are used to determine the back-end server to respond to a task or a request. Some common examples for this are random choice, round robin, least connect etc.
- Persistence: In this technique, the system emphases on user sessions. The data of the session of a client is sent consistently to a particular backend server.