# 智能网关 Smart Gateway

智能网关(Smart Gateway)是基于 Apache APISIX 二次开发;由应用服务控制台组成,依赖ETCD服务。 是一个动态、实时、高性能的 API 网关, 提供负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等丰富的流量管理功能。 你可以使用 智能网关 来处理传统的南北向流量,以及服务间的东西向流量, 也可以当做 k8s ingress controller 来使用。

智能网关 的技术架构如下图所示:

# 智能网关 的优势

功能 Apache APISIX KONG
项目归属 Apache 软件基金会 Kong Inc.
技术架构 Nginx + etcd Nginx + postgres
交流渠道 微信群、QQ 群、邮件列表、GitHub、meetup GitHub、论坛、freenode
单核 QPS (开启限流和 prometheus 插件) 18000 1700
平均延迟 0.2 毫秒 2 毫秒
支持 Dubbo 代理
配置回滚
支持生命周期的路由
插件热更新
用户自定义:负载均衡算法、路由
resty <--> gRPC 转码
支持 Tengine 作为运行时
MQTT 协议支持
配置生效时间 事件通知,低于 1 毫秒更新 定期轮询,5 秒
自带控制台
对接外部身份认证服务
配置中心高可用(HA)
指定时间窗口的限速
支持任何 Nginx 变量做路由条件

# 特性

你可以把 智能网关 当做流量入口,来处理所有的业务数据,包括动态路由、动态上游、动态证书、 A/B 测试、金丝雀发布(灰度发布)、蓝绿部署、限流限速、抵御恶意攻击、监控报警、服务可观测性、服务治理等。

  • 全平台

    • 云原生: 平台无关,没有供应商锁定,无论裸机还是 Kubernetes,智能网关 都可以运行。
    • 运行环境: OpenResty 和 Tengine 都支持。
    • 支持 ARM64: 不用担心底层技术的锁定。
  • 多协议

    • [TCP/UDP 代理]: 动态 TCP/UDP 代理。
    • [Dubbo 代理]: 动态代理 HTTP 请求到 Dubbo 后端。
    • [动态 MQTT 代理]: 支持用 client_id 对 MQTT 进行负载均衡,同时支持 MQTT 3.1.* (opens new window)5.0 (opens new window) 两个协议标准。
    • [gRPC 代理]:通过 APISIX 代理 gRPC 连接,并使用 APISIX 的大部分特性管理你的 gRPC 服务。
    • [gRPC 协议转换]:支持协议的转换,这样客户端可以通过 HTTP/JSON 来访问你的 gRPC API。
    • Websocket 代理
    • Proxy Protocol
    • Dubbo 代理:基于 Tengine,可以实现 Dubbo 请求的代理。
    • HTTP(S) 反向代理
    • [SSL]:动态加载 SSL 证书。
  • 全动态能力

    • [热更新和热插件] :无需重启服务,就可以持续更新配置和插件。
    • [代理请求重写] :支持重写请求上游的hosturischemaenable_websocketheaders信息。
    • [输出内容重写] :支持自定义修改返回内容的 status codebodyheaders
    • [Serverless] :在 APISIX 的每一个阶段,你都可以添加并调用自己编写的函数。
    • 动态负载均衡:动态支持有权重的 round-robin 负载平衡。
    • 支持一致性 hash 的负载均衡:动态支持一致性 hash 的负载均衡。
    • [健康检查]:启用上游节点的健康检查,将在负载均衡期间自动过滤不健康的节点,以确保系统稳定性。
    • 熔断器:智能跟踪不健康上游服务。
    • [代理镜像]:提供镜像客户端请求的能力。
    • [流量拆分]:允许用户逐步控制各个上游之间的流量百分比。
  • 精细化路由

    • [支持全路径匹配和前缀匹配]
    • [支持使用 Nginx 所有内置变量做为路由的条件],所以你可以使用 cookie, args 等做为路由的条件,来实现灰度发布、A/B 测试等功能
    • 支持[各类操作符做为路由的判断条件],比如 {"arg_age", ">", 24}
    • 支持[自定义路由匹配函数]
    • IPv6:支持使用 IPv6 格式匹配路由
    • 支持路由的[自动过期(TTL)]
    • [支持路由的优先级]
    • [支持批量 Http 请求]
  • 安全防护

    • 多种身份认证方式: [key-auth], [JWT], [basic-auth], [wolf-rbac]。
    • [IP 黑白名单]
    • [Referer 白名单]
    • [IdP 支持]: 支持外部的身份认证服务,比如 Auth0,Okta,Authing 等,用户可以借此来对接 Oauth2.0 等认证方式。
    • [限制速率]
    • [限制请求数]
    • [限制并发]
    • 防御 ReDoS(正则表达式拒绝服务):内置策略,无需配置即可抵御 ReDoS。
    • [CORS]:为你的 API 启用 CORS。
    • [URI 拦截器]:根据 URI 拦截用户请求。
    • [请求验证器]。
  • 运维友好

    • OpenTracing 可观测性: 支持 [Apache Skywalking] 和 [Zipkin]。
    • 对接外部服务发现:除了内置的 etcd 外,还支持 ConsulNacos 的 [DNS 发现模式],以及 [Eureka]。
    • 监控和指标: [Prometheus]
    • 集群:网关 节点是无状态的,创建配置中心集群请参考 [etcd Clustering Guide]。
    • 高可用:支持配置同一个集群内的多个 etcd 地址。
    • 控制台: 操作 智能网关 集群。
    • 版本控制:支持操作的多次回滚。
    • CLI: 使用命令行来启动、关闭和重启 APISIX。
    • [单机模式]: 支持从本地配置文件中加载路由规则,在 kubernetes(k8s) 等环境下更友好。
    • [全局规则]:允许对所有请求执行插件,比如黑白名单、限流限速等。
    • 高性能:在单核上 QPS 可以达到 18k,同时延迟只有 0.2 毫秒。
    • [故障注入]
    • [REST Admin API]: 使用 REST Admin API 来控制 智能网关,默认只允许 127.0.0.1 访问,你可以修改 conf/config.yaml 中的 allow_admin 字段,指定允许调用 Admin API 的 IP 列表。同时需要注意的是,Admin API 使用 key auth 来校验调用者身份,在部署前需要修改 conf/config.yaml 中的 admin_key 字段,来保证安全。
    • 外部日志记录器:将访问日志导出到外部日志管理工具。([HTTP Logger], [TCP Logger], [Kafka Logger], [UDP Logger])
    • [Helm charts]
  • 高度可扩展

    • [自定义插件]: 允许挂载常见阶段,例如init, rewriteaccessbalancer,header filerbody filterlog 阶段。
    • 自定义负载均衡算法:可以在 balancer 阶段使用自定义负载均衡算法。
    • 自定义路由: 支持用户自己实现路由算法。

# 针对开发者

  1. 入门指南

    入门指南是学习 智能网关 基础知识的好方法。按照 [入门指南]的步骤即可。

    更进一步,你可以跟着文档来尝试更多的[插件]。

  2. Admin API

    智能网关 提供了 [REST Admin API],方便动态控制 智能网关 集群。

  3. 插件二次开发

    可以参考[插件开发指南],以及[示例插件 echo] 的文档和代码实现。

    请注意,智能网关 的插件新增、更新、删除等都是热加载的,不用重启服务。

最后更新: 2/17/2021, 6:41:38 PM