网站建设面包屑导航条,定制开发电商网站建设多少钱,centos7 wordpress 安装,跨境商城网站建设目录
1.限流
2.缓存
2.1.缓存的使用场景
3.降级
3.1.什么是降级#xff1f;
3.2.服务降级方式
4.其他高并发手段
4.1. 集群
4.2.拆分
4.2.1 应用拆分
4.2.2 数据库
4.3. 静态化
4.4.削峰
4.5.限流
5.总结
参考 保护高并发系统的三大利器#xff1a;限流、熔…目录
1.限流
2.缓存
2.1.缓存的使用场景
3.降级
3.1.什么是降级
3.2.服务降级方式
4.其他高并发手段
4.1. 集群
4.2.拆分
4.2.1 应用拆分
4.2.2 数据库
4.3. 静态化
4.4.削峰
4.5.限流
5.总结
参考 保护高并发系统的三大利器限流、熔断降级、缓存
限流控制系统的请求量防止系统被过度压力而崩溃。缓存将一些常用的数据存储在内存中减轻数据库的压力提高系统的响应速度。降级当系统不能承受更多的请求时可以有意识地关闭一些不必要的功能或服务以保证核心功能的正常运行。
1.限流 限流是保护高并发系统的三把利器之一。限流在很多场景中用来限制并发和请求量。实现系统限流的方式有很多种比如令牌桶算法、漏桶算法等。
采用限流策略来控制用户的请求速率
限流常用的几种算法
1计数器限流
你要是仔细看了上面的内容就会发现上面举例的每秒阈值1000的那个例子就是一个计数器限流的思想计数器限流的本质是一定时间内访问量到达设置的限制后在这个时间段没有过去之前超过阈值的访问量拒绝处理举个例你告诉老板我一个小时只处理10件事这是你的处理能力但领导半个小内就断续断续给你分派了10件事这时已经到达你的极限了在后面的半个小时内领导再派出的活你是拒绝处理的直到下一个小时的时间段开始。
2漏斗限流
漏斗限流意思是说在一个漏斗容器中当请求来临时就从漏斗顶部放入漏斗底部会以一定的频率流出当放入的速度大于流出的速度时漏斗的空间会逐渐减少为0这时请求会被拒绝其实就是上面开始时池塘流水的例子。流入速率是随机的流出速率是固定的当漏斗满了之后其实到了一个平滑的阶段因为流出是固定的所以你流入也是固定的相当于请求是匀速通过的
2.缓存
2.1.缓存的使用场景 经常需要读取的数据 频繁访问的数据 热点数据缓存 IO 瓶颈数据 计算昂贵的数据 无需实时更新的数据 缓存的目的是减少对后端服务的访问降低后端服务的压力 1CDN 缓存 CDN 的全称是 Content Delivery Network即内容分发网络。CDN 是构建在网络之上的内容分发网络依靠部署在各地的边缘服务器通过中心平台的负载均衡、内容分发、调度等功能模块使用户就近获取所需内容降低网络拥塞提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术。 CDN 它本身也是一个缓存它把后端应用的数据缓存起来用户要访问的时候直接从CDN 上获取不需要走后端的 Nginx以及具体应用服务器 Tomcat它的作用主要是加速数据的传输也提高稳定性如果从 CDN 上没有获取到数据再走后端的Nginx缓存Nginx 上也没有则走后端的应用服务器CDN主要缓存静态资
2应用缓存 内存缓存 在内存中缓存数据效率高速度快应用重启缓存丢失 磁盘缓存 在磁盘缓存数据读取效率跟内存比较磁盘缓存稍低但应用重启缓存不会丢失3
3多级缓存
在整个应用系统的不同层级进行数据的缓存多层次缓存来提升访问效率比如浏览器 - CDN - Nginx - Redis - DB (磁盘、文件系统)
随着业务的不断增加服务器性能很快又到达瓶颈
3.降级
降级的最终目的是保证核心服务可用即使是有损的。而且有些服务是无法降级的
3.1.什么是降级
服务降级是当服务器压力剧增的情况下根据当前业务情况及流量对一些服务和页面有策略的降级以此释放服务器资源以保证核心任务的正常运行。
3.2.服务降级方式
延迟服务定时任务处理、或者mq延时处理。
页面降级页面点击按钮全部置灰或者页面调整成为一个静态页面显示系统正在维护中......。
关闭非核心服务比如电商关闭推荐服务、关闭运费险、退货退款等。保证主流程的核心服务下单付款就好。
写降级比如秒杀抢购我们可以只进行Cache的更新返回然后通过mq异步扣减库存到DB保证最终一致性即可此时可以将DB降级为Cache。
读降级比如多级缓存模式如果后端服务有问题可以降级为只读缓存
4.其他高并发手段
4.1. 集群 有一个单体应用当访问流量很大无法支撑那么可以集群部署也叫单体应用「水平扩容」原来通过部署一台服务器提供服务现在就多部署几台那么服务的能力就会提升。 部署了多台服务器但是用户访问入口只能是一个比如 www.evanshare.com所以就需要 「负载均衡」负载均衡是应用集群扩容后的必须步骤集群部署后用户的会话 session 状态 要保持的话就需要实现 session 共享。
4.2.拆分
4.2.1 应用拆分
应用的拆分分布式 微服务
单体应用随着业务的发展应用功能的增加单体应用就逐步变得非常庞大很多人 维护这么一个系统开发、测试、上线都会造成很大问题比如代码冲突代码重复逻辑错综混乱代码逻辑复杂度增加响应新需求的速度降低隐藏的风险增大所以需要按照 「业务维度进行应用拆分采用分布式开发」
应用拆分之后就将原来在同一进程里的调用变成了远程方法调用此时就需要使用到 一些「远程调用技」 httpClient、hessian、dubbo、webservice 等
随着业务复杂度增加我们需要采用一些开源方案进行开发提升开发和维护效率比 如 Dubbo、SpringCloud
通过应用拆分之后扩容就变得容易如果此时系统处理能力跟不上只需要「增加服务 器即可」把拆分后的每一个服务再多做几个集群
4.2.2 数据库
1数据库拆分
数据库拆分分为「垂直拆分和水平拆分 分库分表」 「按照业务维度把相同类型的表放在一个数据库另一些表放在另一个数据库」这种方式 的拆分叫「垂直拆分」也就是在 不同库建不同表把表分散到各个数据库
比如产品、订单、用户三类数据以前在一个数据库中现在可以用三个数据库分别为 「产品数据库、订单数据库、用户数据库」这样可以将不同的数据库部署在不同的服务器上提升单机容量和性能问题也解决多 个表之间的 IO 竞争问题
根据数据行的特点和规则将表中的「某些行切分到一个数据库而另外的某些行又切分 到另一个数据库」这种方式的拆分叫「水平拆分」
单库单表在数据量和流量增大的过程中大表往往会成为性能瓶颈所以数据库要进行「水平拆分」
2读写分离 主从复制
3数据库优化
4.3. 静态化
对于一些访问量大更新频率较低的数据可直接定时生成静态 html 页面供前端访问而不是访问 jsp
常用静态化的技术freemaker、velocity 定时任务每隔 2 分钟生成一次首页的静态化页面
页面静态化首先可以大大提升访问速度不需要去访问数据库或者缓存来获取数据浏览器直接加载 html 页即可
页面静态化可以提升网站稳定性如果程序或数据库出了问题静态页面依然可以正常 访问
4.4.削峰 削峰本质上是更多地延缓用户请求层层过滤用户的访问需求遵从“最后落地到数据库的请求数要尽量少”的原则 限流算法通过限制单位时间内请求的数量或速率来控制访问流量。常见的限流算法包括令牌桶算法和漏桶算法。 缓存将一部分数据缓存在内存中减少对数据库的访问次数从而降低服务器压力。 负载均衡将访问流量分散到多台服务器上避免单一服务器过载提高系统的可用性和稳定性。 异步处理将一些耗时的操作异步处理如发送邮件、生成报表等避免阻塞主线程提高系统的并发能力。 CDN加速通过将静态资源缓存在CDN节点上加速用户对静态资源的访问降低服务器压力
4.5.限流 通过削峰策略来平衡供需从而保证系统的正常运行 像漏斗一样尽量把数据量和请求量一层一层地过滤和减少需要查询的用户在缓存中能能查询到需要的信息无需通过每次查询数据库那么最后留下的就是真正需要成交的客户大大减轻DB的读写压力 1分层过滤的核心思想 通过在不同的层次尽可能地过滤掉无效请求。 通过CDN过滤掉大量的图片静态资源的请求。 再通过类似Redis这样的分布式缓存过滤请求等就是典型的在上游拦截读请求。
2分层过滤的基本原则 对写数据进行基于时间的合理分片过滤掉过期的失效请求。 对写请求做限流保护将超出系统承载能力的请求过滤掉。 涉及到的读数据不做强一致性校验减少因为一致性校验产生瓶颈的问题。 对写数据进行强一致性校验只保留最后有效的数据。 最终让“漏斗”最末端(数据库)的才是有效请求。例如当用户真实达到订单和支付的流程这个是需要数据强一致性的。
5.总结
高并发High Concurrency是互联网分布式系统架构设计中必须考虑的因素之一。
提高系统并发能力的方式方法论上主要有两种垂直扩展Scale Up与水平扩展Scale Out。前者垂直扩展可以通过提升单机硬件性能或者提升单机架构性能来提高并发性但单机性能总是有极限的互联网分布式架构设计高并发终极解决方案还是后者水平扩展。
同时结合一些策略达到分流、限流的目的
1.对于秒杀这样的高并发场景业务最基本的原则就是将请求拦截在系统上游降低下游压力。如果不在前端拦截很可能造成数据库(mysql、oracle等)读写锁冲突甚至导致死锁最终还有可能出现雪崩等场景。
2.划分好动静资源静态资源使用CDN进行服务分发。
3.充分利用缓存(redis等)增加QPS从而加大整个集群的吞吐量。
4.高峰值流量是压垮系统很重要的原因所以需要RocketMQ消息队列在一端承接瞬时的流量洪峰在另一端平滑地将消息推送出去。
以上为个人工作之余一些浅薄看法记录下来与诸位共享不足之处多多指点感激不尽
参考
[1]高并发场景你要如何实现系统限流
[2]分布式高并发服务三种常用限流方案简介
[3] 九师兄的博客 - 高并发之限流 RateLimiter使用