大型网站技术架构剖析
大型网站系统特点
高并发,大流量
高可用
海量数据
用户分布广泛,网络情况复杂
安全环境恶劣
需求快速变更,发布频繁
渐进式发展
大型网站发展演化过程
一台服务器
特点:没人
应用程序、数据库、文件都在一个服务器。
应用服务器和数据服务器分离
应用服务器
处理大量业务
需要更快更强的CPU
数据服务器
需要快速磁盘检索和数据缓存
需要更快的磁盘和更大的内存
文件服务器
需要更大的硬盘
使用缓存改善网站性能
本地缓存
远程缓存(分布式缓存)
使用应用服务器集群改善并发处理能力
负载均衡服务器
用户服务器集群
数据库读写分离
利用数据库的主从热备份,来实现数据库的读写分离。从而改善数据库的负载压力。
使用反向代理和CDN加速网站响应
基本原理都是缓存(都可以缓存一些静态资源)
反向代理服务器
缓存用户请求资源
CDN服务器
目的:尽早返回数据给用户
使用分布式文件系统和分布式数据库系统
分布式数据库是网站数据库拆分的最后手段。不到万不得已的时网站更常用的拆分手段是业务拆分。
使用NoSQL和搜索引擎
应对更复杂的存储和检索需求
业务拆分
应对日益复杂的业务场景
拆分方法
根据产品线拆分成不同的应用
应用产品之间的关系
超链接
消息队列进行数据分发
访问同一个数据存储系统
分布式服务
通过分布式服务调用公用业务服务完成具体业务需要
大型网站架构模式
分层
应用层
服务层
数据层
分割
对不同的层继续进行垂直的分割
分布式
分层、分割的主要目的就是为了便于分布式部署。
分布式就是为了用更多的计算机来完成同样的功能
分布式应用和服务
分布式静态资源
分布式数据和存储
分布式计算
分布式配置
分布式文件系统
集群
多台服务器部署相同应用构成一个集群。通过负载均衡设备对外提供服务
优点:
提高系统并发访问量
提高系统可用性(冗余)
缓存
改善性能的第一手段
内容分发网络CDN
反向代理
本地缓存
分布式缓存
异步
共享内存队列(单服务器)
分布式消息队列(分布式系统)
冗余
访问和负载很小的服务器也至少要部署两台构成集群。目的就是实现服务的高可用。
自动化
自动化报警
自动化失效转移
自动化失效恢复
自动化降级
自动化分配资源
安全
身份认证
加密
验证码识别
对于XSS,SQL注入,进行编码转换等
敏感信息过滤
风险控制
网站性能测试优化
性能测试指标
响应时间
并发数
吞吐量
性能计数器
性能测试方法
性能测试
负载测试
压力测试
稳定性测试
常见优化手段
用户视角
优化页面HTML样式
利用浏览器的并发和异步
调整浏览器缓存策略
CDN和反向代理
开发人员
使用缓存加速数据读取速度
使用集群提高系统吞吐能力
使用异步消息加速响应及实现消峰
优化代码改善程序性能
运维人员
优化骨干网
使用高性价比定制服务器
使用虚拟化技术优化资源利用
网站性能优化
web性能优化
减少HTTP请求(合并css、javascript、图片)
使用浏览器缓存(使用Cache-Control和Expire属性)
启用压缩(减少网络数据传输量)
减少页面阻塞(CSS文件尽量放在最上面,javascript放在最下面)
减少Cookie传输
CDN加速
-
反向代理
安全
加速web请求(可以缓存一些静态资源)
负载均衡
应用服务器优化
分布式缓存
-
异步操作(消息队列)
原则:任何可以晚点在做的事都可以晚点再做
-
使用集群
使用负载均衡技术来构建
存储服务器优化
访问频繁的页面不应该访问数据库(如首页,最好是静态的)
谨慎使用锁操作
对缓存的管理提高到和其他服务器一样的级别
大文件小文件分别对待
大型网站架构设计误区
一味追求大公司的解决方案
为了技术而技术
企图用技术解决所有问题
本文作者: zhimiao
本文链接: https://weizhimiao.github.io
☆
往期精彩
☆