掌握流量治理的法则,轻松驾驭热点、促销等高QPS场景

前言

关于流量治理,其核心在于对数据流量从生成到消费的整个生命周期进行细致管理。这一过程涉及多个阶段,包括流量的产生、传输、处理和消费等等。在这一过程中,我们通常会采取一系列措施,目的是为了实现对流量的有效控制。例如,通过拦截非法流量,使服务免受恶意攻击;通过限制突发流量,以防止服务因超出承载能力而崩溃等等。流量治理的目标是在确保服务稳定、可靠的基础上,也能尽可能的提高系统的响应速度和处理能力,通过一系列的治理策略,使流量能够得到合理的分配与控制,提升用户体验,同时保障整个应用服务的健康和高效运作。
在这里插入图片描述

流量如何走过每一道关卡?

首先,我们可以从流量的入口开始,直到流量被业务服务所接受,处理完成这一过程来进行分析,看看整个过程流量到底需要经过哪些环节,每一环节又都能做些什么?
在这里插入图片描述

DNS(域名系统)

DNS通常是流量处理的第一道关卡,它的主要职责就是域名解析,也就是将人类可读的域名还原为服务器所认识的IP地址,也正是因为它是第一个获取到IP地址的地方,所以它自然能找到最合适的服务器进行分配,其实也就是根据用户的地理位置为用户选择最近的服务器,从而减少网络延迟,提升访问速度。

性能优化方面,DNS最常见的优化方式就是缓存,从而减少向上查询的次数,由于域名与IP的映射变动并不频繁,因此DNS缓存可以说无处不在,浏览器、操作系统、DNS服务器、CDN服务器、运营商DNS服务器、防火墙等等都会各自缓存一套。

CDN(内容分发服务)

在这里插入图片描述

CDN是专门为了加速业务服务的响应而存在的,将一部分的业务内容缓存到CDN节点中,当用户再发起请求访问这部分内容时,请求就会被调度到离用户最近的CDN节点中,并直接由该节点将内容返回给用户,从而有效的减少网络延迟,提升访问速度。

通过在用户与业务服务资源之间加一层CDN服务之后,有效的减少了业务服务的压力,尤其是对于网络带宽的消耗,试想一下,如果服务器需要对用户访问的每张图片、每个视频都进行传输,那真是压力大到随时崩溃。

负载均衡(Load Balance)

在这里插入图片描述

接下来就是熟悉的负载均衡了,按七层网络分层来看,通常负载均衡会在第四层传输层或者第七层应用层,也就是常说的四层负载和七层负载。

传统的四层负载均衡一般通过专门的TCP/UDP协议解析服务器优先进行处理,而七层负载基本上就是通过Nginx集群来完成。

负载均衡这一层不仅仅可对流量进行分发,同样也可以进行一些治理工作,比如可根据服务器的负载情况动态的对分发进行选择,可针对特定的源IP进行访问控制,同时还可提供DDoS攻击防护和WAF等安全防护功能。

API网关

在这里插入图片描述

到了这一层,流量就真正进入到了业务服务管理范畴内了。如今微服务架构已经成为一种主流的系统设计方案,而API网关又是微服务架构中的关键组件,它要负责请求的路由、负载均衡、认证鉴权等核心功能。通常我们使用的API网关例如:Spring Cloud Gateway或是Zuul都实现了对上述能力的支持。

同时,针对流量的监控、识别也是API网关的重要能力,通常像限流、熔断、降级,黑白名单,通过流量染色实现的灰度发布、链路追踪等也都非常适合在API网管层来实现。

总之,API网关作为微服务架构中的流量唯一入口,提供了一种对流量的集中识别、管理的方式,使得后端服务可以专注于针对具体业务场景下的流量处理策略。

治理的主要思想

微服务架构的主要思想就是将整个系统分解成多个独立的服务,每个服务都可以独立部署、扩展和维护,这同时也会导致一次请求处理可能需要跨越多个服务才能完成,这就得考虑服务之间的通信、依赖等因素给服务带来的额外影响。

从依赖的角度来看,通常我们会对各个服务的重要性进行评定,核心的服务与非核心的服务自然不能按照同等的条件来对待,简单来说,就是当核心服务与非核心服务产生任何冲突时,一定会优先保住核心服务,舍弃非核心服务。

因此对于流量的链路来说,从核心服务向非核心服务发起的请求,就一定是可熔断,可降级的,而从非核心服务向核心服务发起的请求,也一定是可限流、可被拒绝的。当然,同样的思想不仅仅是在核心服务与非核心服务之间才有,就算是核心服务,针对不同业务逻辑也是可以进行分级对待的。

其实,主要就是要做好隔离,这是常用的防止由局部问题向整体问题扩散的方法,要对有限的资源进行合理的分配,这里的资源除了像各种基础设施之外,还包括像线程池、连接池、对象池等,我们要避免这些资源被少数的流量长时间独享,从而导致其他流量无法被及时处理。

关于微服务之间一些链路依赖问题,可以参考《小心掉进微服务的“坑”》这篇文章。

如何能够快速的处理请求

在这里插入图片描述

前面主要是针对流量的一些限制、管控,不过限制归限制,我们还是希望能够尽可能的提升系统的吞吐能力,让更多的请求能够得到及时的处理。

通常,前期我们需要做好压测摸高,这样做的目的是为了找出系统所在的瓶颈,并针对性的进行优化,同时也会与线上实际流量进行对比,确保系统当前能够保持一定的富余能力,一来应对业务峰值,二来应对突发状况。
业务服务层面常使用缓存、异步、并行、消息队列等较为通用的方式,同时也可针对具体的业务场景进行特定的设计,比如将步骤尽可能的简化,使用高效的算法,设计特定的存储结构等等。

系统设计层面还有一点非常重要,就是服务的水平扩容能力,在大多数情况下,扩容是一种既快速又有效的提升服务承载能力的方式,所以保持水平扩容的能力是在系统设计时必须要考虑的,一般来说对于无状态的服务,扩容是非常容易的,而像数据库这一类有状态的服务就比较麻烦了,通常它们是无法快速扩容的,并且扩容之后因为要考虑到信息同步所带来的问题,因此代价也是非常大的,所以这一类服务往往也会成为系统承载能力的瓶颈。

预热也是一种有效的提升响应能力的手段,尤其在许多促销活动的场景时,由于对流量有明确的可预见性,因此往往在设计时就可以做一些额外的准备,常见的就是将一些待访问的资源优先加载好,这样当请求到来时即可直接获取。

关于接口响应优化可以参考《12条必会技巧打造超高性能的接口API》这篇文章。

总结

总之,流量治理是贯穿整个系统链路的过程,每个环节不但要各司其职,还要保证互不影响,稳定、可靠始终应当放在第一优先级来考虑,是关乎生死的问题,至于在保障稳定、可靠的前提之下,能做到多大的吞吐量,就取决于各自的能力了,从短期来看这是关乎业务能否继续扩大的问题,从长期来看,如果业务不能扩大,那一样是生死问题。

  • 17
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码拉松

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值