大型网站架构核心要素
2022-11-02 16:31:16 14 举报
AI智能生成
高性能 高并发 高可用 后端服务 IT架构
作者其他创作
大纲/内容
可扩展性:主要指功能扩展性
1)系统基础设置稳定,不需要经常变更
2)应用之间较少依赖或者耦合
3)对需求变更可以敏捷响应
1)系统基础设置稳定,不需要经常变更
2)应用之间较少依赖或者耦合
3)对需求变更可以敏捷响应
目的:使其能够快速响应需求变化。
衡量标准:服务增加新的业务产品时,是否
可以实现对现有产品透明无影响。
架构设计:对扩展开放,对修改关闭。
衡量标准:服务增加新的业务产品时,是否
可以实现对现有产品透明无影响。
架构设计:对扩展开放,对修改关闭。
分布式架构
目的:低耦合高内聚
模式:中台架构
业务服务框架:SpringCloud,Dubbo
分布式服务特点:负载均衡、失效转移、高效的RPC通信、整合异构系统、对业务侵入最少、版本管理
分布式消息队列实现业务解耦
生产者消费者模式属于事件驱动架构
可扩展的数据结构
关系型数据库-表结构设计
非关系型数据库-天然可扩展性
开放能力
统一开放平台
利用开放平台建设网站生态圈
安全性
XSS攻击:(Core Site Script)跨站脚本攻击
注入攻击:SQL注入/OS注入攻击
CSRF攻击:(Cross Site Request Forgery 跨站点请求伪造)
在用户不知情的情况下,以用户身份伪造请求
其他漏洞攻击
ErrorCode 堆栈信息
HTML注释
文件上传漏洞
安全产品:WAF
信息加密技术与密钥安全管理
单项散列加密
场景:接口加密、密码加密
对称加密:加密和解密使用的是同一个密钥
DES算法,RC算法
非对称加密:公钥+私钥模式
RSA算法
密钥安全管理
信息过滤与反垃圾
文本匹配
双数组Trie算法
分类算法
朴素贝叶斯算法、TAN算法、ARCS算法
黑/白名单
Hash表(扩容寻址:一致性hash算法)、布隆过滤器(存在误判)
架构演进之路
服务和数据分离
缓存的使用
数据库读写分离
反向代理+CDN加速
使用NoSQL和搜索引擎
分布式框架-微服务
SpringCloud Alibaba
Dubbo
高性能
衡量指标
响应时间
并发数
网站系统用户数 >> 网站在线用户数 >> 网站并发用户数
系统性能计数器
吞吐量
TPS(每秒事务数)
HPS(每秒中HTTP请求数)
QPS(每秒查询数)
不同视角下的网站性能
用户视角下的网站性能
浏览网站加载的是快还是慢?
优化页面HTML样式
浏览器端的并发和异步特性
调整浏览器缓存策略
使用CDN服务
反向代理
开发人员视角下的网站性能
使用缓存加速数据读取
使用集群提高吞吐能力
使用异步消息加快响应及流量削峰
代码优化改善程序性能
运维人员视角下的网站性能
更加关注基础设施性能和资源利用率
网络运营商的带宽能力
服务器硬件的配置
系统集群网络架构
服务器和网络带宽的利用率
性能测试方法
性能测试
对系统不断施压,直到达到性能预期
负载测试
对系统不断施压,直到系统的某项或多项性能指标达到安全临界值
压力测试
超过安全临界值情况下继续施压,直到系统崩溃或者不能再处理任何请求
稳定性测试
给系统加载一定业务压力运行一段较长时间,以此检测系统是否稳定
性能分析:排查请求处理的各个环节耗时日志,检查各个环节监控数据分析影响性能的主要因数(内存、磁盘、网络、CPU、代码问题、架构问题、资源确实不足)
性能优化
WEB前端性能优化
浏览器访问优化
减少HTTP请求
使用浏览器缓存
启用压缩,减少通信传输数据量
文本文件(HTML/CSS/JS)的压缩效率可达80%
CSS放在页面最上面,JS放在页面最下面
浏览器在下载完全部css后才开始渲染,JS则是立即执行
较少Cookie传输
CDN加速
CDN本质仍是一个缓存,将数据缓存在离用户最近的地方,缓存静态资源:图片、文件、CSS、Script、静态网页
反向代理:服务器端代理称为反向代理
反向代理服务器具备保护网站安全的作用
反向代理服务器配置缓存功能加速web请求
反向代理实现负载均衡功能
应用服务器性能优化
分布式缓存:二八原则
知其可用
存放读写比例比较高、很少变化的数据;
知其不可用
不可存放频繁修改的数据
不可存放没有热点访问的数据
不可不解决数据不一致和脏读问题
不可对缓存性能强制依赖,防止缓存雪崩带来的服务宕机
不可不考虑缓存击穿,防止恶意请求对DB造成的压力
简单解决方案是把不存在的数据也缓存起来,其value为null
分布式缓存架构:产品分析
Memcached
Redis
异步操作:异步+回调技术(任何可以晚点做的事情都应该晚点做)
使用MQ将调用异步化
要处理好异步执行结果的回到通知
使用集群
代码优化
多线程
一台服务器上启动线程数=[任务执行时间 /(任务执行时间-IO等待时间)] x CPU内核数
CPU计算型任务
IO阻塞型任务
线程安全问题
讲对象设计为无状态对象
使用局部对象
并发访问资源时使用锁
资源复用:要尽量减少那些开销很大的系统资源的创建和销毁
单例技术
对象池技术
数据结构:程序=数据架构 + 算法
垃圾回收
精准内存管理
存储性能优化
数据库层面
索引
缓存+预加载技术
SQL优化
引入NoSQL
数据模型
存储架构
伸缩特性
从机械硬盘到固态硬盘
B+树 和 LSM树
RAID 和 HDFS
高可用性:主要手段是冗余
应用服务:会话无状态的负载均衡
部署架构上对服务进行分级管理,核心应用和服务优先使用更好的硬件,在运维响应速度上也格外迅速。
RPC超时设置,重试或将请求转移到幂等性其他服务上
同步调用改成MQ异步调用
服务降级:1)拒绝服务:拒绝低优先级应用的服务 2)关闭功能:关闭部分不重要的功能
幂等性设计:在服务层保证服务重复调用和调用一次产生的结果相同,及服务具有幂等性。
存储服务:集群模式
数据备份
异步热备
主从模式:MySQL主从备份
同步热备
主主模式:客户端并发向多个存储服务器同时写入数据,都返回成功才算成功
失效转移
失效确认
心跳检测
应用程序访问失败报告
访问转移
选举算法
数据恢复
从健康的服务器恢复数据,将数据副本数目恢复到设定值
DevOps:完成飞行中飞机换引擎的工作
灰度发布:总体要求整个发布过程中不影响该用户的体验
分类1:大型集群,分时间段分批发布,把控新版本带来的回滚风险
分类2:灰度版本,种子用户,收集用户操作行为、收集用户体验报告,亦称:AB测试
自动化测试
解决需要全面的回归测试的难题
预发布验证
快速失败:早发现早治疗
预发布服务器和线上服务器唯一不同就是没有配置在负载均衡服务器上,外部用户无法访问。
代码管理
主干开发,分支发布
分支开发,主干发布
自动化发布
火车发布模型
示意图
运维监控:不允许没有监控的系统上线
用户行为日志收集
服务端日志收集
客户端日志收集
服务器性能监控
运行数据报告
监控管理
系统报警
失效转移
自动优雅降级
伸缩性:通过增/减服务器资源数量实现抗压能力的线性增/减
应用服务器集群的伸缩性设计:负载均衡技术(会话无状态)
HTTP重定向负载均衡
DNS域名解析负载均衡
反向代理负载均衡
IP负载均衡
数据链路层负载均衡
负载均衡算法
轮询:平均分发
加权轮询:加权重分发
随机:随机数分发
最少链接:将请求分发到最少链接的服务器上
源地址散列:根据请求来源的IP地址进行Hash计算,得到相应服务器
缓存服务器:要解决缓存路由失效的问题
一致性Hash算法
经典语录:计算机的任何问题都可以通过增加一个虚拟层来解决
关系数据库:分库/分表/表分区
分库:主从读写分离
分表组件:Cobar/Mycat等组件
NoSQL:先天支持弹性伸缩
放弃了: 1)结构化查询语句 2)事务一致性保证
具备了:1)高可用性 2)可伸缩性
0 条评论
下一页