当前位置: 首页 > article >正文

极限网关 INFINI Gateway 从 0 到 1:简单易懂的入门教程

前言

大家好,今天我们来聊聊「极限网关」(Gateway)。

3bb6050aff49dc1e52143256e8a95bb0.jpeg

它是一个轻量级、高性能、面向 Elasticsearch 代理的网关服务,既能代理请求,也能做一些高级功能(比如缓存、负载均衡、限流等)。

如果你是技术小白,看完这篇文章,能够快速学会如何安装、启动、配置以及验证极限网关,让它帮你把后端的 Elasticsearch 代理得又稳、又快、又灵活。


1. 什么是极限网关?

先用一句话解释一下:极限网关就是在你的 Elasticsearch 和客户端(浏览器、应用程序等)之间加了一个“中间人”,它会截获请求并进行各种处理,然后再把结果返回给客户端。

61f3c978d212ab9410d0f37ac98d9293.png

通过它,我们能做到以下好处:

  • 请求转发:把所有对 Elasticsearch 的请求先经过网关,再发给后端的 Elasticsearch。

  • 权限控制:可以很轻松地在网关层面做权限认证、白名单或其他安全策略。

  • 数据缓存:常见的搜索请求,可以在网关侧做缓存,提高响应速度,减轻后端压力。

  • 负载均衡:如果你有多台 Elasticsearch 节点,可以让网关帮忙做负载均衡,甚至可以自动发现新增或离线节点。

  • 日志与监控:统一处理和采集日志,为后续分析提供数据。

如果你还不是很了解这其中的价值,你可以先记住:加了网关后,“强”就完事了

当你需要做一些“全局控制”的功能时,再来翻翻本文,你就能更好地体会到网关的威力。


2. 安装网关

极限网关支持各种主流操作系统(Linux、Mac、Windows),安装包体积很小,没有额外依赖,安装起来非常简单。

2.1 自动安装

LinuxMac 系统的命令行里,可以一键下载和安装:

curl -sSL http://get.infini.cloud | bash -s -- -p gateway

执行后,会自动下载最新版本并解压到 /opt/gateway 目录下。
如果你想指定版本号或自定义安装目录,可以用一下可选参数:

  • -v [版本号]:指定安装的版本号,默认拉取最新版本

  • -d [安装目录]:指定安装目录,默认 /opt/gateway

示例:

# 指定安装目录为 /usr/local/gateway
curl -sSL http://get.infini.cloud | bash -s -- -p gateway -d /usr/local/gateway

2.2 手动安装

我自己的实测安装方式是手动安装。

如果你不想使用脚本,可以直接去官方的发布页面下载对应操作系统平台的压缩包,然后解压到你喜欢的目录下。

解压后,你会看到一个 bin 文件夹,其中包含 gateway 可执行文件。

官方下载地址:https://release.infinilabs.com/gateway/stable/

2.3 Docker 容器部署

如果你的环境喜欢使用 Docker 来跑服务,极限网关也可以在容器中运行。只要写个简单的 Dockerfile 或者直接用已有的镜像,把配置映射进去就可以了。这里就不展开细说,有需要的可以查看官方文档。

本文没有涉及 Docker 部署。


3. 验证安装

安装完成后,我们可以执行以下命令来验证一下:

# 进入到解压目录
./gateway-linux-amd64  -v

1765f14d7cf5831a55d70e388bc95643.png

如果能看到类似下面的输出,就说明安装成功,没毛病:

4cecf1a7eceffa7ea22e86d31e8a3650.png

[GATEWAY] A light-weight, powerful and high-performance search gateway, open-sourced under the GNU AGPLv3.
[GATEWAY] 1.28.1#1978, 2025-01-24 18:12:34, 2025-12-31 10:10:10, 93fd9e32500a, 8ecefd18d9eb, c511f8f4cab9

4. 启动网关

在安装目录下,用管理员权限直接执行 gateway-linux-amd64 即可启动网关:

sudo ./gateway-linux-amd64

你会看到类似如下的启动日志:

___   _   _____  __  __    __  _
  / _ \ /_\ /__   \/__\/ / /\ \ \/_\ /\_/\
 / /_\///_\\  / /\/_\  \ \/  \/ //_\\\_ _/
...

[01-11 16:43:31] [INF] [api.go:255] api server listen at: http://0.0.0.0:2900
[01-11 16:43:31] [INF] [entry.go:262] entry [es_gateway] listen at: https://0.0.0.0:8000
[01-11 16:43:32] [INF] [app.go:254] gateway now started.

372624de0e99671a743e849e02fc7b17.png

这些日志表示网关已经启动了,并在 0.0.0.0:80000.0.0.0:2900 上监听请求(一个是代理端口,一个是管理 API)。

配置非常重要,配置在第 8 部分详细解读。先配置好,才能启动!


5. 访问网关

如果你想确认能不能正常代理 Elasticsearch,可以用浏览器或其他 HTTP 工具(如 curl)访问 http://<网关地址>:8000

