10000 GitHub - xiangtan/api-gateway
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

xiangtan/api-gateway

 
 

Repository files navigation

部署介绍

新建项目:
    go mod init za.group/life-gateway
    go mod tidy

配置:
    日志配置log.xml和全局配置文件config.yaml,需要和二进制平级
    Config.yaml 需要指定配置加载方式(Conf.Mode),目前支持本地配置加载、Nacos配置中心加载两种方式:
    (1)本地配置方式(Conf.Mode=local):
         需要将配置信息配置在Config.yml 的Local 节点下
            运行示例:./run &
    (2)Nacos配置方式(Conf.Mode=nacos):
         NACOS启动因素:NACOS_ADDRESS、NACOS_NAMESPACE、NACOS_DATAID、NACOS_GROUP
         启动因素配置支持三种方式:
        (1)将Nacos的启动因素配置在启动参数
            运行示例:./run -NACOS_ADDRESS=192.168.43.22:8888 -NACOS_NAMESPACE=dev -NACOS_DATAID=life-gateway -NACOS_GROUP=DEFAULT_GROUP &
        (2)将Nacos的启动因素配置在环境变量
            运行示例:./run &
        (3)将Nacos的启动因素配置在Config.yml Nacos 节点下
            运行示例:./run &
         加载优先级:
            优先用启动命令参数,然后环境变量,最后本地配置
         
编译&运行:
    环境:go 1.17+ ,linux
    cd life-gateway
    go env -w CGO_ENABLED=0 GOOS=linux GOARCH=amd64
    go build -o run main.go

设计目的

    高性能可伸缩弹性部署的 API Gateway 中间件,不做业务定制功能
    支持功能:
        接口管理:接口权限管理,restful 接口支持,源接口和目标的接口的相对路径地址不要求一致,但URL的可变参数名称和数量需要保持一致
        限流:保护后台服务
        降级:供开发环境Api Mock,生产突发访问或故障降级非核心接口
        服务端客户端超时(keepalive、readtimeout)
        配置管理:支持本地配置和Nacos配置两种方式
        优雅停机:等待请求处理完成

第三方中间件依赖

    mysql:启动时强依赖;启动后,定时刷新
        应用场景:用于加载API动态信息到内存
    redis:启动时强依赖;启动后,定时刷新
        应用场景:雪花算法NodeId控制、限流

表设计

    共7张表
    1、api
        对api行为的描述,描述了api的行为,比如api是如何应对降级、限流、超时、监控等问题
    2、group
        对api分组管理的描述,由业务方自己去根据业务的特点进行分类,仅为了方便api管理方集中管理和归类api,不会影响api的系统特性
        以保险行业举例:
            当api管理者以领域角度分组:分组(group_code)就是公共域、客户、产品、订单、保单、账务、财务 ......
            当api管理者以流程角度分组:分组(group_code)就是新契约、保全、续期、续保、理赔、营销(券、活动) ......
            多种分组可以同时存在,不要求一个api只能有一个分组,主要还是看api管理者怎么归类管理起来更清晰
    3、env
        对api环境管理的描述,目前支持dev、test、prd
        api渐进式发布流程思路(需要在api后台管理系统完成):
            (1)api调用方提供调用方excel api信息(使用场景、并发),api服务方开发人员补充完excel其他信息,由后台管理系统导入,系统会在开发环境生成api信息
            (2)调用方和服务方开发人员完成对接,服务方开发人员点击提测,api会同步测试环境并生效,并通知测试人员验证
            (3)测试人员完成测试,可以由运维点击发布,api将同步生产环境并生效
    4、tenant
        对api租户管理的描述,描述了api调用者及其个性化的api行为
    5、api_group
        api和分组的映射多对多关系,一个api可以有多个分组,一个分组下可以有多个api
    6、api_tenant
        api和租户的映射多对多关系,一个api可以被多个调用者租户使用,一个调用者租户下可以使用多个api
    7、api_env
        api和环境的映射多对多关系,一个api可以在多个环境下,一个环境下可以有多个api
        维护了api在各个环境的状态
        dev 状态 :草稿 -> 测试中 -> 已发布
        test 状态 :测试中 -> 已发布
        prd 状态:已发布
    具体设计见table.sql

流控设计

1、是否开启流控,通过Rate.Enable控制流控是否生效,true为生效
2、支持server和client两种模式,通过Rate.Mode配置控制
    (1)server模式(Rate.Enable = server):
        
556D
从后台服务实际处理能力这个角度限流,侧重系统的保护
    (2)client模式(Rate.Enable = client):
        从调用方实际请求QPS的角度限流,侧重对调用方后台服务能力的承诺;
        后台需要做好自我保护处理(超时、熔断、限流),防止服务出现异常时,请求挤压,无法处理客户实际QPS
3、两种限流模式实现方案
    (1)启动依赖redis
    (2)启动后,探活redis
        redis 探活失败,分布式限流到本地限流,直到redis alive again,降级是为了避免redis故障引发网关不可用     

监控设计

网关只负责上报数据,数据处理过程走数据分析流程
1、数据上报
    (1) 数据定义
        定义了什么业务场景(Metric、MetricType)在什么时间(Time)做了一件什么样的事情(Key),以及具体事情内容(Content)
        type Event struct {
            // what business, mandatory
            Metric string
            // what scenario, secondary category under Metric, allow null
            MetricType string
            // what time, mandatory
            Time string
            // what's happening
            Content interface{}
            // happening key info
            Key string
        }
       日志需要分片
2、数据采集&过滤&存储
     filebeat -> es 
3、数据清洗聚合
     es -> 再清洗(实时、非实时)
4、数据展示
    dashboard

TODO list

1、监控设计 监控内容 全局配置 api配置 2、Api gateway admin

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Go 100.0%
0