Scalability is frequently used as a magic incantation to indicate that something is badly designed or brokenOften you hear in a discussion “but that doesn’t scale” as the magical word to end an argument. This is often an indication that 必威体育精装版app官网ers are running into situations where the architecture of their system limits their ability to grow their serviceIf scalability is used in a positive sense it is in general to indicate a desired property as in “our platform needs good scalability”.
可伸缩性我们究竟是什么意思?A service is said to be scalable if when we increase the resources in a system, it results in increased performance in a manner proportional to resources addedIncreasing performance in general means serving more units of work, but it can also be to handle larger units of work, such as when datasets grow.
In distributed systems there are other reasons for adding resources to a system; for example to improve the reliability of the offered serviceIntroducing redundancy is an important first line of defense against failures.An always-on service is said to be scalable if adding resources to facilitate redundancy does not result in a loss of performance.
Why is scalability so hard? Because scalability cannot be an after-thoughtIt requires applications and platforms to be designed with scaling in mind, such that adding resources actually results in improving the performance or that if redundancy is introduced the system performance is not adversely affectedMany algorithms that perform reasonably well under low load and small datasets can explode in cost if either requests rates increase, the dataset grows or the number of nodes in the distributed system increases.
A second problem area is that growing a system through scale-out generally results in a system that has to come to terms with heterogeneityResources in the system increase in diversity as next generations of hardware come on line, as bigger or more powerful resources become more cost-effective or when some resources are placed further apart. Heterogeneity means that some nodes will be able to process faster or store more data than other nodes in a system and algorithms that rely on uniformity either break down under these conditions or underutilize the newer resources.
Is achieving good scalability possible? Absolutely, but only if we architect and engineer our systems to take scalability into accountFor the systems we build we must carefully inspect along which axis we expect the system to grow, where redundancy is required, and how one should handle heterogeneity in this system, and make sure that architects are aware of which tools they can use for under which conditions, and what the common pitfalls are.