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