大型互联网软件系统的特点
- 高并发,大流量
- 高可用
- 海量数据
- 用户分布广泛,网络情况复杂
- 安全环境恶劣
- 需求快速变更,发布频繁
- 渐进式发展
大型网站架构演化发展历程
- 初始阶段:应用、数据库、文件等所有资源都在一台服务器
- 应用服务和数据服务分离
- 使用缓存改善网站性能:本地缓存和远程缓存
- 使用应用服务器集群改善网站的并发处理能力
- 数据库读写分离
- 使用反向代理和CDN加速网站响应
- 使用分布式文件系统和分布式数据库系统
- 使用NoSQL和搜索引擎
- 业务拆分
- 分布式服务
网站架构模式
- 分层
应用层,服务层,数据层
- 分割
按业务拆分,逻辑或物理部署上也都可以独立。
- 分布式
分布式应用和服务,分布式静态资源,分布式数据和存储,分布式计算,分布式配置,分布式锁,分布式文件
- 集群
多台服务器部署相同应用构成一个集群,通过负载均衡设备共同对外提供服务
- 缓存
CDN,反向代理,本地缓存,分布式缓存
- 异步
一个业务操作分成多个阶段,每个阶段之间通过共享数据的方式异步进行写作。
特性:提高系统可用性,加快网站响应速度,消除并发访问高峰
- 冗余
服务器冗余运行,数据冗余备份:当某台服务器宕机时,可以将其上的服务和数据访问转移到其他服务器上
- 自动化
发布过程自动化、自动化代码管理、自动化测试、自动化安全测试、自动化部署、自动化监控、自动化报警、自动化失效恢复、自动化降级、自动化分配资源
- 安全
常见安全攻击:XSS攻击、SQL注入、CSRF攻击等
大型网站核心架构要素
- 性能
相关指标:响应时间、并发数、吞吐量、性能计数器(描述服务器或操作系统性能的一些数据指标)
- 可用性
可用性指标
故障分类及权重
- 伸缩性
通过不断向集群中加入服务器的手段来缓解不断上升的用户并发访问压力和不断增长的数据存储需求
- 扩展性
在网站新增业务产品时,是否可以实现对现有产品透明无影响,不需要任何改动或很少改动既有业务功能就可以上线新产品
- 安全性
衡量网站安全机构的标准:针对现在和潜在的各种攻击与窃密手段,是否有可靠的应对策略。
性能测试方法
- 性能测试
以系统升级初期规划的性能指标为预期目标,对系统不断施加压力,验证系统在资源科接受范围内,是否能达到性能瓶颈。
- 负载测试
对系统不断地增加并发请求以施加压力,直到系统的某项或多项性能指标达到安全临界值。
- 压力测试
超过安全负载的情况下,对系统继续施加压力,直到系统崩溃或不能再处理任何请求。
- 稳定性测试
被测试系统在特定硬件、软件、网络环境下,给系统加载一定业务压力,使系统运行一段较长时间,以验证系统是否稳定。
WEB前端性能优化
- 浏览器访问优化
手段:减少http请求,使用浏览器缓存,启用压缩,CSS放在页面最上面、JavaScript放在页面最下面,减少Cookie传输
- CND加速
一般缓存静态资源,如图片、文件、CSS、Script脚本、静态网页等
- 反向代理
作用:保护网站安全、配置缓存加速Web请求、通过负载均衡构建集群提高系统处理能力,改善高并发性能。
应用服务器优化
- 分布式缓存
网站性能优化第一定律:优先考虑使用缓存优化性能
- 异步操作
消息队列调用异步化--任何可以晚点做的事情都应该晚点再做。
- 使用集群
避免单一服务器因负载压力过大而响应缓慢
- 代码优化
重点关注:多线程(将对象设计未无状态对象、使用局部对象、并发访问资源时使用锁)、资源复用、数据结构、垃圾回收等
- 存储性能优化
机械硬盘vs.固态硬盘、B+树vs.LSM树、RAIDvs.HDFS