某一天有一个项目服务突然出现异常
,接入我们定位到的服务原因是有大量的突发流量进来 ,那么我们会先采取被动的何排临时手段去处理当前故障,接着上线Nginx的除差限流功能进行快速止损 ,防止二次故障 。异快但是速落Nginx的限流功能是比较粗糙的,免费模板所以我们有一个更好的大量地长期措施,即项目接入限流功能 ,新老项目限流并实现按维度进行精细化的接入限流,化被动解决为主动防御、服务主动治理。何排对于这一个项目来说,除差做到这一步应该是异快比较好的效果。 那么我们能否更进一步?更进一步我们需要考虑经验积累、通用性、整体效益这三个方面。 我们的方案设计需要考虑不同项目之间的差异性
,因为我们需要接入的项目可能有十几个甚至更多,不同项目的差异性会体现在开发语言 、请求类型
、生命周期、部署环境、链路节点等方面
。 其中我们特别需要注意的是生命周期
,有的项目可能是服务器租用十几年前就存在的老项目,有的可能是最近两三年的较新的项目
,还有的可能是以后会建立的全新项目
,我们的方案需要能够同时匹配这三种项目,以及需要抹平其他的几种差异
。 此外,建站模板我们的方案也有一些其他的期望目标,比如低成本、高效率
、高质量,以及专业性 、稳定性、可扩展性、高性能 。 其他几点则比较好理解,那么摆在我们眼前的问题就是项目的数量多 ,差异性大,期望目标和要求也多,那么我们应该如何设计这个方案
? 在介绍具体的技术方案之前,模板下载我简单讲述一下我们的协作方式。 在公司内部推广一个技术落地 ,我们通常会采用单项目的方式进行 ,即单独某个项目了解需求
、设计、开发
,在本项目落地之后再逐步推广到其他项目
,这种方式虽然没有问题,但是存在几个缺点 : 基于以上情况
,我们设计了一个专业组机制,希望能够让专业的人做专业的事
,工作流程如下: 首先从多个有需求的项目组里招募感兴趣或者有经验的成员加入专业组,比如图示里从项目组1、项目组2和项目组3里各抽出一个人成立专业组
,然后针对这几个项目设计总体方案
,以满足他们的需求
,在项目落地之后,再逐步推广到其他项目。 与单项目推进相比,专业组机制的优点如下: 在解决现有功能上 ,专业组在整个过程中发挥了很大的作用。 下面我们介绍具体的技术方案。 首先的问题是我们的限流应该做在哪一层?一般来说我们可以在应用层限流,也就是在API服务节点再增加一个web中间件
,在请求进入API服务时判断请求是否被限流
,这是比较常见的方式 ,对于单个项目而言成本也是最低的 。 除了应用层实现限流之外 ,还有接入层实现限流的做法。在原先的LB到API节点之间 ,我们可以增加一个网关层,将限流功能做在网关层
。 两种方法相比较
,应用层限流有以下缺陷
: 基于以上情况我们选择了接入层实现限流
。在接入层实现,我们就需要一个网关作为统一的记录层。 按照官方的说法
,Kong网关是一个轻量 、快速、灵活的云原生API网关
,Kong是基于OpenResty和Nginx实现的 。我们在解决这一个问题的情况下,为什么要选择Kong
?也是基于我们常见的高性能、高可用
、灵活、易扩展等方面。其中我们特别在意以下两点:一、大量地背景
1 、新老项目限流场景 


二 、技术方案
