第三章 大型网站核心架构要素
- 性能
- 手段
- 浏览器(浏览器缓存、页面压缩、合理布局、减少Cookie传输)
- CDN、反向代理服务器
- 应用服务器(本地缓存、分布式缓存、异步操作、分布式集群)
- 代码层面(多线程、改善内存管理)
- 数据库服务器(索引、缓存、SQL优化、NoSQL(数据模型、存储结构、伸缩特性))
- 衡量性能的指标
- 响应时间
- 并发数
- 吞吐量
- 系统性能计数器
- 手段
- 可用性
- 手段
- 应用服务器(集群部署,负载均衡设备提供服务,宕机后切换,前提:不能保存会话信息)
- 存储服务器(冷备份、热备份、灾备服务器)
- 开发过程(预发布验证、自动化测试、自动化发布、灰度测试)
- 衡量可用性的标准
- 假设系统中任何一台或多台服务器宕机时,以及出现各种不可预期的问题时,系统整体是否依然可用
- 手段
- 伸缩性
- 手段
- 应用服务器(只要不保存数据,服务器都是对等的,使用合适的负载均衡设备就可以向集群中不断加入服务器)
- 缓存服务器(加入新的服务器可能导致缓存路由失效,需要改进缓存路由算法保证缓存数据的可访问性)
- 关系型数据库(难以做到大规模集群的可伸缩性,需要通过数据库之外的路由分区等手段)
- NoSQL数据库(先天为海量数据而生,对伸缩性支持非常好,较少运维参与便可实现集群规模的线性伸缩)
- 衡量伸缩性的标准
- 是否可用多台服务器构建集群
- 是否容易向集群中添加新的服务器
- 是否新的服务器能提供无差别服务
- 集群中总服务器数量是否有限制
- 手段
- 扩展性
- 手段
- 事件驱动架构(利用消息队列实现,可透明增加新的消息生产者任务、消息消费者任务)
- 分布式服务(分离业务和可复用服务)
- 多版本服务(提供多版本服务,实现透明升级)
- 开放平台接口(吸引第三方开发者,调用网站服务,开发周边产品,扩展网站业务)
- 衡量扩展性的标准
- 增加新业务时是否可以实现对现有产品透明无影响,不需要改动或很少改动既有业务
- 不同产品之间是否低耦合,一个产品改动对其他产品无影响
- 手段
- 安全性
- 手段
- 阻止恶意访问和攻击
- 保护重要数据
- 衡量安全性的标准
- 针对现存和潜在的各种攻击和窃密手段,是否有可靠的应对策略
- 手段