大型网站技术架构 核心原理与案例分析 阅读笔记 html
架构: 最高层次的规划,难以改变的决定前端
3.2. 万无一失:网站的高可用架构(可用性)算法
网站不可用时间(故障时间) = 故障修复时间点 - 故障发现(报告)时间点
网站年度可用性指标 = (1 - 网站不可用时间/年度总时间) * 100%数据库
网站应用中一个处理错误的理念:快速失败(fast failed),即若是系统在启动时发现问题就马上抛出异常,中止启动排查错误,而不是启动后执行错误操做。后端
网站运行监控设计模式
不容许没有监控的系统上线浏览器
监控数据采集缓存
3.3. 永无止境:网站的伸缩性架构(伸缩性)安全
应用服务器集群的伸缩性设计性能优化
Http请求分发装置能够感知或者能够配置集群的服务器数量,能够及时发现集群中新上线或新下线的服务器,并能向新上线的服务器分发请求,中止向已下线的服务器分发请求,实现应用服务器集群的伸缩性
HTTP重定向负载均衡: 利用HTTP重定向协议实现负载均衡。
数据链路层负载均衡: 在通讯协议的数据链路层修改mac地址进行负载均衡。
Linux平台最好的链路层负载均衡开源产品是LVS(Linux Virtual Server)
分布式缓存集群的伸缩性设计
计算机的任何问题均可以经过增长一个虚拟层来解决。
分布式缓存的一致性hash算法 : hash环 + 虚拟层
扩展性(Extensibility): 对现有系统影响最小的状况下,系统功能可持续扩展或提高的能力。表如今系统基础设施稳定不须要常常变动,应用之间较少依赖和耦合,对需求变动能够敏捷响应。是系统架构设计层面的开闭原则(扩展开放,修改关闭),架构设计考虑将来功能扩展,当系统增长新功能时,不须要对现有系统的结构和代码进行修改。
伸缩性(Scalability): 系统可以经过增长(减小)自身资源规模的方式加强(减小)本身计算处理事务的能力。若是这种增减是成比例的,即做线性伸缩性。网站架构中,一般指利用集群方式增长服务器数量,提升系统的总体事务吞吐能力。
3.4. 随需应变:网站的可扩展架构(扩展性)
构建可扩展的网站架构
低耦合是软件设计的终极目标之一,低耦合的系统更容易扩展,低耦合的模块更容易复用,低耦合的设计让开发过程和维护变得更轻松和容易管理。
设计网站可扩展架构的核心思想是模块化,并在此基础之上,下降模块间的耦合性,提升模块的复用性。
模块分布式部署之后具体聚合方式主要有分布式消息队列和分布式服务 。
利用分布式消息队列下降系统耦合性
分布式消息队列
分布式消息队列经过消息对象分解系统耦合性,不一样子系统处理同一个消息;
分布式服务则经过接口分解系统耦合性,不一样子系统经过相同的接口描述进行服务调用。
利用分布式服务打造可复用的业务平台
WebService与企业级分布式服务
WebService缺点:
- 臃肿的注册与发现机制
- 低效的XML序列化手段
- 开销相对较高的HTTP远程通讯
- 复杂的部署与维护手段
难以知足大型网站对系统高性能、高可用、易部署、易维护的要求。