fee1f078736d7d14c63fab3cdc985c88.png

  • 如果后续配置了具体的后端 Elasticsearch 地址,那么通过这个端口访问,就相当于访问后端的 Elasticsearch。


6. 停止网关

想停止的话,直接按下 Ctrl+C 就能让网关退出:

^C
[GATEWAY] got signal: interrupt, start shutting down
[01-11 16:44:41] [INF] [app.go:303] gateway now terminated.
[GATEWAY] 1.0.0_SNAPSHOT, uptime: 1m10.550336s

Thanks for using GATEWAY, have a good day!

7. 以系统服务运行

自行参考如下步骤验证即可。

如果你想把网关跑在后台,当一个系统服务(非常适合生产环境),可以用如下命令:

# 安装为系统服务
./gateway -service install
# 启动服务
./gateway -service start

如果不想用了,可以用:

./gateway -service stop
./gateway -service uninstall

如果你需要在同一台机器上跑多个网关实例,可以自定义服务名:

sudo SERVICE_NAME=mygw ./gateway -service install
sudo SERVICE_NAME=mygw ./gateway -service start
...

8. 配置网关

如前所述,这是关键!没有配置的话,前面第4部分可能启动不起来。

极限网关的配置文件默认叫做 gateway.yml,放在执行目录下。它能控制网关的大部分行为,包括监听地址、路由逻辑、后端 Elasticsearch 集群信息等。

8.1 命令行参数

执行 ./gateway --help 能看到常用的参数:

