---
title: "产品概述"
date: 0001-01-01
summary: "概述 #  介绍 #  极限网关（INFINI Gateway）是一个面向 Elasticsearch 的高性能应用网关，它包含丰富的特性，使用起来也非常简单。极限网关工作的方式和普通的反向代理一样，我们一般是将网关部署在 Elasticsearch 集群前面， 将以往直接发送给 Elasticsearch 的请求都发送给网关，再由网关转发给请求到后端的 Elasticsearch 集群。因为网关位于在用户端和后端 Elasticsearch 之间，所以网关在中间可以做非常多的事情， 比如可以实现索引级别的限速限流、常见查询的缓存加速、查询请求的审计、查询结果的动态修改等等。
特性 #  极限网关 最懂 Elasticsearch，其在设计的时候就综合考虑了很多和 Elasticsearch 相关的业务场景及特点，基于此打造了很多完美契合 Elasticsearch 的众多非常实用的功能。
轻量级 极限网关使用 Golang 编写，安装包很小，只有 10MB 左右，没有任何外部环境依赖，部署安装都非常简单，只需要下载对应平台的二进制可执行文件，启动网关程序的二进制程序文件执行即可。  极致性能 极限网关在编写每一行代码的时候，都会考虑如何让其运行在最佳状态，经测试，极限网关比同类主流网关类产品速度快 25% 以上，且针对 Elasticsearch 做了非常细致的优化，能成倍提升写入和查询的速度。   跨版本支持 极限网关针对不同的 Elasticsearch 版本做了兼容和针对性处理，能够让业务代码无缝的进行适配，后端 Elasticsearch 集群版本升级能够做到无缝过渡，降低版本升级和数据迁移的复杂度。  可观测性 极限网关可以动态对 Elasticsearch 运行过程中产生的任何请求进行截获和分析，通过指标和日志来了解整个集群的运行情况，用于提升性能和优化业务。还可以用于审计和慢查询分析。   高可用 极限网关内置多种高可用解决方案，前端请求入口支持基于虚拟 IP 的双机热备，后端集群支持集群拓扑的自动感知，节点上下线能自动发现，自动处理后端故障，自动进行请求的重试和迁移。  灵活可扩展 极限网关的每个模块都可以独立扩展，可灵活对每个请求进行干预和路由，支持路由的智能学习，内置丰富的过滤器，通过配置动态修改每个请求的处理逻辑，也支持通过插件来进行扩展。   无缝集成 #  极限网关对外提供的接口完全兼容 Elasticsearch 原生的接口，集成起来非常简单，只需将原本指向 Elasticsearch 的配置修改成网关的地址即可。"
---


# 概述

## 介绍

**极限网关**（_INFINI Gateway_）是一个面向 Elasticsearch 的高性能应用网关，它包含丰富的特性，使用起来也非常简单。极限网关工作的方式和普通的反向代理一样，我们一般是将网关部署在 Elasticsearch 集群前面，
将以往直接发送给 Elasticsearch 的请求都发送给网关，再由网关转发给请求到后端的 Elasticsearch 集群。因为网关位于在用户端和后端 Elasticsearch 之间，所以网关在中间可以做非常多的事情，
比如可以实现索引级别的限速限流、常见查询的缓存加速、查询请求的审计、查询结果的动态修改等等。

## 特性

**极限网关** 最懂 Elasticsearch，其在设计的时候就综合考虑了很多和 Elasticsearch 相关的业务场景及特点，基于此打造了很多完美契合 Elasticsearch 的众多非常实用的功能。

{{< columns >}}

### 轻量级

极限网关使用 Golang 编写，安装包很小，只有 10MB 左右，没有任何外部环境依赖，部署安装都非常简单，只需要下载对应平台的二进制可执行文件，启动网关程序的二进制程序文件执行即可。

<--->

### 极致性能

极限网关在编写每一行代码的时候，都会考虑如何让其运行在最佳状态，经测试，极限网关比同类主流网关类产品速度快 25% 以上，且针对 Elasticsearch 做了非常细致的优化，能成倍提升写入和查询的速度。
{{< /columns >}}

{{< columns >}}

### 跨版本支持

极限网关针对不同的 Elasticsearch 版本做了兼容和针对性处理，能够让业务代码无缝的进行适配，后端 Elasticsearch 集群版本升级能够做到无缝过渡，降低版本升级和数据迁移的复杂度。

<--->

### 可观测性

极限网关可以动态对 Elasticsearch 运行过程中产生的任何请求进行截获和分析，通过指标和日志来了解整个集群的运行情况，用于提升性能和优化业务。还可以用于审计和慢查询分析。
{{< /columns >}}

{{< columns >}}

### 高可用

极限网关内置多种高可用解决方案，前端请求入口支持基于虚拟 IP 的双机热备，后端集群支持集群拓扑的自动感知，节点上下线能自动发现，自动处理后端故障，自动进行请求的重试和迁移。

<--->

### 灵活可扩展

极限网关的每个模块都可以独立扩展，可灵活对每个请求进行干预和路由，支持路由的智能学习，内置丰富的过滤器，通过配置动态修改每个请求的处理逻辑，也支持通过插件来进行扩展。

{{< /columns >}}

## 无缝集成

极限网关对外提供的接口完全兼容 Elasticsearch 原生的接口，集成起来非常简单，只需将原本指向 Elasticsearch 的配置修改成网关的地址即可。

{{% load-img "/img/oveview-diagram.jpg" "" %}}

## 为什么需要极限网关？

嗯，上面的集成交互图基本上看明白了，可我现在 Elasticsearch 用的好好的，我为什么需要在前面加上一个网关呢？

