A Word on Scalability


What is it that we really mean by 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 added. Increasing 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.(scalability就是可以通过增加资源来提高性能,并且性能的增加和资源的增加成一个合理的比例)

In distributed systems there are other reasons for adding resources to a system; for example to improve the reliability of the offered service. Introducing 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.(增加资源并不一定是要提高性能,有时候是为了提高可靠性。对于一个always-on service而言,scalability则意味着能够通过增加资源提高冗余度但是却不能够损失性能)

Why is scalability so hard? Because scalability cannot be an after-thought. It 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 affected. Many 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.(scalability之所以复杂是因为这个东西在系统设计的时候就需要考虑进去,必须保证说增加资源可以提高性能,或者是增加资源提高冗余度但是不会损失性能。很多算法在低负载或者是小数据集合下工作很好,但是随着请求增加或者是数据量增大的话,性能下降会非常大)

A second problem area is that growing a system through scale-out generally results in a system that has to come to terms with heterogeneity. Resources 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 account. For 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.