美文网首页docker
利用OpenResty搭建动态API网关

利用OpenResty搭建动态API网关

作者: RavenZZ | 来源:发表于2017-02-20 23:13 被阅读5105次
    apigateway.jpg

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

    相关文章

      网友评论

      本文标题:利用OpenResty搭建动态API网关

      本文链接:https://www.haomeiwen.com/subject/dszewttx.html