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