大型网站技术架构-核心原理与案例分析
2021-04-22 14:14:10 32 举报
AI智能生成
大型网站技术架构-核心原理与案例分析
作者其他创作
大纲/内容
大型网站架构模式
特点
高并发、大流量
高可用
海量数据
用户分布广泛、网络情况复杂
安全环境恶劣
需求快速变更、发布频繁
渐进式发展
模式
分层
将系统在横向维度上切分成几个部分,每个部分负责一部分相对比较单一的职责
分割
将系统在纵向上切分,将不同的功能和服务分割开来,包装成高内聚低耦合的模块单元
分布式
将不同模块部署在不同的服务器上,通过远程调用协同工作
分类
分布式应用和服务
分布式静态资源
分布式数据和存储
分布式计算
集群
多台服务器部署相同的应用,通过负载均衡共同对外提供服务
缓存
改善软件系统的第一手段
条件
数据访问热点不均衡。将某些会频繁访问的数据放入缓存中
数据在某段时间内有效,不会很快过期
异步
将一个复杂业务操作分成几个阶段,每个阶段之间通过共享数据的方式进行异步执行
冗余
服务器冗余、数据库冗余
自动化
安全
大型网站核心架构要素
软件架构
有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计
五大要素
性能
浏览器前端
浏览器缓存、页面压缩、合理布局页面、减少Cookie传输等
CDN
应用服务器
缓存
异步
集群
代码
多线程、改善内存等
数据库
索引、缓存、SQL优化等
可用性
冗余、集群
伸缩性
服务器集群、无状态(不保存数据)
数据库集群
NoSQL
扩展性
事件驱动架构
消息队列
分布式服务
业务和可复用服务分离开来,通过分布式服务框架调用
安全性
攻击手段
防火墙
信息加密
网站的高性能架构
性能测试
指标
响应时间
最重要的衡量指标
并发数
反应系统的负载特性
吞吐量
单位时间内系处理的请求数
性能计数器
测试方法
压力测试
负载测试
性能测试
稳定性测试
性能优化
WEB前端性能优化
减少HTTP请求
使用浏览器缓存
启用压缩
CSS放在上面、JS放在下面
减少Cookie传输
CDN加速
反向代理
应用服务器性能优化
缓存
提升性能第一要务:优先使用缓存
遵循二八定律:80%的访问落在20%的数据上,利用Hash表和内存的高速访问特性,将这20%的数据缓存起来
集群
异步
存储性能优化
B+树
数据采用
LSM树
NoSQL
代码优化
资源复用
单例
对象池
数据结构
垃圾回收
多线程
将对象设计为无状态
使用局部变量
并发访问资源时使用锁
网站的高可用架构
四9原理
目的
保证服务器硬件故障时服务依然可用、数据依然保存并能够被访问
主要手段
数据和服务的冗余备份
失效转移
高可用的应用
保证应用服务器的无状态性
负载均衡
集群
Session管理
Session复制
WEB容器开启Session复制功能,几台服务器之间进行Session同步
Session绑定
利用负载均衡的源地址Hash算法,确保同一个IP请求分发到同一台服务器
利用Cookie记录Session
Session服务器
独立部署Session服务器统一管理Session
高可用的服务
高可用的服务模块为业务产品提供基础公共服务
服务策略
分级管理
核心服务和服务优先使用更好的硬件;
子主题
服务部署进行必要的隔离,避免故障的连锁反应
超时设置
设置超时;一旦超时,通信框架抛出异常
异步调用
服务降级
为了保证核心应用和功能的正常运行,需要对服务进行降级处理
分类
拒绝服务
拒绝低优先级应用的调用,减少服务调用并发数,确保核心应用正常使用
关闭功能
关闭部分不重的功能
幂等性设计
在服务层保证服务重复调用和调用一次产生的结果相同
高可用的数据
手段
数据备份
保证数据有多个副本,任意副本的失效都不会导致数据的永久丢失
失效转移
保证当一个数据副本不可以访问时,可以快速切换访问数据的其他副本,保证系统的可用
CAP原理
数据持久性
数据可访问性
数据一致性
数据强一致性
各个副本的数据在物理存储中总是一致的
数据用户一致性
各个副本的数据可能会不一致,但通过纠错和校验机制,可以确定一个一致的且正确的数据返回给用户
数据最终一致性
系统经过一段时间(比较短)的自我恢复或者修正,数据最终会达到一致
数据备份
冷备
热备
异步热备
存储服务器分为主存储服务器(Master)和从存储服务器(Slave)
主存储服务器将数据写入本机存储系统后立即返回成功,然后通过异步线程将写操作数据同步到从存储服务器
同步热备
多份数据副本的写入操作同步进行
应用程序收到成功时,表示多份数据的写操作都已完成
失效转移
当一台数据服务器宕机时,应用服务器访问其他服务器。保证数据访问不会失效
三部分
失效确认
通过心跳检测和应用程序访问失败报告
失效转移
数据恢复
网站的伸缩性架构
服务器集群
通过不断地向集群中添加服务器来增强整个集群的处理能力
分为两类
根据功能进行物理分离实现伸缩
单一功能通过集群实现伸缩
应用服务器集群
应用服务器应该设计为无状态(不存储请求上下文信息)
技术
HTTP重定向负载均衡
DNS域名解析负载均衡
反向代理负载均衡
IP负载均衡
数据链路层负载均衡
负载均衡算法
轮询
加权轮询
随机
最少连接
最符合负载均衡的算法
源地址散列
同一个IP的请求总是在同一个服务器上处理
分布式缓存集群
目的:新加入缓存服务器后应使整个缓存服务器集群中已经缓存的数据尽可能还被访问到
存在问题
新增服务器,会导致命中率大幅度地降低
方案
1.在网站访问量最少的时候扩容缓存服务器集群
2.一致性Hash算法
一致性Hash算法
通过一个叫做一致性Hash环的数据结构实现KEY到缓存服务器的Hash映射
先构造一个长度为2^32的整数环(这个环称作为Hash环),根据节点名称的Hash值[0,2^32-1]将缓存服务器节点放置在这个Hash环上。然后根据需要缓存的数据的Key值计算得到Hash值(其分布范围也同样为[0,2^32-1]),然后在Hash环上顺时针查找距离这个Key的Hash值最近的缓存服务器节点,完成key到服务器的hash映射
新加入节点只会影响整个环中的一小段
扩展
问题
新增新节点会导致负载压力不均衡问题
解决方案
设置虚拟层:将每台物理缓存服务器虚拟为一组虚拟缓存服务器,将虚拟服务器的Hahs值放置在Hash环上,Key在环上先找到虚拟服务器节点,再得到物理服务器的信息
数据存储服务器集群
关系型数据库集群
Cobar模型
NoSQL数据库集群
网站的可扩展性架构
概念
扩展性
对现有系统影响最小的情况下,系统能够持续扩展或提升的能力
基础设施稳定不需要经常变更
应用之间较少的耦合度
伸缩性
系统能够通过增加(或者)减少自身资源规模的方式增强(减少)自己计算处理事务的能力
分布式消息队列
通过消息对象分解系统耦合性,不同子系统处理同一个消息
事件驱动架构
通过在低耦合的模块之间传输事件消息,以保持模块的松散耦合,并借助事件消息的通信完成模块之间的合作
发布-订阅模式
新增业务,只要对该类消息感兴趣,即可订阅该消息,对原有系统没有任何影响
分布式服务
通过接口分解系统耦合性,不同子系统通过相同的接口描述进行服务调用
业务拆分
纵向拆分
将一个大应用拆分为多个小应用,各个应用独立部署,降低耦合度
横向拆分
将复用的业务分拆出来,独立部署为分布式服务,新增业务只需要调用这些分布式服务,不需要依赖具体的模块代码
支持特性
负载均衡、失效转移、高效的远程通信、整合异构系统、对应用最少侵入、版本管理、实时监控
框架
Dubbo
网站的安全架构
攻击手段
XSS攻击
跨站点脚本攻击;黑客通过篡改网页,注入恶意HTML脚本,用户在浏览网页时,控制用户浏览器进行恶意操作
防范手段
消毒
对危险字符进行过滤
所有网站必备的XSS防攻击手段
HttpOnly
防止XSS攻击者窃取Coolie
注入攻击
两种形式
SQL注入攻击
OS注入攻击
防范手段
消毒
通过正则匹配,过滤请求数据中可能注入的SQL
参数绑定
使用预编译手段,绑定参数是最好的防SQL注入方法
CSRF攻击
跨站点请求伪造,利用浏览器Cookie或者服务器Session策略,盗取用户身份
防范手段
表单Token
验证码
Referer Check
Error Code
HTML注释
文件上传
路径遍历
Web防火墙
网站安全漏洞扫描
加密
单向散列加密
通过对不同输入长度的信息进行散列计算,得到固定长度的输入
MD5、SHA
对称加密
加密和解密使用的密钥是同一个密钥
适用于信息交换或者存储的场合,如Cookie加密,通信加密
DES、RC
非对称加密
加密和解密使用的密钥不是同一个密钥,对外公开的为公钥,只有所有者知道的为私钥;
信息安全传输、数字签名
RSA
0 条评论
下一页