# go-gateway **Repository Path**: hezimige/go-gateway ## Basic Information - **Project Name**: go-gateway - **Description**: 基于go的网关 - **Primary Language**: Unknown - **License**: BSD-3-Clause - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-03-26 - **Last Updated**: 2023-03-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: Gateway ## README # go-gateway #### 介绍 基于go的有基本功能的网关 #### 该项目是学习完go的基础知识和反向代理相关知识及负载均衡后将所学知识结合在一起进行实践的作品。 该网关支持通过yaml配置文件配置服务代理与负载均衡,有基于fail-over计数器机制和降权机制的简易服务健康检查,后续会支持连接自己构建的注册中心。 #### 目前已实现的功能 1. 根据yaml配置文件进行服务代理和负载均衡器的创建 2. 内置多种负载均衡方式,暴露出来的有三种,普通轮询和平滑加权轮询以及Ip-hash方式。 3. 通过go实现的责任链构建了过滤器,使其可以允许对鉴权,白名单,限流或修改输入输出内容等功能的补充和添加。 4. 不使用注册中心时,有简易的健康状态检查,使用的是学习负载均衡时学到的fail-over计数器机制和降权机制进行安全检查。 #### 后续计划 1. 接入自己的注册中心,从中获取服务信息 2. 熔断之类的功能就不弄了 3. xxxx #### 使用说明 项目打开后,找到configure里的yaml配置文件进行配置 ``` server: //网关启动端口配置 port: 9999 gateway: //随便起的名字,这里主要控制是否连接注册中心, hasRegister: false proxy: //配置代理层 loadBalance1: //负载均衡名字,未使用注册中心时,需要在这里配置负载均衡器及里面的服务 head: /web //使用什么前缀访问该负载均衡器内的服务 loadBalanceWay: sw-polling //该负载均衡器负载均衡方式 不填默认为普通轮询 polling:普通轮询 sw-polling:平滑加权轮询 ip-hash:ip-hash方式,可确保同一ip每次均访问同一服务器,避免session不共享等问题 failMaxNum: 5 //当使用轮询方式时填写 不填默认为5 代表最大失败次数 当达到该次数时服务标识为down successCount: 2 //当使用轮询方式时填写 不填默认为2 代表成功次数 当达到该次数时服务标识为up failFactor: 5.0 //降权因子,默认是5.0 增加降权值,增加量为该服务权重的1/5 用于降权机制的负载均衡-平滑加权轮询 recoverFactor: 2.0 //加权因子,默认是2.0 当健康检查成功时则减少降权值 减少量为当前服务权重的1/2 用于降权机制的负载均衡-平滑加权轮询 checkTime: 30 //配置健康检查时间间隔,默认为15s web1: //服务标识,随意命名 serverName: web //标识该服务名称,接入注册中心后才起作用 weight: 3 //权重 平滑加权轮询时必填 path: /web1 //该服务路由路径,后续有用 pass: http://localhost:9091 //该服务最终路由地址 接入注册中心则从注册中心获取 web2: serverName: web weight: 1 path: /web2 pass: http://localhost:9092 web3: serverName: web weight: 1 path: /web2 pass: http://localhost:9093 ``` #### 特技