大型网站技术架构
2020-06-17 17:56:48 55 举报
AI智能生成
大型网站技术架构
作者其他创作
大纲/内容
架构演化
大型网站的特点
高并发、大流量
高可用<br>
海量数据
用户分布广泛,网络情况复杂<br>
安全环境恶劣<br>
需求快速变更,发布频繁
渐进式发展
架构的演化发展历程
单服务器<br>
应用服务和数据服务分离
缓存(分布式缓存服务器)
应用服务器集群
数据库读写分离
CDN+反向代理
分布式文件系统+分布式数据库
NoSQL+搜索引擎
业务拆分
分布式服务
价值观
技术的核心价值:随网站所需灵活应对
驱动技术发展的力量:业务发展推动技术发展
误区<br>
一味追随大公司解决方案:学习借鉴但勿盲从
为了技术而技术:勿脱离网站业务发展的实际
企图用技术解决所有问题:业务问题,也可以通过业务手段解决
架构模式<br>
分层
目的(优点)
单一职责
高内聚,低耦合
易维护(方便后期扩展和伸缩)<br>
分割<br>
业务分割
优点
高内聚,低耦合
易维护(方便后期扩展和伸缩)<br>
分布式
优点<br>
处理高并发、大数据量
缺点
网络导致性能有影响
多机宕机会导致可用性降低<br>
分布式事务及数据一致性保障难度提升,影响业务正确性和流程
网站复杂度提高,维护困难
方案
分布式应用和服务
分布式静态资源
分布式数据和存储
分布式计算
分布式配置
分布式文件<br>
集群
目的/优点<br>
高并发,高可用
缓存
方案<br>
CDN<br>
反向代理
本地缓存
分布式缓存
异步
方案
单一服务器:多线程供词昂内存
分布式系统:分布式消息队列
优势<br>
提高系统可用性(异步解耦)
加快网站响应速度
消除并发访问高峰
影响
用户体验和业务流程
冗余
目的
高可用
方式
定期的冷备份<br>
主从分离的热备份
灾备数据中心
自动化
目的<br>
高效的发布运维
发布自动化
自动化代码管理
自动化测试<br>
自动化安全检测
自动化部署
运行自动化
自动化监控<br>
自动化报警
自动化失效转移
自动化失效恢复
自动化降级
自动化分配资源
安全
举例<br>
密码、收集校验码
通信加密
验证码
应对攻击
信息过滤
风险控制<br>
架构要素概括
功能需求
性能
常见方案
衡量指标
响应时间
TPS
性能计数器
可用性
常见方案
冗余
衡量指标
n个9
衡量方式
1台或多态服务器宕机时的应对<br>
伸缩性
衡量指标
是否可以用多台服务器构件集群
是否容易新增服务器
急群众可容纳的总服务器数量是否有限制
常见方案
应用服务器
缓存服务器
数据库
扩展性
目的
能够快速响应需求变化
常见方案
事件驱动架构:消息队列
分布式服务:业务和可复用服务分离<br>
安全
衡量标准
对各种攻击与窃密手段,有可靠应对
架构要素详细
性能
目的
改善用户体验
考量
不一定技术手段解决,可以通过优化交互体验解决<br>
考虑代价是否接受(增加服务器、可用性降低等)
性能测试<br>
测试指标
响应时间
并发数
吞吐量
性能计数器
测试方法
性能测试
负载测试
压力测试
稳定性测试
测试报告
优化策略<br>
性能分析
目的:通过测试报告,找出性能瓶颈,再指定优化方案
性能优化方法<br>
Web前端优化方法
浏览器访问优化
减少http请求<br>
使用浏览器缓存<br>
启用压缩
CSS在上,JS在下
减少cookie传输
CDN加速
反向代理<br>
应用服务器性能优化方法
使用分布式缓存
缓存基本原理
内存hash表<br>
合理使用
避免频繁修改的数据<br>
避免没有热点的访问
注意数据不一致与脏读
缓存可用性(避免缓存失效导致数据库崩溃)
缓存预热
缓存穿透
分布式缓存架构<br>
需要同步更新的分布式缓存
不互相通信的分布式缓存
Memcached
原理<br>
缓存独立为服务器
应用程序通过一致性hash路由选择缓存服务器
优点
高可伸缩性<br>
通信协议简单
客户端丰富
高性能网络通信<br>
高效内存管理
使用异步操作(消息队列)
优点<br>
提高扩展性
提高性能(提高响应延迟)
削峰
使用集群+负载均衡
代码优化<br>
使用多线程
目的<br>
IO处理时利用CPU
服务器都是多核CPU
最佳线程数
和CPU核数、IO阻塞时间成正比
(计算时间+IO等待时间)/计算时间*CPU核数<br>
线程安全问题注意<br>
对象设计为无状态
使用局部对象
使用锁
加强资源复用
概念
减少开销大的系统资源的创建和销毁,如数据库连接、复杂对象、网络通信连接等<br>
方法<br>
单例<br>
对象池
合理使用数据结构
理解垃圾回收机制,对程序进行优化<br>
例:根据系统特点,合理设置YG和OG区大小,减少Full GC<br>
存储性能优化
机械换固态
可扩展
核心思路
降低耦合
横向业务的拆分
纵向技术模块的拆分
方案
分布式消息队列<br>
依据:事件驱动架构
原理:增加消息服务器,消除直接调用,降低发送者和接受者耦合<br>
分布式服务
纵向拆分:大应用拆分多个小应用
子主题
横向拆分:拆分复用业务
web service<br>
分布式服务框架<br>
特性
负载均衡
失效转移
高效远程通信
整合异构系统
最好应用侵入
版本管理
实时监控
Dubbo
原理<br>
子主题
可扩展数据结构
NoSQL
开放平台
高可用
可用性含义:可有效访问的特性
度量与考核
度量
2个9、3个9正常范围;4个9以上要求较高
1-一年不可用时间/年度总时间
考核
故障分=故障时间*故障权重
高可用基本思路
数据和服务的冗余备份<br>
失效转移
高可用架构 <br>
核心策略
架构分层:应用、服务、数据
根据不同层特点,设计不同方案
应用层
特点
高并发,无状态
方案
负载均衡服务器进行实效转移
有状态使用session管理
1.session复制:服务器共享session,大型集群不适用
2.session绑定:ip指定服务器,但无法高可用<br>
3.cookie记录session:大小有限制,影响性能,用户关闭无法用
4.session服务器
服务层
1.无状态服务通过负载均衡
2.区分服务优先级,高级用好的硬件、物理机,且保证隔离;低级使用虚拟机
3.超时设置:避免失去响应
4.异步调用:避免异常服务阻塞其他服务,前提是确认业务上是否可以异步<br>
5.服务降级:高峰期采用随机拒绝低或直接关闭低优先级服务
6.考虑业务幂等性:判断业务是否多次重复调用不影响后果
数据层
缓存
观点1:缓存需要高可用<br>
观点2:不保证高可用,但通过共享缓存集群,保证一个缓存服务器宕机影响微小化
CAP<br>
数据一致性
强一致
用户一致:存储不一致,但访问时有纠错和校验,保证返回正确
最终一致:不符合前两者,但通过一定时间的纠错修正,最终会一致
数据可访问性
数据持久性<br>
备份
冷备份
不能保证最终一致性
热备份
异步热备份
主从服务器
主存储服务器发起备份
读写分离
同步热备份
应用程序发起备份<br>
失效转移
失效确认
心跳检测
访问失败报告
访问转移
对等存储情况:根据配置,应用程序直接切换到对等服务器
不对等情况:重新计算路由,选择存储服务器
数据恢复
恢复副本服务器数量
高可用网站软件
金丝雀发布
自动化测试
预发布
代码控制
主干发布,分支开发
自动化发布
灰度发布
运行监控
监控数据采集
用户行为日志收集
服务器端收集<br>
客户端/浏览器收集
服务器性能监控
运行数据报告
监控管理
系统报警
失效转移
自动优雅降级
可伸缩
本质:增加服务器就能轻易地提高性能
整体策略
分布式
横向拆分业务
纵向拆分业务<br>
集群
多个服务器,相同业务
应用服务器方案<br>
负载均衡
http重定向
域名解析负载均衡<br>
反向代理:正向代理隐藏客户端,反向代理隐藏服务器
ip层的负载均衡
数据链路层负载均衡(三角传输)
负载均衡算法
轮询<br>
加权轮询
随机
原地址散列<br>
分布式缓存方案
要点
缓存服务器中数据不同,伸缩时容易导致命中下降,引起缓存击穿<br>
方案一
访问量少时扩容缓存服务器,并预热缓存
方案二
一致性hash算法
数据存储方案
关系型数据库
表分片<br>
cobar
amoeba
NoSql数据库<br>
hbase
架构师
如何领导<br>
关注人而非产品:寻找值得共同奋斗的目标,营造发挥价值的工作氛围
发掘优秀的人<br>
共享美好蓝图
表述清楚的<br>
形象的
简单的
共同参与架构
共同设计架构
共同维护架构
学会妥协和接受建议
相信团队,成就他人
如何工作
发现问题,寻找突破
体验与期望的差距
向来来如此,便对么
新员工注意
首先要融入团队<br>
不着急证明自己
提出问题,寻求支持
问题被发现,问题是发现者的;问题被提出,问题才是问题拥有者的
提问技巧<br>
“我的问题”表述为“我们的问题”
给上司提封闭式问题,给下属提开放式问题
指出问题而不是批评人:目的在于解决问题
用赞同的方式提问:委婉地提
解决问题,达成绩效<br>
技巧
先解决你的问题,再解决自己的问题<br>
适当逃避问题
0 条评论
下一页