可扩展性架构
网站的扩展性架构设计,就是在对现有系统影响最小的情况下,系统功能可持续扩展及提升的能力。
这里有必要区分一下 扩展性和伸缩性 :
扩展性:
指对现有系统影响最小的情况下,系统功能可持续扩展或提升的能力。表现在系统基础设施稳定不需要经常变更,应用之间较少依赖和耦合,对需求变更可以敏捷响应。也就是说当系统增加新功能时,不需要对现有系统的结构和代码进行修改。
伸缩性:
指系统能够通过增加(减少)自身资源规模的方式增强(减少)自己计算处理事务的能力。也就是说利用集群的方式增加服务器数量,提高系统的整体事务吞吐呢能力。
设计网站可扩展架构的 核心思想是模块化 ,并在此基础上,降低模块间的耦合性,提高模块的复用性。
前面提到过,通过分层和分割的方式进行架构伸缩,分层和分割也是模块化设计的重要手段, 利用分层和分割的方式将软件分割为若干个低耦合的独立的子组件模块 ,这些组件模块以消息传递及依赖调用的方式聚合成一个完整的系统。
在大型网站中,这些模块通过分布式部署的方式,独立的模块部署在独立的服务器集群上,从物理上分离模块之间的耦合关系,进一步降低耦合性提高复用性。
模块分布式部署以后具体集合方式主要有 分布式消息队列 和 分布式服务 。
利用分布式消息队列降低系统耦合性
事件驱动架构通过在低耦合模块之间传递事件消息,以保持模块的松散耦合,并借助事件消息的通信完成模块间合作。在大型网站架构中,实现手段为分布式消息队列:
消息队列使用发布订阅模式。分布式消息队列原理如下:
消息队列服务器根据消息订阅列表查找订阅该消息的消息消费者应用程序,将消息队列中的消息按照先进先出的原则将消息通过远程通信接口发送给消息消费者程序。