0%

高可扩展架构原则

四个维度

  • 性能可扩展:性能无法完全实现线性扩展,但要尽量使用具有并发性和异步性的组件。 具备完成通知功能的工作队列要优于同步连接到数据库。

  • 可用性可扩展:CAP理论表明,分布式系统无法同时提供一致性、可用性和分区容错性保证。 许多大规模Web应用程序都为了可用性和分区容错性而牺牲了强一致性,而后者则有赖于最终一致性来保证。

  • 维护可扩展:软件和服务器都需要维护。在使用平台&工具监控和更新应用程序时,要尽可能地自动化。

  • 成本可扩展:总拥有成本包括开发、维护和运营支出。在设计一个系统时,要在重用现有组件和完全新开发组件之间进行权衡。 现有组件很少能完全满足需求,但修改现有组件的成本还是可能低于开发一个完全不同的方案。 另外,使用符合行业标准的技术使组织更容易聘到专家,而发布独有的开源方案则可能帮助组织从社区中挖掘人才。

10个原则

以上各项,在设计应用程序时都会考虑和权衡,根据上述内容总结出的10个设计原则:

  1. 避免单点故障:任何东西都要有两个。这增加了成本和复杂度,但却能在可用性和负载性能上获益。 而且,这有助于设计者采用一种分布式优先的思维。

  2. 横向扩展,而不是纵向扩展:升级服务器(纵向)的成本是指数增长的,而增加另一台商用服务器(横向)的成本是线性增长的。

  3. 尽量减少应用程序核心所需要完成的工作。

  4. API优先:将应用程序视为一个提供API的服务,而且,不假定服务的客户端类型(手机应用、Web站点、桌面应用程序)。

  5. 优先使用缓存。

  6. 提供尽可能新的数据:用户可能不需要立即看到最新的数据,最终一致性可以带来更高的可用性。

  7. 设计时要考虑维护和自动化:不要低估应用程序维护所需要的时间和工作量。 软件首次公开发布是一个值得称赞的里程碑,但也标志着真正的工作要开始了。

  8. 宁异步,不同步。

  9. 努力实现无状态:状态信息要保存在尽可能少的地方,而且要保存在专门设计的组件中。

  10. 为故障做好准备:将故障对终端用户的影响最小化。