网站建设业务员,wordpress加载ajax,flas网站开发工具,企业网站建设实训体会削峰从本质上来说就是更多地延缓用户请求#xff0c;以及层层过滤用户的访问需求#xff0c;遵从“最后落地到数据库的请求数要尽量少”的原则。
1.消息队列解决削峰
要对流量进行削峰#xff0c;最容易想到的解决方案就是用消息队列来缓冲瞬时流量#xff0c;把同步的直…削峰从本质上来说就是更多地延缓用户请求以及层层过滤用户的访问需求遵从“最后落地到数据库的请求数要尽量少”的原则。
1.消息队列解决削峰
要对流量进行削峰最容易想到的解决方案就是用消息队列来缓冲瞬时流量把同步的直接调用转换成异步的间接推送中间通过一个队列在一端承接瞬时的流量洪峰在另一端平滑地将消息推送出去。 消息队列中间件主要解决应用耦合异步消息 流量削锋等问题。常用消息队列系统目前在生产环境使用较多的消息队列有 ActiveMQ、RabbitMQ、 ZeroMQ、Kafka、MetaMQ、RocketMQ 等。
在这里消息队列就像“水库”一样拦蓄上游的洪水削减进入下游河道的洪峰流量从而达到减免洪水灾害的目的。
2.流量削峰漏斗层层削峰
针对秒杀场景还有一种方法就是对请求进行分层过滤从而过滤掉一些无效的请求。
分层过滤其实就是采用“漏斗”式设计来处理请求的如下图所示 这样就像漏斗一样尽量把数据量和请求量一层一层地过滤和减少了。
1分层过滤的核心思想
通过在不同的层次尽可能地过滤掉无效请求。 通过CDN过滤掉大量的图片静态资源的请求。 再通过类似Redis这样的分布式缓存过滤请求等就是典型的在上游拦截读请求。
2分层过滤的基本原则
对写数据进行基于时间的合理分片过滤掉过期的失效请求。 对写请求做限流保护将超出系统承载能力的请求过滤掉。 涉及到的读数据不做强一致性校验减少因为一致性校验产生瓶颈的问题。 对写数据进行强一致性校验只保留最后有效的数据。 最终让“漏斗”最末端(数据库)的才是有效请求。例如当用户真实达到订
单和支付的流程这个是需要数据强一致性的。
总结
1.对于秒杀这样的高并发场景业务最基本的原则就是将请求拦截在系统上游降低下游压力。如果不在前端拦截很可能造成数据库(mysql、oracle等)读写锁冲突甚至导致死锁最终还有可能出现雪崩等场景。
2.划分好动静资源静态资源使用CDN进行服务分发。
3.充分利用缓存(redis等)增加QPS从而加大整个集群的吞吐量。
4.高峰值流量是压垮系统很重要的原因所以需要Kafka等消息队列在一端承接瞬时的流量洪峰在另一端平滑地将消息推送出去。