docker

利用OpenResty搭建动态API网关

2017-02-20  本文已影响5105人  RavenZZ
apigateway.jpg

首先,什么是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请求

上一篇 下一篇

猜你喜欢

热点阅读