大型网站技术架构(读书笔记)
2022-08-12 20:52:54 13 举报
AI智能生成
登录查看完整内容
大型网站技术架构(读书笔记)
作者其他创作
大纲/内容
用户计算机和网站服务器通信的时间
网站服务器处理的时间
用户计算机浏览器构造请求解析响应数据的时间
感受到的时间包括
优化页面HTML式样
利用浏览器端的并发和异步特性
调整浏览器缓存策略
使用CDN服务
反向代理等手段
使浏览器尽快地显示用户感兴趣的内容、尽可能近地获取页面内容
即使不优化应用程序和架构,也能很大程度地改善用户视角下的网站性能
前端架构优化手段
用户视角的网站性能
开发人员关注的主要是应用程序本身及相关子系统的性能
响应延迟
系统吞吐量
并发处理能力
系统稳定性
技术指标
使用缓存加速数据读取
使用集群提高吞吐能力
使用异步消息加快请求响应及实现削峰
使用代码优化手段改善程序性能
主要优化手段
开发人员视角的网站性能
关注基础设施性能和资源利用率
网络运营商的带宽能力
服务器的硬件配置
数据中心网络架构
服务器和网络带宽的资源利用率
关注点
建设优化骨干网
使用高性价比定制服务器
利用虚拟化技术优化资源利用率
运维人员视角的网站性能
不同视角下的网站性能
执行一个操作需要的时间
响应时间
同时处理请求的数目,反应了系统的负载特性
并发数
单位时间内系统处理的请求数量,体现系统的整体处理能力
吞吐量
描述服务器或操作系统性能的一些数据指标
System Load(系统负载)
对象与线程数
内存使用
CPU使用
磁盘与网络I/O
包括
系统监控的重要参数
性能计数器
外框
开发和测试人员的视角
性能测试指标
以系统设计初期规划的性能指标为预期目标,对系统不断施加压力,验证系统在资源可接受范围内,是否能达到性能预期
性能测试
对系统不断地增加并发请求以增加系统压力,直到系统的某项或多项性能指标达到安全临界值
如:某种资源已经呈饱和状态,这时继续对系统施加压力,系统的处理能力不但不能提高,
架构师:各种工作负载下系统的性能
负载测试
超过安全负载的情况下,对系统继续施加压力,直到系统崩溃或不能再处理任何请求,以此获得系统最大压力承受能力
架构师:系统的瓶颈或不能接受的性能点
压力测试
在特定硬件、软件、网络环境条件下,给系统加载一定业务压力,使系统运行一段较长时间,以此检测系统是否稳定
不均匀的施压
稳定性测试
性能测试方法
性能测试报告
内存?
磁盘?
网络?
CPU?
代码问题?
架构设计不合理?
系统资源确实不足?
排查可能出现性能瓶颈的地方,定位问题
性能分析
Web前端性能优化
应用服务器性能优化
存储服务器性能优化
性能优化
性能优化策略
4.1、网站性能测试
合并CSS
合并JavaScript
合并图片
减少http请求
使用浏览器缓存
启用压缩
CSS放在页面最上,JavaScript放在页面最下
减少Cookie传输的数据量
静态资源使用独立域名
浏览器访问优化
CDN加速
反向代理
4.2、Web前端性能优化
减少数据访问时间
减少计算时间
缓存的本质是一个内存Hash表
缓存主要用来存放读写比很高、很少变化的数据
缓存的基本原理
频繁修改的数据
没有热点的访问
数据不一致与脏读
缓存可用性(缓存雪崩)
缓存预热
缓存穿透
合理使用缓存
分布式缓存架构
通信协议
序列化协议
远程通信设计需要考虑的问题
简单的通信协议
丰富的客户端程序
高性能的网络通信
高效的内存管理
互不通信的服务器集群架构
Memcached
分布式缓存
改善性能
改善扩展性
消峰
优点
异步操作
使用集群
使用多线程的原因主要有两个:IO阻塞与多CPU
将对象设计为无状态
使用局部对象
并发访问资源时使用锁
解决线程安全的手段
多线程
数据库连接
网络通信连接
线程
复杂对象
开销很大的系统资源
单例(Singleton)
对象池(Object Pool)
复用的两种模式
资源复用
数据结构
垃圾回收
代码优化
4.3、应用服务器性能优化
机械硬盘 vs 固态硬盘
B+树 vs LSM树
RAID0
RAID1
RAID3
RAID10
RAID5
RAID6
可靠性
性能
利用率
解决的问题
RAID vs HDFS
图
RAID技术比较
4.4、存储性能优化
4、瞬时响应:网站的高性能架构
4个9是具有自动恢复能力的高可用
网站可用性度量
网站可用性考核
5.1、网站可用性的度量与考核
负载均衡设备
应用层
分布式服务调用框架,软件负载均衡
服务层
复制
数据层
数据和服务的冗余备份及失效转移
5.2、高可用的网站架构
负载均衡
集群中的服务是无状态对等的
通过负载均衡进行无状态服务服务的失效转移
Session复制
通过源地址Hash算法实现
Session绑定(会话黏滞)
受Cookie大小限制
每次请求响应都传输Cookie,影响性能
用户关闭Cookie
弊端
利用Cookie记录Session
Session服务器
手段
应用服务器集群的Session管理
5.3、高可用的应用
使用负载均衡的失效转移策略
核心应用和服务优先使用更好的硬件
在运维响应速度上也格外迅速
部署时进行必要的隔离
分级管理
根据服务调度策略,进行重试、快速失败等
超时设置
调用通过消息队列等异步方式完成
避免一个服务失败导致整个应用请求失败的情况
异步调用
拒绝低优先级应用的调用,确保核心应用正常
随机拒绝部分请求调用
拒绝服务
关闭服务
服务降级
幂等性设计
策略
5.4、高可用的服务(可复用)
数据持久性
数据可访问性
数据一致性
高可用的数据
补偿和纠错
措施
数据强一致
数据用户一致
数据最终一致
一致性(Consistency)
可用性(Availibility)
系统具有跨网络分区的伸缩性
分区耐受性(Patition Tolerance)
CAP原理
保证数据有多个副本
异步热备
同步热备
热备
数据备份
快速切换到其它副本
心跳检测
应用程序访问失败报告
失效确认
访问转移
数据恢复
组成
失效转移
5.5、高可用的数据
网站发布
如果使用人工测试,成本、时间及测试覆盖率都难以接受
Selenium
自动化测试
预发布验证
代码控制
人的干预越少,自动化程度越高,引入故障的可能性就越小
自动化发布
灰度发布常用于AB测试
灰度发布
5.6、高可用网站的软件质量保证
服务器端日志收集
客户端浏览器日志收集
用户行为日志收集
服务器性能监控
运行数据报告
监控数据采集
系统报警
自动优雅降级
监控管理
5.7、网站运行监控
5、万无一失:网站的高可用架构
做到向集群中加入服务器的数量和集群的处理能力成线性关系
不同的服务器部署不同的服务,提供不同的功能
纵向分离(分层后分离)
横向分离(业务分割后分离)
两种情况
不同功能进行物理分离实现伸缩
集群内的多台服务器部署相同的服务,提供相同的功能
单一功能通过集群规模实现伸缩
6.1、网站架构的伸缩性设计
HTTP重定向负载均衡
DNS域名解析负载均衡
反向代理负载均衡
IP负载均衡
LVS
数据链路层负载均衡
负载均衡实现方式
轮询(Round Robin)
加权轮询(Weighted Round Robin)
随机(Random)
最少连接(Least Connections)
源地址散列(Source Hashing)
负载均衡算法
6.2、应用服务器集群的伸缩性设计(无状态)
余数哈希
一致性哈希
路由算法
6.3、分布式缓存集群的伸缩性设计(数据服务)
主从复制
不能跨库join
分库(微服务)
单表数据大
分片
避免事务或利用事务补偿机制代替数据库事务
分解数据访问逻辑避免JOIN操作
建议
关系数据库集群的伸缩性设计
结构化查询语言
事务一致性
放弃
高可用性
可伸缩性
强化
NoSQL数据库的伸缩性设计
6.4、数据存储服务器集群的伸缩性设计(数据服务)
6、永无止境:网站的伸缩性架构(Scalability)
具有将一个大系统切分成N个低耦合的子模块的能力,这些子模块包含横向的业务模块,也包含纵向基础技术模块
设计网站可扩展架构的核心思想是模块,并在此基础之上,降低模块间的耦合性,提高模块的复用性
这些组件模块以消息传递及依赖调用的方式聚合成一个完成的系统
分布式消息队列
分布式服务
分布式部署后的聚合方式
7.1、构建可扩展的网站架构
通过在低耦合的模块之间传输事件消息,以保持模块的松散耦合
并借助事件消息的通信完成模块间合作
事件驱动架构(Event Driven Architecture)
分布式消息队列(实现手段)
7.2、利用分布式消息队列降低系统耦合性
编译、部署困难
代码分支管理困难
数据库连接耗尽
新增业务困难
巨无霸应用
将一个大应用拆分为多个小应用
纵向拆分
将复用的业务拆分出来
横向拆分
拆分
示例
WSDL(Web Services Description Language)Web服务描述语言
UDDI(Universal Description,Discovery,and Integration)统一描述、发现、和集成
SOAP(Simple Object Access Protocol)简单对象访问协议
臃肿的服务注册和发现机制
低效的XML序列化手段
开销相对较高的HTTP远程通信
复杂的部署与维护手段
缺点
Web Service与企业级分布式
高效的远程通信
整合异构系统
对应用最少侵入
版本管理
实时监控
大型网站分布式服务的需求与特点
分布式服务框架的设计
7.3、利用分布式服务打造可复用的业务平台
列族(ColumnFamily)
7.4、可扩展的数据结构
API接口
协议转换
安全
审计
路由
流程
7.5、利用开放平台建设网站生态圈
7、随需应变:网站的可扩展架构(Extensibility)
分布式消息队列通过消息对象分解系统耦合性,不同子系统处理同一个消息;分布式服务通过接口分解系统耦合性,不同子系统通过相同的接口描述进行服务调用;
XSS攻击即跨站点脚本攻击(Cross Site Script)
指黑客通过篡改网页,注入恶意HTML脚本,在用户浏览网页时,控制用户浏览器进行恶意操作的一种攻击方式
攻击者诱使用户点击一个嵌入恶意脚本的链接,达到攻击目的
反射型
黑客提交含有恶意脚本的请求,保存在被攻击者Web站点的数据库中,用户浏览网页时,恶意脚本被包含在正常页面中,达到攻击目的
持久型
常见的XSS攻击类型有两种
举例:< 转义为 <
消毒
浏览器禁止页面JavaScript访问带有HttpOnly属性的Cookie
HttpOnly
防攻击
XSS攻击
攻击者在请求中注入恶意SQL,服务器用请求参数构造数据库SQL命令时,恶意SQL被一起构造,并在数据库中执行
攻击前提:对数据库表结构有所了解
开源
错误回显
盲注
了解数据库表结构的手段
避免猜到表结构
举例:过滤诸如“drop table”
使用预编译手段,参数绑定是最好的防SQL注入方法
参数绑定
SQL注入攻击
注入OS命令、编程语言代码等,利用程序漏洞,达到攻击目的
举例:PHP的exec()函数
OS注入攻击
主要有两种形式
注入攻击
CSRF(Cross Site Request Forgery),跨站点请求伪造
攻击者通过跨站请求,以合法用户的身份进行非法操作,如转账交易、发表评论等
其核心是利用了浏览器Cookie或服务器Session策略,盗取用户身份
总结:主要是识别请求者身份
表单Token
验证码
Referer Check
CSRF攻击
配置Web服务器参数,跳转到500页面
Error Code(错误回显)
HTML注释
限制文件类型
修改文件名?
文件上传
路径遍历
其它攻击和漏洞
开源产品:ModSecurity
Web应用防火墙(WAF)
网站安全漏洞扫描
8.1、道高一尺魔高一丈的网站应用攻击与防御
MD5
SHA
扩展:生成信息摘要
扩展:计算具有高度离散程度的随机数
单向散列加密
加解密效率高
系统开销小
适合对大量数据加密
远程通信情况下,如何安全的交换密钥是个难题
DES
AES
RC-5
IDEA
常用的算法
对称加密
扩展:数字签名(不可抵赖)
实际使用中,先使用非对称加密技术对对称密钥进行安全传输
然后使用对称加密技术进行信息加解密与交换
RSA
ECC:椭圆曲线算法
Elgamal
HTTPS传输中浏览器使用的数字证书实质上是经过权威机构认证的非对称加密的公钥
非对称加密
信息加密技术
单向散列加密用的salt
对称加密的密钥
非对称加密的私钥
加密技术的重要前提是密钥的安全
优点:专人维护,密钥泄漏的概率大大降低
缺点:该服务可能会成为应用的瓶颈
缺点:远程调用,影响性能
把密钥和算法放在一个独立的服务器上
算法放在应用系统中,密钥放在独立服务器中且分片存储
改善密钥安全性的手段
密钥安全管理
8.2、信息加密技术及密钥安全管理
主要解决敏感词过滤的问题
正则匹配效率低
常用的有Tire树的变种
构造多级哈希表
文本匹配
针对广告贴、垃圾邮件、信息自动分类
贝叶斯分类算法
分类算法进行训练(概率)
分类算法
垃圾邮件、信息去重
Hash表
布隆过滤器
实现方式
黑名单
8.3、信息过滤与反垃圾
账户风险
买家风险
卖家风险
交易风险
风险
规则引擎是一种将业务规则和规则处理逻辑相分离的技术
业务规则文件由运营人员通过管理界面编辑,当需要修改规则时,无需修改代码发布程序,即可实时使用新规则
规则处理逻辑则调用规则处理输入的数据
规则引擎
机器学习算法
统计模型
风控
8.4、电子商务风险控制
8、固若金汤:网站的安全架构
第2篇:架构
关注人而不是产品
发掘人的优秀
共享美好蓝图
共同参与架构
学会妥协
成就他人
14、架构师领导艺术
发现问题,寻找突破
提出问题,寻求支持
解决问题,达成绩效
15、网站架构师职场攻略
16、漫话网站架构师
第4篇:架构师(TODO)
高并发、大流量
高可用
海量数据
用户分布广泛,网络情况复杂
安全环境恶劣
需求快速变更,发布频繁
渐进式发展
1.1、大型网站软件系统的特点
初始阶段的网站架构
应用服务和数据服务分离
使用缓存改善网站性能
使用应用服务器集群改善网站的并发处理能力
数据库读写分离
使用反向代理和CDN加速网站响应
使用分布式文件系统和分布式数据库系统
使用NoSQL和搜索引擎
业务拆分
1.2、大型网站架构演化发展历程
大型网站架构技术的核心价值是随网站所需灵活应对
驱动大型网站技术发展的主要力量是网站的业务发展
1.3、大型网站架构演化的价值观
一味追随大公司的解决方案
为了技术而技术
企图用技术解决所有问题
1.4、网站架构设计误区
1、大型网站架构演化
分层
分割
服务调用必须通过网络,可能会对性能造成影响
服务器越多,服务器宕机的概率也就越大,使网站可用性降低
保持数据一致性困难,对业务正确性和业务流程造成影响
网站依赖错综复杂,开发管理维护困难
引入的问题
可以改善网站性能和并发性
加快开发和发布速度
减少数据库连接资源消耗
使不同应用复用共同的业务,便于业务功能扩展
分布式应用和服务
静态资源分布式部署可以减轻应用服务器的负载压力
通过使用独立域名可以加快浏览器并发加载的速度
由负责用户体验的团队进行开发维护有利于网站的分工合作,使不同技术工种术业有专攻
分布式静态资源
分布式数据和存储
分布式计算
分布式配置
分布式锁
分布式文件
常见的分布式方案
分布式
集群
CDN
本地缓存
缓存
提高系统可用性
加快网站响应速度
消除并发访问高峰
异步
冗余
自动化代码管理
自动化安全检测
自动化部署
自动化监控
自动化报警
自动化失效转移
自动化失效恢复
自动化降级
自动化分配资源
自动化
2.1、网站架构模式
2.2、架构模式在新浪微博的应用
2、大型网站架构模式
在浏览器端,可以通过浏览器缓存、使用页面压缩、合理布局页面、减少Cookie传输等手段
使用CDN,将网站静态内容分发至离用户最近的网络服务商机房,使用户通过最短访问路径获取数据
可以在网站机房部署反向代理服务器,缓存热点文件,加快请求响应速度,减少应用服务器的负载压力
在应用服务器端,可以使用服务器本地缓存和分布式缓存,通过缓存在内存中的热点数据处理用户请求,加快请求处理过程,减轻数据库负载压力
通过异步操作将用户请求发送至消息队列等待后续任务处理,而当前请求直接返回响应给用户
在网站有很多用户高并发请求的情况下,可以将多台应用服务器组成一个集群共同对外服务,提高整体处理能力,改善性能
在代码层面,通过使用多线程、改善内存管理等手段优化性能
在数据库服务器端,索引、缓存、SQL优化
优化手段
TPS
系统性能计数器
指标
对于应用服务器而言,多台应用服务器通过负载均衡设备组成一个集群共同对外提供服务
对于存储服务器,需要对数据进行实时备份
除了运行环境,网站高可用还需要软件开发过程的质量保证
减少将故障引入线上环境的可能,避免故障范围扩大
可用性
是否可以用多台服务器构建集群
是否容易向集群中添加新的服务器
加入新的服务器后是否可以提供和原来的服务器无差别的服务
集群中可容纳的总的服务器数量是否有限制
衡量标准
对于应用服务器,服务器上不保存数据,通过使用合适的负载均衡设备就可以向集群中不断加入服务器
一致性哈希分片
对于缓存服务器集群,需要改进缓存路由算法保证缓存数据的可访问性
通过路由分区等手段将部署有多个数据库的服务器组成一个集群
关系型数据库虽然支持数据复制,主从热备等机制,但是很难做到大规模集群的可伸缩性
大部分NoSQL产品,先天就是为海量数据而生,伸缩性非常好
伸缩性
事件驱动架构
第三方开放平台接口
主要手段
扩展性
安全性
3、大型网站核心架构要素(质量属性)
第1篇:概述
9、淘宝网的架构演化案例分析
10、维基百科的高性能架构设计分析
11、海量分布式存储系统Doris的高可用架构设计
12、网购秒杀系统架构设计案例分析
13、大型网站典型故障案例分析
第3篇:案例
大型网站技术架构(读书笔记)
0 条评论
回复 删除
下一页