API网关管理

[TOC] # 总体介绍 balance阶段是生命周期的第3步,主要功能是对后端节点进行路由和负载均衡。 ![](https://oss.showapi.com/doc/3105/71/f47541c690814f248c7a2d31fcd9c225.png) balance阶段主要完成以下功能: **1.负载均衡** **2.前置lua选择节点** # 1. 负载均衡 整体逻辑示意图如下: ![](https://oss.showapi.com/doc/3105/71/0e827763fdab4ed8be243a149d72b496.png) ##1.1 三种均衡方式 1. IP_HASH 2. 轮询 3. 权重 如下图所示: ![](https://oss.showapi.com/doc/3105/71/ec8e491a8f1f46c481fb37f188f94a46.png) ##1.2 添加后端节点 ###1.2.1 点击添加后端节点 ![](https://oss.showapi.com/doc/3105/71/eadc442179224cdba0d24a904e00e299.png) ###1.2.2 选择连接器 连接器类似于高速公路上的闸道口,它把高速路和周边的数据(城市)连接起来。对于连接器的具体描述,请参看《连接器》章节。 ![](https://oss.showapi.com/doc/3105/71/536be494938345bdaacda6ec23626172.png) 在弹出的界面中,有很多连接器,它们分别对应了不同种类的数据源。我们在此演示【简单url连接器】的使用。只要后端服务是用`静态url`可以直接访问的,都可以使用本连接器对其连接查询。 ###1.2.3 配置后端节点 ![](https://oss.showapi.com/doc/3105/71/8d16ad4c87ab4ce9b34e4c0e94c4b491.png) ###1.2.4 启用|停用节点 比如我们查询IP归属地,连接了3个后端,但是有1个后端临时维护,那我们需要把这个后端暂时停用。 ![](https://oss.showapi.com/doc/3105/71/6917349db3c84291b304619a1c582880.png) ###1.2.4 启用|停用高级配置 在上一小节中,我们使用【启用】选项来完成后端节点的启停,如下所示: ![](https://oss.showapi.com/doc/3105/71/fb1f5b095214485ea2bec2b515909eb4.png) 但在多个服务器部署集群服务的情况下,手动启停会有不方便的情况。如下图所示: ![](https://oss.showapi.com/doc/3105/71/db81d19d6e3e4f2aa5f639a99f8951fe.png) 假设我们有三台机器,每个接入点都对应三台服务器上的集群服务。那么问题是: **如果IP1服务器重启,如何操作节点启停?** 在上面的图中我们看到了有四个IP1节点(如果您的API有100个以上,那大概率IP1节点也会出现100多次),在这种情况下,我们手动操作后端节点启停就太繁琐了。必须有一个办法,只操作一次,就让走IP1服务器的所有节点都关闭(或启动)。在易源平台,我们可以使用环境变量+启停高级配置的组合来完成这个需求。 ####1. 创建一个环境变量IP1_enable 如下图所示: ![](https://oss.showapi.com/doc/3105/71/de57134b620447109ce12616edd6b5a5.png) ####2.启停高级配置 ![](https://oss.showapi.com/doc/3105/71/4375e12d7c554665903c1eb92981549d.png) 如果有一天需要重启IP1节点,那么可以把IP1_enable这个变量设置为false(只要不是true),操作实时生效,所有在高级配置中设置过IP1_enable开关的节点都会立即关闭。 反之,如果IP1服务器重启好了 ,我们再把环境变量IP1_enable设置为true,那么所有IP1节点就都打开了。 # 2.前置lua选择节点 经过前面的小节,我们了解了如何添加节点以及如何使用变量进行节点启停,在多节点时,易源根据您的配置对它们进行IP_HASH、轮询、权重分流负载。在一些特别的情况下,我们可能会对选择哪个后端节点有强制的要求。如下图的需求: ![](https://oss.showapi.com/doc/3105/71/5fdf38ab7585425d915985b295c3c19e.png) 在原来的集群上,我们对后端服务做了升级,打算将升级后的节点加入到工作节点列表中。加入后,我们希望在前端get过来的请求url中,必须带了select_code=temp_node参数的,这个请求才走新添加这个升级节点,这样我们可以很方便控制前端的测试流量。其流程如下图: ![](https://oss.showapi.com/doc/3105/71/dfc4bd23c79e4b6dbcfb831f1b5b1e05.png) 如果不带select_code=temp_node参数的,根据【lua代码选择节点】过程的判断,还是走原来的老节点集群,如下图: ![](https://oss.showapi.com/doc/3105/71/e6c960b74015412f86fa6be409dafc41.png) 我们来看下这个LUA回调代码是怎么写的: ```lua --本函数根据输入的节点列表,根据业务筛选后,返回一个新的节点列表 function( inParams, --输入的所有参数,包括headers,url,post showapi_env, --环境变量容器 nodeList --在后端节点列表中,打上勾并满足高级配置的所有可用节点 ) if inParams.select_code=="temp_node" then local newarr={} --新建一个列表 table_insert(newarr,v) --把此节点加入新列表 return newarr --返回新列表 else return nodeList --返回原始节点列表 end end ``` 实际调用的业务逻辑过程是: 1.易源在后端节点列表中,选取打勾的节点。 ![](https://oss.showapi.com/doc/3105/71/26086e8474834055ad58758ee731fe90.png) 2.在这些打勾的节点中,根据高级配置对他们进行过滤。 ![](https://oss.showapi.com/doc/3105/71/1dc048d646b3427fac631a289cecdb8a.png) 3.在前2个步骤会得到一个可用的节点池列表nodeList,这个nodeList被传入【代码筛选】回调,由回调函数输出一个新的nodeList。 4.易源把获取到的新nodeList进行IP_HASH、轮询或权重分流负载。 > 附:灰度发布的设置,一般可以按照ip或者用户id切流。具有随机性,容易控制比例;也可以按客户端来区分,比如PC端(WIN,MAC)、移动端(安卓,OS)等区别。