三高架构之业务和负载均衡
动静分离库存三高方法论 三高架构之负载均衡
指标
并发数吞吐量平均响应时间可靠性指标指标之间的关系 如何优化系统
并发数
第一层:DNS服务器,域名解析成IP地址第二层:CDN服务器,将请求发到,距离用户网络拓扑最近的服务器
三高架构之业务和负载均衡先保证方案 简单可用,再考虑通用性和复用性
总体思路:负载均衡,缓存(减少链路深度),消息队列(削峰解耦异步),分库分表
动静分离动态数据和静态数据
所有用户看到的页面都是一样的,也是静态数据(第一个用户的请求,将其静态化)
归为静态的数据,就是为了做缓存,提高性能,减少链路。
app缓存,浏览器缓存,apache,缓存
库存1.访问量大,是瓶颈
2.为了数据的一致性,要加锁,更是瓶颈
锁库存
思路:负载均衡,缓存,分库分表
1个库存字段 100个库存。10个库存字段,10个库存。
一张表:商品id,总库存。
reids:商品id-库存-1:10 ,商品id-库存-2:10
总库存:100 ,锁库存:1 (++)
释放锁的时候,锁库存–
写数据,读数据。
写:读写分离,分库分表,延迟操作
读:多级缓存,请求数据的优化
数据传输的少。减少cpu,io。
请求数少(一个页面,发起请求少)
依赖少。(高可用。5个0.99=0.95)
短路径,短url。(路径短,缓存。)
减少传输
避免单点。降级方案
预估系统用户量,大于量了
限流,拒绝。动态扩缩容
三高架构之负载均衡 指标 并发数1.并发的用户数,有一部分用户使用业务,另外一部分用户 挂机,没有具体操作。
2.并发连接数。用户和服务器之间的链接。一部分链接在传输数据,一部分链接 仅仅链接而已。
3.并发请求数。请求静态数据,可能是写操作。
4.并发线程数。系统内,并发的线程数目。
同时服务的调用方的数量
吞吐量单位时间内,能接受和返回的数据请求量。
1.看业务逻辑。
2.看请求的数据。
TPS: Transaction Per Second。每秒进行的事务的数目。(整体定义事务的 请求、操作、返回)
QPS:Queries Per Second。每秒查询量。
TPS和QPS的关系:打开首页就是一个事务,由具体的场景来决定。一个TPS可能包括多个QPS
平均响应时间用户的角度。响应时间(请求发出,接受到响应,之间的时间)
所有响应时间的平均值。
可靠性指标平均无故障时间。
系统上线,到第一次发生故障,运行时间的平均值。
公式计算:
阿姆达尔定律:
加速比:优化前的响应时间/优化后的响应时间。 r。
增强比例:某个模块的响应时间/总时间。 <=1,p。
整体系统的平均响应时间: t新=t老时间*((1-p)+p/r)。
整体系统的加速比: 1/((1-p)+p/r)。
目的:优化P值大的系统。加大r
指标之间的关系并发数对吞吐量的关系:
开始增加,到满了后达到最大,后面慢慢下降
并发数对响应时间:
前面缓缓上升,后指数上升
平均响应时间对并发数的影响
用户角度:并发数不受系统的影响
系统角度:并发数越多,响应时间越长,响应时间越长,并发数越多,恶性循环。
可靠性指标和其他指标
其他指标越差,可靠性指标越差
减少并发数。防止系统并发数过高。
开发工程师:限流
架构师:
日常方案、工业设计。
检票闸机口,开多个,分流
把原来指向一个系统的请求,分散到不同的系统上。
将请求到达系统前的各个阶段,对请求进行分流。
第一层:DNS服务器,域名解析成IP地址A记录(Address)。ip。
CName记录(Canonical name别名)。域名到域名。
使用A记录和CNAME进行域名解析的区别A记录就是把一个域名解析到一个IP地址(Address,特制数字IP地址),而CNAME记录就是把域名解析到另外一个域名。其功能是差不多,CNAME将几个主机名指向一个别名,其实跟指向IP地址是一样的,因为这个别名也要做一个A记录的。但是使用CNAME记录可以很方便地变更IP地址。如果一台服务器有100个网站,他们都做了别名,该台服务器变更IP时,只需要变更别名的A记录就可以了。
一个域名映射到多个ip地址
一个域名映射多个域名,多个域名映射多个ip地址
dns负载均衡:域名添加多个A记录(IP地址)。
第二层:CDN服务器,将请求发到,距离用户网络拓扑最近的服务器特点:占用流量大,不经常变
(拓扑的近 是动态变化的,网络负载,内容可用性,设备工作状态)
传统的http访问过程是用户在浏览器填入要访问的域名,浏览器调用域名解析函数库对域名进行解析,以得到此域名对应的IP地址;再通过IP地址向域名的服务主机发出数据访问请求,得到请求数据,最终返回所需要的内容。CDN的基本思路则是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,通过在网络各处放置节点服务器构成在现有互联网基础之上的智能虚拟网络。CDN系统能够实时地根据网络流量和各节点的连接、负载状况,以及到用户的距离和响应时间等综合信息,将用户的请求重新导向离用户最近的服务节点。
一举两得:
1.减少 每个系统的并发数
2.让用户访问离他最近的系统(网络拓扑最近),降低网络延迟,减少平均响应时间
部署成本增高,数据的同步会复杂
找专门的CDN提供商
cnd节点,缓存节点,边缘节点。
源站。
用户请求—>边缘节点(静态资源比如图片,有的话直接返回,没有访问源站并缓存)
缓存静态内容:配置规则列表,决定哪些数据需要缓存
动态内容:源站处理
例子1:未引入CDN
假设你原先的服务器在华南,服务器上有张图片,此时,所有的用户,想要访问这张图片,都只能跑到华南这台服务器,哪怕用户本人在华北。
例子2:引入CDN
引入CDN后,访问情况就不同了。CDN最主要的功能就是实现了资源的就近访问。比如阿里云在华南、华东、华北都有CDN服务器,那么,华北的用户此时访问那张图片,就可以直接跑华北的CDN服务器上了,于是速度就快了。
什么是“源站”
但这里有个问题,华北的服务器上,图片从哪来的,不会凭空冒出来。这就是”源站“的作用了。
华北用户访问华北的DDN服务器,华北的CDN服务器发现没有用户想要的图片,于是就跑到”源站“去找那张图片,找到后,就给用户返回,并在本地缓存住。下次再有访问请求过来,直接就返回缓存的图片。
这就是”源站“的作用了,上面的过程,就是”回源“。大致的流程是
用户 --> CDN服务器 --> 源站
减少用户系统的并发数(挡流量)。
减少了平均响应时间。
减少了网络拥堵。
怎么学最快:自己设计。然后对比别人方案优劣
请求的目的是baidu.com,不让用户到真正的服务器上,将请求打到离我最近的节点。
拦截



