第五章是万无一失:网站的高可用架构,大型网站的分层架构及物理服务器的分布式部署使得位于不同层次的服务器具有不同的可用性特点。关闭服务器或者宕机时产生的影响也不相同,高可用的解决方案也差异巨大。 高可用服务策略:分级管理(优先级),超时设置(失效转移),异步调用(消息队列),服务降级,幂等性设计(调用多次和调用一次结果相同)。高可用网站的软件质量保证:网站发布、自动化测试、预发布验证、代码控制(1、主干开发、分支发布:代码修改都在主干上进行,需要发布的时候,从主干拉一个分支发布,该分支即成为一个发布版本,如果该版本发现 bug, 继续在该分支上修改发布,并将修改合并到主干,直到下次主干发布。2、分支发布,主干开发:任何修改都不得在主干上直接进行,需要开发一个新功能或修改 bug 时,从主干拉一个分支进行开发,开发完成且测试通过后,合并回主干,然后从主干进行发布,主干上的代码永远是最新发布的版本)、自动化发布、灰度发布。
第六章 永无止境:网站的伸缩性架构,一般说来,网站的伸缩性设计可分为两类,一类是根据功能进行物理分离实现伸缩;一类是单一功能通过集群实现伸缩。前者是不同的服务器部署不同的服务,提供不同的功能;后者是集群内的多台服务器部署相同的服务,提供相同的功能。还有对于不同功能进行物理分离实现伸缩,每次分离都会有更多的服务器加入网站,使用新增的服务器处理某种特定的服务。具体可分为如下两种情况:(1)纵向分离(分层后分离):将业务处理流程上的不同部分分离部署,实现系统的伸缩性。(2)横向分离(业务分割后分离):将不同的业务模块分离部署,实现系统伸缩性。在 HTTP重定向负载均衡方面根据用户的HTTP请求计算一台真实的Web服务器地址,并将该Web服务器地址下乳HTTP重定向响应中(响应状态码302)返回给用户浏览器。但缺点是:浏览器需要两次请求服务器才能完成一次访问,性能较差;重定向服务器自身处理能力有可能成为瓶颈,整个集群的伸缩性规模有限;有可能使搜索引擎判断为SEO作弊。
分布式缓存集群的伸缩性设计:和所有服务器都部署相同应用的应用服务器集群不同,分布式缓存服务器集群中不同服务器中缓存的数据各不相同,缓存访问请求不可以在缓存服务器集群中的任意一台处理,必须先找到缓存有需要数据的服务器,然后才能访问。这个特点会严重制约分布式缓存集群的伸缩性设计,因为新上线的缓存服务器没有缓存任何数据,而已下线的缓存服务器还缓存着网站的许多热点数据。分布式缓存集群伸缩性设计的最主要目标:必须让新上线的缓存服务器对整个分布式缓存集群影响最小,也就是说新加入缓存服务器后应使整个缓存服务器集群中已经缓存的数据尽可能还可被访问到。
第七章,随需应变:网站的可扩展架构。其中扩展性:指对现有系统影响最小的情况下,系统功能可持续扩展或提升的能力。伸缩性:指系统能够通过增加(减少)自身资源规模的方式增强(减少)自己计算处理事务的能力。
构建可扩展的网站架构设计网站可扩展架构的核心思想是模块化,并在此基础上,降低模块间的耦合性,提高模块的复用性。模块分布式部署以后具体聚合方式主要由分布式消息队列和分布式服务。
利用开放平台建设网站生态圈
利用自身庞大的用户群吸引第三方开发者。
API接口:RESTful、WebService、RPC等各种形式
协议转换:将各种API输入转换成内部服务可以识别的形式,并将内部服务的返回封装成API的格式
安全
审计
路由:映射,将开放平台的各种访问路由映射到具体的内部服务。
流程:将一组离散的服务组织成一个上下文相关的新服务,隐藏服务细节,提供统一接口供开发者调用