Nginx是高性能的HTTP和反向代理服务器。目前已经普遍应用到各大互联网公司,国内基于Nginx又分别改造推出了Tengix和Openresty,笔者所在的公司也在逐步推广Nginx作为业务系统的接入层,同时使用lua开发脚本,将业务逻辑前置来减轻后端服务器的压力(Nginx的并发能力非常强,很适合处理轻量级业务)。
接口聚合是很多业务系统需要实现的功能,可以前置到Nginx上做,聚合的目的一方面是减少用户请求次数,提高响应性能;另一方面,Nginx并发处理能力更强。下面给出一个简单的实现案例。
接口聚合的原理
假设页面展示要调用三个接口a.json,b.json,c.json
,(a,b,c之间没有逻辑依赖关系,且对应A、B、C三个服务端系统),则客户端需要发送三次请求才能拿到完整的接口数据。
接口内容分别为:
a.json
{
"name":"A","testA":[a1,a2,a3]}
b.json
{
"name":"B","testB":[b1,b2,b3]}
c.json
{
"name":"C","testC":[c1,c2,c3]}
接口聚合的原理如下图,将a.json,b.json,c.json
聚合为/api/abc.json
,当请求到达Nginx,再分离成三个请求到不同服务端,拿到数据后再由Nginx组装好后返回给客户端。这样,减少了请求数,也减少了请求并发数(统一接入层的并发数减少,单个后端系统的并发数仍不变),同时提高了客户端和服务端的性能。
接口内容是:
{
ckey: "{"name":"