大型网站技术架构学习
一、书籍信息
《大型网站技术架构核心原理与案例分析》
二、大型网站软件系统特点:
- 高并发,大流量
- 高可用
- 海量数据
- 用户分布广泛,网络情况复杂
- 安全环境恶劣
- 需求快速变更,发布频繁
三、网站架构渐进式发展
网站架构演进:
- 初始网站架构(应用程序、文件、数据库在同一服务器上,如租用的阿里云服务器)
- 应用服务器(CPU)、数据库服务器(内存)、文件服务器分离(硬盘)
- 使用缓存减少数据库访问压力
- 使用负载均衡调度和集群减少应用服务器压力
- 数据库读写分离
- CDN和反向代理
- 分布式文件系统和分布式数据库
- noSQL和搜索引擎
- 业务拆分
网站架构模式:
- 分层:应用层、服务层、数据层
- 分割:高内聚低耦合
- 分布式:必须调用网络、宕机概率大、数据一致性保持
- 集群:多台服务器部署相同应用
- 缓存:CDN/反向代理/本地缓存/分布式缓存(数据访问热点不均衡、数据不会很快过期)
- 异步:消息队列(可以缓解高峰)
- 冗余:数据备份
- 安全:密码、验证码、访问控制等
大型网站核心架构要素:
- 性能:响应时间、TPS等要素
- 可用性:99.99%
- 伸缩性:体现在集群中服务器的添加
- 扩展性:事件驱动架构(消息队列)和分布式服务
- 安全性
Web前端性能优化:
- 浏览器访问优化:
- 减少HTTP请求(将js、css等文件合并)
- 使用浏览器缓存
- 启用压缩(如Gzip)
- CSS放在页面最上面、JS放在最下面(下载完全部CSS再进行渲染)
- 减少Cookie传输
- CDN加速:本质仍然是缓存,缓存静态资源
- 反向代理:位于机房、代理Web服务器接收HTTP请求,可以实现负载均衡和缓存功能
应用服务器性能优化:
- 分布式缓存
- 考虑数据是否频繁修改、是否非热点、是否容忍数据不一致和脏读、缓存可用性如何
- 缓存预热:加载一些重要的元信息
- 缓存穿透:将不存在的数据缓存起来
- 分布式缓存架构(需要更新同步的JBoss和不互相通信的Memcached)Memcached优点很多
代码优化:
- 多线程
- 资源复用:单例模式和对象池(数据库连接池、线程池)
- 数据结构
- 垃圾回收
存储性能优化:
- 使用SSD
- B+树还是LSM树
- RAID和HDFS(默认同一个数据有三个副本)