最近又搜集到Martin L. Abbott和Michael T. Fisher的两本好书:
- The Art of Scalability
- Scalability Rules:50 Principles for Scaling Web Sites
第一本书将近六百页,最近没时间看,就先粗略学习一下其中的三维伸缩性模型: 在该模型中,将应用程序水平复制,通过负载均衡运行应用程序的多个完全一样的副本的方式来实现应用程序伸缩性,这种方式称为X轴伸缩性。这是一种很好的方式来提高应用程序的容量和可用度。 当使用Z轴伸缩性,每个服务器运行代码的一个完全相同的副本。在该方面,它与X轴伸缩性很相似。最大的不同是每个服务器只负责数据的一个子集。该系统的一些组件负责将每个请求路由给适当的服务器。一个常见的路由规则是把请求的一个属性作为被访问的实体的主键,比如分区。另一个常见的路由规则是客户类型。例如,应用程序可以向付费用户提供比免费用户更高的SLA,实现方式是将付费用户的请求路由到具有更高容量的一组服务器上。 Z轴伸缩性与X轴伸缩性类似,提高了应用程序的容量和可用度。然而,没有任何一个方式能够解决不断增加的开发工作和程序复杂度的问题。解决这些问题需要Y轴伸缩性。 伸缩性的第三个维度是针对功能性分解的Y轴伸缩性。Y轴伸缩性与Z轴伸缩性分解事情的方式相似但有不同。在应用程序层级,Y轴伸缩性将单体应用程序拆分成一组服务。每个服务实现了一组相关的功能特性,例如订单管理,客户管理等。 决定如何将系统分割为一组服务更像是一门艺术,但是可借助于一些策略。一种方式是通过动词或使用情况拆分服务。另一个拆分方式是通过名词或资源分割系统。这种服务负责处理给定的实体/资源的所有操作。 Unix提供了大量的工具,比如grep,cat和find。每个工具只做一件事,效果往往非常好,并且可以使用shell脚本组合多个工具以执行复杂的任务。服务分割也应采用类似的策略。