ES脚本中有对象创建导致的性能慢
Ombres 回复了问题 • 2 人关注 • 1 个回复 • 1922 次浏览 • 2022-04-19 11:07
access denied ("java.io.FilePermission" "/usr/data/es1/elasticsearch-7.2.0/elastic-certificates.p12"
Charele 回复了问题 • 2 人关注 • 1 个回复 • 1479 次浏览 • 2022-04-21 11:47
如何做到真正的前缀搜索
laoyang360 回复了问题 • 5 人关注 • 4 个回复 • 1228 次浏览 • 2022-04-17 04:46
es 多字段搜索,能拿到指定字段的得分吗
hapjin 回复了问题 • 2 人关注 • 1 个回复 • 1163 次浏览 • 2022-04-13 10:33
父子关系查询如何根据子元素的个数来对父元素进行排序
yixiongmao 回复了问题 • 2 人关注 • 2 个回复 • 1389 次浏览 • 2022-04-11 17:12
elasticsearch索引库某个属性配置英文分词报不能更改默认分词问题
envy666 回复了问题 • 2 人关注 • 1 个回复 • 1032 次浏览 • 2022-04-08 09:04
极限网关初探(2)配置
xushuhui 发表了文章 • 0 个评论 • 2555 次浏览 • 2022-04-06 17:03
配置
上一篇我们先学习了极限网关的安装和启动,今天学习配置。
读写分离
现在我们遇到读写分离的需求,用网关该怎么做呢?
假设服务端现在从 http://127.0.0.1:8000 写入数据,从 http://127.0.0.1:9000 读取数据,怎么设计呢?
首先查看文档[配置文档](https://xn--d6q905cs0q16u.com/zh/docs/overview/)
我们在 gateway.yml 中定义两个 entry,分别绑定不同的端口,配置不同的 router
```yaml
entry:
- name: write_es
enabled: true
router: write_router
network:
binding: 0.0.0.0:8000 - name: read_es
enabled: true
router: read_router
network:
binding: 0.0.0.0:9000
router: - name: write_router
default_flow: default_flow
tracing_flow: logging - name: read_router
default_flow: default_flow
tracing_flow: logging
<br /> 为了演示效果,只配置一个 Elasticsearch<br />
yaml
elasticsearch:
- name: dev
enabled: true
schema: http
hosts: - 192.168.3.188:9206
```
启动项目

我们从 http://127.0.0.1:8000 写入一条数据,再从 http://127.0.0.1:9000 读取该条数据


添加接口
返回字符串
我们想自定义添加一个接口,怎么在不写代码的情况下通过配置实现返回字符串
```yaml
flow:
- name: dev
- name: hello_flow
filter:
- echo:
message: "hello flow"
router:
- echo:
- name: read_router
default_flow: hello_flow
```
修改配置后启动

返回 json 数据
返回字符串不符合标准的 restful 接口规范,怎么返回给调用方标准 json 数据?
```yaml
filter: - set_response:
content_type: application/json
body: '{"message":"hello world"}'
```
修改配置后启动

修改路由
我们已经新加了接口,返回 json 数据,但是接口是直接定义在 http://127.0.0.1:9000 中,之前网关的接口就无法使用,所以我们需要单独为自定义的接口指定单独的路由
```yaml
router: - name: read_router
default_flow: default_flow
tracing_flow: logging
rules:
- method:
- GET
pattern: - "/hello"
flow: - hello_flow
```
default_flow: 默认的处理流,也就是业务处理的主流程,请求转发、过滤、缓存等操作都在这里面进行
tracing_flow:用于追踪请求状态的流,用于记录请求日志、统计等
如果我们有过开发经验,了解 MVC 模式,flow 就类似 MVC 中的 Controller,rules 中类似路由规则,当请求匹配到配置中的路由规则时,由配置的 flow 处理业务逻辑。
数据整体流向,从服务端发到网关,网关为每个 Elasticsearch 绑定不同的 IP 地址,每个 Elasticsearch 都有唯一一个 router 和它对应,根据请求的 method 和 path 匹配到 router 中的一个 flow,flow 中包含多个 filter 处理对数据进行流式处理。
如下图所示

流式处理是什么,假设水从一个管子里面流出来,管子旁边每一段依次站了几个人,第一个人往水里放点鱼,鱼和水到了第二个人,第二个人往水里放点草,鱼、水和草到了第三人等等,每个人对水做一定的操作,水经过这些操作后最后到达水池里。
我们可以把数据当成水,filter 是管子旁边的人,水池就是 Elasticsearch
总结
在学习了router/flow/filter后,我们已经对极限网关的配置有了初步的了解,后续开发的时候直接查阅文档。
- GET
- method:
极限网关初探(1) 安装启动
xushuhui 发表了文章 • 0 个评论 • 2586 次浏览 • 2022-04-06 16:54
产品介绍
极限网关(INFINI Gateway)是一个面向 Elasticsearch 的高性能应用网关。特性丰富,使用简单。
它和其他业务型网关最大的区别是业务网关把请求转发给各个底层微服务,而它把请求转发给 Elasticsearch,更多是类似 Mycat 的中间件的作用。
没有使用网关之前,服务端请求多个节点

使用网关后

下载地址
打开 [下载地址](http://release.infinilabs.com/gateway/stable/),根据操作系统版本选择。
Windows 安装和启动
安装
下载 gateway-1.6.0_SNAPSHOT-597-windows-amd64.zip,解压如下。

gateway-windows-amd64.exe 是启动文件,gateway.yml 是默认配置文件。
启动失败
当 gateway.yml 的 elasticsearch 选项中的 hosts 不能正常响应请求的时候,启动界面如下。

为什么 elasticsearch 不能访问的时候,网关还要继续提供服务呢,为什么不像业务接口启动时在基础业务组件如 MySQL/Redis 不能正常响应就直接 panic?
一方面网关作为 elasticsearch 抵挡流量冲击的城墙,在 elasticsearch 不能提供服务的时候,对之前成功的请求缓存结果,继续提供有限度的服务,为 elasticsearch 修复后上线争取时间。
另一方面业务接口和基础组件是强耦合关系,没有基础组件就完全无法对外提供数据读写服务,而网关与 elasticsearch 是松耦合关系,网关在没有 elasticsearch 的情况下也能对外提供有限度的服务。
在 gateway.yml 的 elasticsearch 选项中的 hosts 改成能够正常响应的 elasticsearch 请求地址。启动成功
双击 gateway-windows-amd64.exe 文件,启动成功界面如下

访问
API 访问
由启动后终端显示可知,网关的 API 接口地址是 http://localhost:2900
sh<br /> [api.go:262] api listen at: <a href="http://0.0.0.0:2900" rel="nofollow" target="_blank">http://0.0.0.0:2900</a><br />
打开浏览器输入 http://localhost:2900,显示所有可以对外提供的 API 接口

我们选择其中一个,在浏览器中输入 http://localhost:2900/_framework/api/_version 从路由上看该接口是查询产品的版本信息,显示如下

gateway.yml 中可以看到有被注释掉的一段配置,看起来应该是配置 api 地址的地方。
```yamlapi:
enabled: true
network:
binding: 127.0.0.1:2900
<br /> 把注释去掉后尝试把端口改成 2901。<br />
yaml
api:
enabled: true
network:
binding: 127.0.0.1:2901
```
改完后启动

打开浏览器先输入 http://localhost:2900,无法正常响应请求,再输入 http://localhost:2901,可以正常响应,界面和修改配置前访问 http://localhost:2900 的界面一样,说明 API 请求地址成功修改Elasticsearch 访问
启动日志中显示监听 8000 端口,猜测应该是 elasticsearch 请求地址,打开浏览器输入 http://127.0.0.1:8000/
sh<br /> entry [my_es_entry] listen at: <a href="http://0.0.0.0:8000" rel="nofollow" target="_blank">http://0.0.0.0:8000</a><br />

gateway.yml 中可以看到 my_es_entry 的 network 绑定 8000 端口,显而易见的这部分就是配置代理转发给 elasticsearch 的地址,所以安装后只需要把以前请求 elasticsearch 的地址修改为该地址。
```yaml
entry:
- name: my_es_entry
enabled: true
router: my_router
max_concurrency: 10000
network:
binding: 0.0.0.0:8000
```
总结
我们成功安装和启动极限网关,接下来我们学习怎么根据需求修改配置。
Elasticsearch nested 聚合后的排序问题
duanxiaobiao 回复了问题 • 2 人关注 • 1 个回复 • 1610 次浏览 • 2022-05-15 22:19
elasticsearch 模糊查询
JimmyGao 回复了问题 • 4 人关注 • 3 个回复 • 1465 次浏览 • 2022-04-27 16:35
elasticsearch index close 应用场景
Charele 回复了问题 • 3 人关注 • 2 个回复 • 1382 次浏览 • 2022-04-06 15:07
elasticsearch根据某个filed对不同index做差集,能否实现
Charele 回复了问题 • 3 人关注 • 1 个回复 • 1772 次浏览 • 2022-04-01 15:44
NativeSearchQueryBuilder接解除查询的时候10000条的限制
liujiacheng 回复了问题 • 2 人关注 • 2 个回复 • 2852 次浏览 • 2022-04-04 21:57