ca673005124c31a53315f6e272ddd4d4.png

  • -config string:指定配置文件位置(默认是当前目录下的 gateway.yml

  • -debug:启用调试模式

  • -log string:指定日志级别(trace/debug/info/warn/error)

常见用法示例:

./gateway -config /etc/gw/gateway.yml -log debug

8.2 配置示例

gateway.yml 中,你最少需要配置以下几个核心部分:

  • entry(入口)

  • router(路由)

  • flow(流程)

  • elasticsearch(后端资源)

我们可以先看一段简单示例:

entry:
  - name: es_gateway
    enabled: true
    router: default
    network:
      binding: 0.0.0.0:8000

router:
  - name: default
    default_flow: cache_first

flow:
  - name: cache_first
    filter:
      - get_cache:
      - elasticsearch:
          elasticsearch: prod
      - set_cache:

elasticsearch:
  - name: prod
    enabled: true
    endpoint: http://192.168.3.201:9200
    discovery:
      enabled: true
      refresh:
        enabled: true
    basic_auth:
      username: elastic
      password: pass

aff67f22ddfa8050a5cf4f3f819bc377.png

需要我们修改配置为:

entry:
  - name: es_gateway
    enabled: true
    router: default
    network:
      binding: 0.0.0.0:8000


router:
  - name: default
    default_flow: cache_first


flow:
  - name: cache_first
    filter:
      - get_cache:
      - basic_auth:
          valid_users:
              elastic: changeme
      - elasticsearch:
          elasticsearch: prod
      - set_cache:


elasticsearch:
  - name: prod
    enabled: true
    endpoint: https://0.0.0.0:9200
    discovery:
      enabled: true
      refresh:
        enabled: true
    basic_auth:
      username: elastic
      password: changeme

f419b2487bd0bffe8c17c2071dfbec96.png

下面我们一条条说清楚:

8.2.1 Entry —— 对外暴露的“入口”
entry:
  - name: es_gateway
    enabled: true
    router: default
    network:
      binding: 0.0.0.0:8000
  • name:自定义名字,比如 es_gateway

  • enabled:是否启用。

  • router:关联到我们后面定义的路由规则,这里指定为 default

  • network.binding:本地监听的地址和端口。这里用 0.0.0.0:8000 表示接受所有网卡 IP 的 8000 端口连接。(由于我是云服务器,所以配置 0.0.0.0,读者朋友根据自己网络状态可以配置内网 ip 地址)

8.2.2 Router —— 请求“转发”与“流量”走向
router:
  - name: default
    default_flow: cache_first
  • name:路由名称,这里叫 default

  • default_flow:表示默认走哪个流程,这里是 cache_first(后面会定义流程)。

当请求通过 Entry 进来后,会先看这是哪个 router,然后 router 会告诉它,走哪条 flow(流)来进行处理。

8.2.3 Flow —— 请求的处理“流水线”
flow:
  - name: cache_first
    filter:
      - get_cache:
      - elasticsearch:
          elasticsearch: prod
      - set_cache:
  • name: 这里叫 cache_first,表示我们想先查缓存,再不行再去 Elasticsearch,然后再写回缓存。

  • filter:就是一个个处理单元,按顺序执行。

这里的三个过滤器:

  1. get_cache::如果命中缓存,就直接返回,不往下执行了。

  2. elasticsearch::如果没有缓存,就把请求转发给后端 Elasticsearch,elasticsearch: prod 表示用下面定义的名字为 prod 的 Elasticsearch 实例。

  3. set_cache::把结果保存到缓存里,方便下次使用。

8.2.4 Elasticsearch —— “后端资源”设置
elasticsearch:
  - name: prod
    enabled: true
    endpoint: http://192.168.3.201:9200
    discovery:
      enabled: true
      refresh:
        enabled: true
    basic_auth:
      username: elastic
      password: pass
  • name: 后端集群名。你可以定义多个集群,比如 prodstagingtest 等。

  • endpoint: Elasticsearch 的地址。

  • basic_auth: 如果 ES 需要用户名密码,这里可以配置。

  • discovery.enabled: true: 自动发现 ES 节点,更新健康状态。


9. 工作流程示意(Mermaid 图解)

为了让大家对整个流程有一个直观认识,我们用一张简化的图示意:

4155a0bf91ca96abb2997d1c531f0438.png

  • 当客户端的请求来到网关(Entry),会先匹配对应的 Router;

  • Router 决定走哪条 Flow(这里就是 cache_first);

  • 在 Flow 中,先尝试从缓存拿数据(get_cache);

    • 如果命中缓存,就直接返回给客户端;

    • 如果没命中,就转发到后端的 elasticsearch(prod)

    • 拿到搜索结果后,还要执行 set_cache,让下次查询可能走缓存;

  • 最后把结果返回给客户端。


10. 小结

到这里,你已经基本了解了:

  1. 什么是极限网关:它就是个在 Elasticsearch 前加一层代理,能做各种功能(缓存、负载均衡、安全等)。

  2. 如何安装:自动脚本或手动下载,选择自己喜欢的方式即可。

  3. 如何启动和停止:直接 sudo ./gateway 或者使用 -service 方式部署为系统服务。

  4. 如何配置:编辑 gateway.yml 来设置入口、路由、流程以及后端资源,然后重启服务生效。

如果你想进一步“折腾”网关,比如给它加上多条路由多种流量控制日志收集监控告警等高级功能,可以去翻阅更详细的官方文档或配置手册。

不过,就算是最简单的功能,你已经可以用极限网关轻松代理并缓存 Elasticsearch 的请求了。


扩展阅读

  • 官方发布地址:https://release.infinilabs.com/

    644bc3d5b9e9f54a47423c9632af8238.png

  • 更多进阶配置,参考官方文档或功能手册

如果本文对你有所帮助,欢迎点赞收藏或分享给更多小伙伴。让我们一起用简单的方式,玩转搜索代理和网关技术!

极限网关——一个面向Elasticsearch的高性能应用网关

如何防止 Elasticsearch 服务 OOM ?极限网关来为你的 ES 服务保驾护航!

Elasticsearch 国产化替代方案之一 Easysearch 的介绍与部署指南

读者留言:有 Elasticsearch 国产化替代品吗?现在国产化不让用 ES 了......

Elasticsearch 性能测试工具 Loadgen 之 001——部署及应用详解

Elasticsearch 性能测试工具 Loadgen 之 002——命令行及参数详解

Elasticsearch 性能测试工具 Loadgen 之 003——断言模式详解

Elasticsearch 性能测试工具 Loadgen 之 004——高级用法示例

图片

更短时间更快习得更多干货!

和全球2000+ Elastic 爱好者一起精进!

elastic6.cn——ElasticStack进阶助手

图片

抢先一步学习进阶干货!


http://www.kler.cn/a/551505.html

相关文章:

  • Arduino IDE编程ESP32-C3的Flash选项
  • 10分钟上手DeepSeek开发:SpringBoot + Vue2快速构建AI对话系统
  • 【C/C++】后缀表达式 蓝桥杯/ACM备赛
  • Activity相关学习(五)
  • (leetcode 1749 前缀和)1749. 任意子数组和的绝对值的最大值
  • 从零搭建微服务项目(第5章——SpringBoot项目LogBack日志配置+Feign使用)
  • 【stm32】DAC实验(stm32f4hal库)
  • Redis 全方位解析:从入门到实战
  • 在 Ubuntu Linux 环境下安装 Maven
  • 基于微信小程序的电影院订票选座系统的设计与实现,SSM+Vue+毕业论文+开题报告+任务书+指导搭建视频
  • VPN 的入门介绍,网络安全零基础入门到精通实战教程!
  • 前端工程化的具体实现细节
  • HTTP 核心概念
  • 想在日本上线订货系统 推荐核货宝日文版
  • 30 款 Windows 和 Mac 下的复制粘贴软件对比
  • hive(hdfs)补数脚本
  • Token Statistics Transformer:线性注意力革命,重新定义Transformer效率天花板
  • GPT-4o悄然升级:能力与个性双突破,AI竞技场再掀波澜
  • Brave132编译指南 MacOS篇 - 编译环境配置(四)
  • 23种设计模式 - 策略模式