好吧，如果您有一个稍微上了规模的 Elasticsearch 集群，不如试着想想下面的几个场景：

### WAF 与安全

相信您存储在 Elasticsearch 中的每一份数据都是很宝贵的，随着 Elasticsearch 的流行，它也正日益成为黑客们攻击的主要目标，WAF（Web Application Firewall）的需求应运而生。
不管是跨站脚本攻击还是跨站脚本注入，又或是弱密码、暴力破解，还是程序员不合理的查询参数滥用，极限网关都能对这些来自不同 Web 应用程序客户端的各类请求进行内容检测和验证，
通过执行一系列针对 Elasticsearch 的安全策略来确保其安全性与合法性，对非法的请求予以实时阻断，从而对后端 Elasticsearch 进行有效防护。

### 集群升级

没错，相信您也知道 Elasticsearch 版本迭代的速度是非常快的，可能经常需要处理集群版本升级的事宜，而集群升级势必要考虑到以下几点：

- 保证最小的停机时间，业务的数据写入和查询不能因为集群的升级而中止，数据要能持续的进行写入，还不能因为后端重启节点而丢失数据
- 集群流量的切换，新旧集群在什么时候以及如何进行切换，是修改业务代码或者配置文件呢，以及如何回滚恢复呢，是不是需要重新发布一个新的部署包

借助极限网关，您的业务代码完全不用关心后端 Elasticsearch 集群是什么状况，只需要访问网关固定的地址即可，剩下的交给网关就都搞定了。

### 索引重建

修改了 Mapping 需要重建索引，修改了分词词典需要重建索引，重建过程中还不能停止数据的写入，重建完成之后还要确保数据是一致的，有新增的数据和修改的数据也必须一一处理，自己处理起来貌似还挺麻烦。
而极限网关，可以做到一键索引重建，重建过程中的任何文档修改操作都会被自动记录，新旧索引在重建完成之后会自动无缝地进行切换，对于前端应用来说完全无感知。

### 限流限速

有没有遇到过突发流量把集群打爆的情况，有没有遇到过个别大索引特别热闹把整个集群都连累的窘迫，其实您需要对异常的流量进行管理，这样才能保护整个 Elasticsearch 集群不会被异常的流量影响甚至是被恶意的攻击。
极限网关可以做到灵活的流量控制，可以做到索引级别的限速规则设置，一千个索引就有一千个哈姆雷特，完全没问题。

### 查询太慢

极限网关内置缓存功能，能够将最常见的查询进行缓存，还可指定周期性的查询计划来预热特定的查询，保证前端的业务每次都能命中查询，从而提升查询速度，改进业务查询用户体验；

### 索引太慢

极限网关可以将来自不同客户端的众多小批量的 Elasticsearch 索引请求合并成一个大的批次请求，通过精准的分片级别的路由，将索引请求合并封装直接投递到指定分片的指定节点上，
避免后端 Elasticsearch 再次进行请求转发，节省 Elasticsearch 资源和带宽，从而提升整体集群的吞吐和性能。

### 请求干预

代码上线之后才发现查询语句写错了？有了极限网关，完全不用担心，可以在线对指定业务的指定查询进行改写，将查询语句动态修复，无需重新发布应用，方便灵活。或者您对 Elasticsearch 查询返回的 JSON 结果不满意，
也没关系，借助极限网关，您能够动态的替换查询结果为新的内容，甚至可以聚合来自其他数据源的数据，如 Hbase、MySQL 等等，融合成您需要的 JSON 数据再返回给客户端。

### 请求分析

只知道有人抱怨 Elasticsearch 很慢，可您知道是 Elasticsearch 里面的哪些索引慢么？又是哪些查询造成的呢？
又是哪些用户造成的呢？极限网关帮您全程跟踪，从集群到索引，从索引到查询，从应用到用户，让您对于 Elasticsearch 集群内的那点事情一清二楚。

所以，用上极限网关之后您再用 Elasticsearch 将会是一件很爽的事情。

## 架构

极限网关的核心模块见下面的架构图：

{{% load-img "/img/architecture.jpg" "" %}}

负载外部请求代理的模块由四个主要部分组成，即：Entry、Router、Flow 和 Filter。一个 Entry 需要配置一个 Router，一个 Router 可以路由到多个 Flow，一个 Flow 由多个 Filter 组成。

### Entry

Entry 模块主要定义网关的请求入口，极限网关支持 HTTP 和 HTTPS 两种模式，HTTPS 可以自动生成证书。

### Router

Router 模块主要定义请求的路由规则，根据 Method 和请求地址来进行路由到指定的 Flow 处理流程里面去。

### Flow

Flow 模块主要定义数据的处理逻辑，每个请求会经过一系列的 Filter 操作，Flow 用来将这些 Filter 组织起来。

### Filter

Filter 模块由若干个不同的 Filter 组件构成，每个 Filter 在设计的时候只处理一件事情，通过多个 Filter 组成变成一个 Flow。

### Pipeline

Pipeline 模块由若干个不同的 Processor 组件构成，通过多个 Processor 组成一个 Pipeline。Pipeline 和 Flow 相比，更侧重离线任务的处理。

### Queue

Queue 模块是一个抽象的消息队列，如基于本地磁盘的可靠性消息持久化以及 Redis 和 Kafka 等适配器，根据不同的场景可以设置队列的不同后端适配器。

此外，INFINI Gateway 使用的框架底层还有一些公共的模块，如：API 用来提供对外的编程入口，Elastic 模块用于处理不同版本的 Elasticsearch API 封装等等。

## 接下来

- 查看 [下载安装](../getting-started/install/)
