Application Of Scaling Method To Optimize The Service
There always comes such day when the server doesn't handle all the load. The cause can vary: work of hackers, scraping bots or malicious software, the program itself might be not optimized or architecture might be improperly designed, or the number of users might just have risen. No matter whether it’s good news or not: this means that it’s time to deal with problems, to optimize or to scale the service.
If the attendance growth is what caused the increased load then it’s time to optimize the program for big amount of users. The reasons of poor performance can be one of next: optimized scripts, too big database, or just badly designed architecture (sometimes this problems may cause significant increase in load even for simple tasks).
But once the system works its best and it can’t be better, there is no other option but scaling. Generally to scale the system means to increase its resources to enhance its capacity.
What is the advantage of scaling over other methods? It allows to solve above-mentioned problems a lot faster then others. There are two types of scaling: the vertical and horizontal. The vertical one means increasing the capacity of resources in an SMP. For example, adding extra Ram, replacing the CPU to more powerful one and so on. SMP System has more than one processors (unlike most ordinary users’ computers). On the other hand, the horizontal scaling implies adding mew servers to existing system, which in its turn consists of number of SMP systems. Researchers say, that now it is common for middle- and high-end servers to be replaced with groups of entry-level servers combined in racks or clusters.
Vertical scaling has its disadvantages: it is often limited by the bandwidth of a single machine, and its capacity has an upper limit. Also this type of scaling is usually much more expensive then horizontal one. Furthermore, it does not make the system fault tolerant, which is highly needed nowedays. For example, if application runs on a single server, no matter whether it has been scaled vertically or not, if that server goes down, the whole system will go down too. On the other hand, if one server of the knot (created as a result of horizontal scaling) is down, others will continue processing requests and the system will still be available to the customers. Important fact to mention is that vertical scaling requires restarting machine after applied changes to hardware or software (so that the service will be unavailable for some time) when the horizontal can be done without shooting the system down. Unchanged amount of threads in a scaled system is also a disadvantage. Whereas, using horizontal scaling it is often easier to scale dynamically by adding more machines to the existing pool. For example: when servers are clustered, the original server is being scaled out horizontally. If the better performance is required, it can be reached by adding more servers to the group.
According to Martin L. , Abbott and Michael T. Fisher instead of segmenting customers into a multitude of small databases (each hosting with several customers to improve cost efficiency), many companies still rely on expensive and high-performance equipment to scale a monolithic system.
Such a “decision” will ultimately lead to an increase in transaction costs and more damage in case of failure as the company grows. In addition, the investment efficiency will be low, since the bulky system will be idle until the load gradually increases. In the end, the largest system will not be large enough, and the product will still have problems. Although authors of book “The art of scalability” consider applying vertical scaling instead of load sharing a big mistake, vertical systems are ideal for task where execution threads need to exchange data between themselves.
As already noted, high-speed interconnects are used in large SMP systems, ensuring sufficient system performance. In horizontal systems, performance problems may occur due to low bandwidth and significant interconnect latency in cases where frequent data transfer is required between nodes. However, some applications do not need high interconnect speeds to achieve high performance — usually small applications and applications that can be easily replicated( exact copies of them can be made, for example, Web servers, proxy servers, firewalls, and small application servers). In such horizontal systems, each node performs a small task, regardless of the work of all the others.