API网关管理
[TOC]
# 总体介绍
balance阶段是生命周期的第3步,主要功能是对后端节点进行路由和负载均衡。

balance阶段主要完成以下功能:
**1.负载均衡**
**2.前置lua选择节点**
# 1. 负载均衡
整体逻辑示意图如下:

##1.1 三种均衡方式
1. IP_HASH
2. 轮询
3. 权重
如下图所示:

##1.2 添加后端节点
###1.2.1 点击添加后端节点

###1.2.2 选择连接器
连接器类似于高速公路上的闸道口,它把高速路和周边的数据(城市)连接起来。对于连接器的具体描述,请参看《连接器》章节。

在弹出的界面中,有很多连接器,它们分别对应了不同种类的数据源。我们在此演示【简单url连接器】的使用。只要后端服务是用`静态url`可以直接访问的,都可以使用本连接器对其连接查询。
###1.2.3 配置后端节点

###1.2.4 启用|停用节点
比如我们查询IP归属地,连接了3个后端,但是有1个后端临时维护,那我们需要把这个后端暂时停用。

###1.2.4 启用|停用高级配置
在上一小节中,我们使用【启用】选项来完成后端节点的启停,如下所示:

但在多个服务器部署集群服务的情况下,手动启停会有不方便的情况。如下图所示:

假设我们有三台机器,每个接入点都对应三台服务器上的集群服务。那么问题是:
**如果IP1服务器重启,如何操作节点启停?**
在上面的图中我们看到了有四个IP1节点(如果您的API有100个以上,那大概率IP1节点也会出现100多次),在这种情况下,我们手动操作后端节点启停就太繁琐了。必须有一个办法,只操作一次,就让走IP1服务器的所有节点都关闭(或启动)。在易源平台,我们可以使用环境变量+启停高级配置的组合来完成这个需求。
####1. 创建一个环境变量IP1_enable
如下图所示:

####2.启停高级配置

如果有一天需要重启IP1节点,那么可以把IP1_enable这个变量设置为false(只要不是true),操作实时生效,所有在高级配置中设置过IP1_enable开关的节点都会立即关闭。
反之,如果IP1服务器重启好了 ,我们再把环境变量IP1_enable设置为true,那么所有IP1节点就都打开了。
# 2.前置lua选择节点
经过前面的小节,我们了解了如何添加节点以及如何使用变量进行节点启停,在多节点时,易源根据您的配置对它们进行IP_HASH、轮询、权重分流负载。在一些特别的情况下,我们可能会对选择哪个后端节点有强制的要求。如下图的需求:

在原来的集群上,我们对后端服务做了升级,打算将升级后的节点加入到工作节点列表中。加入后,我们希望在前端get过来的请求url中,必须带了select_code=temp_node参数的,这个请求才走新添加这个升级节点,这样我们可以很方便控制前端的测试流量。其流程如下图:

如果不带select_code=temp_node参数的,根据【lua代码选择节点】过程的判断,还是走原来的老节点集群,如下图:

我们来看下这个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.易源在后端节点列表中,选取打勾的节点。

2.在这些打勾的节点中,根据高级配置对他们进行过滤。

3.在前2个步骤会得到一个可用的节点池列表nodeList,这个nodeList被传入【代码筛选】回调,由回调函数输出一个新的nodeList。
4.易源把获取到的新nodeList进行IP_HASH、轮询或权重分流负载。
> 附:灰度发布的设置,一般可以按照ip或者用户id切流。具有随机性,容易控制比例;也可以按客户端来区分,比如PC端(WIN,MAC)、移动端(安卓,OS)等区别。