文档章节

利用OpenResty搭建动态API网关

xiaomin0322
 xiaomin0322
发布于 2018/05/28 17:54
字数 567
阅读 178
收藏 0

首先,什么是API网关?

如上图, API 网关作为全部客户端的单一入口点

使用API网关的优势:

  • 确保客户端无法察觉应用程序是如何被拆分为多项微服务的。
  • 确保客户端不受服务实例的位置的影响。
  • 为每套客户端提供最优API。
  • 降低请求/往返次数。举例来说,API网关能够确保客户端在单次往返中就从多项服务中检索出数据。请求数量更少意味着运行负担更低且用户体验更好。API网关对于移动应用而言是必不可少的。
  • 将从客户端调用多项服务的逻辑转换为从API网关处调用,从而简化整个客户端。

什么是OpenResty?

"OpenResty is not an Nginx fork. It is just a software bundle"
也就是说Openresty 是基于Nginx的一个软件包, 内部包含各种可用的库, 可参考链接 awesome-resty
OpenResty

如何做到动态呢?

搭配服务发现, 下面使用的是Consul

正常使用Nginx作为API网关, 需要如下配置, 当加后端实例时, reload一下Nginx, 使其生效

upstream test {
    server 192.168.0.1;
    server 192.168.0.2;
}

那么只要让upstream变成动态可编程就OK了, 当新增后端实例时, 无需reload, 自动生效

可参考的代码

  1. 又拍云的 slardar, ps: 吐槽一下这个名字, "斯拉达"... 这是Dota玩多了么
  2. 微博的nginx-upsync-module

如下nginx-upsync-module 中, 可以设置每隔n秒, 同步Consul中的kv或者Service

http {
    upstream test {
        # fake server otherwise ngx_http_upstream will report error when startup
        server 127.0.0.1:11111;

        # all backend server will pull from consul when startup and will delete fake server
        upsync 127.0.0.1:8500/v1/kv/upstreams/test upsync_timeout=6m upsync_interval=500ms upsync_type=consul strong_dependency=off;
        upsync_dump_path /usr/local/nginx/conf/servers/servers_test.conf;
    }

    upstream bar {
        server 127.0.0.1:8090 weight=1 fail_timeout=10 max_fails=3;
    }

    server {
        listen 8080;

        location = /proxy_test {
            proxy_pass http://test;
        }

        location = /bar {
            proxy_pass http://bar;
        }

        location = /upstream_show {
            upstream_show;
        }

    }
}

最后, OpenResty的开发基于lua或者C, 使用lua可以相对轻松开发出高性能的服务, 如下链接包含的代码片段, 利用openresty实现合并多个后端get/post请求,
利用openresty实现合并多个后端API请求



https://blog.csdn.net/shenshouer/article/details/52925735

https://link.jianshu.com/?t=https://github.com/weibocom/nginx-upsync-module

https://github.com/upyun/slardar

本文转载自:https://www.jianshu.com/p/5a98efeac82b

xiaomin0322
粉丝 140
博文 3776
码字总数 192875
作品 0
上海
架构师
私信 提问
OpenResty x Open Talk 武汉站

一、活动介绍 OpenResty 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 ...

又拍云
04/11
0
0
OpenResty x Open Talk 丨北京站

一、活动介绍 OpenResty 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 ...

又拍云
03/04
0
0
OpenResty x Open Talk丨深圳站

一、活动介绍 OpenResty 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 ...

又拍云
2018/12/13
0
0
好未来吴钧泽:当 OpenResty 遇上教育行业

2019 年 3 月 23 日,OpenResty 社区联合又拍云,举办 OpenResty × Open Talk 全国巡回沙龙·北京站,好未来高级工程师吴钧泽在活动上做了《 当 OpenResty 遇上教育行业 》的分享。 OpenRe...

又拍云
04/11
0
0
OpenResty简介、编译安装

OpenResty,也被称为“ngxopenresty”,是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方的Nginx模块和大部分系统依赖包,用于方便地搭建能够处理超高并发...

justin_peng
2018/07/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

硬件配置

https://akkadia.org/drepper/futex.pdf sudo lshw -businfo[sudo] lambda 的密码: Bus info Device Class Description======================================......

MtrS
今天
2
0
springmvc的return “success”源码解读

qqqq

architect刘源源
今天
4
0
Java程序员五面阿里分享 逆袭成功 太不容易了!

前言 拿到阿里实习offer,经历了5次面试,其中4轮技术面,1轮HR面试。在这里分享一下自己的面试经验和学习心得。希望能够帮助更多的小伙伴。 我本科毕业于中南大学信管专业,真正开始学习Jav...

别打我会飞
昨天
4
0
Android Camera模块解析之视频录制

《Android Camera架构》 《Android Camera进程间通信类总结》 《Android Camera模块解析之拍照》 《Android Camera模块解析之视频录制》 《Android Camera原理之CameraDeviceCallbacks回调模...

天王盖地虎626
昨天
2
0
手把手教你使用issue作为博客评论系统

自从上周在阮一峰的 每周分享第 60 期 看到了可以将 GitHub 的 issue 当作评论系统,插入第三方网页的 JS 库——utterances。我就对此“魂牵梦绕”。个人博客使用的是VuePress。 TLDR (不多废...

jump--jump
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部