infinilabs / gateway

🚀 A High-performance gateway designed for search scenarios. Good friend of Elasticsearch/Opensearch/Easysearch.
https://www.infinilabs.com/en/docs/latest/gateway/
28 stars 3 forks source link

极限网关对对post _msearch 查询的路由 #17

Closed taoyantu closed 2 years ago

taoyantu commented 2 years ago

请问一下,网关能对 _msearch的查询方法进行路由吗?根据索引名称发送到不同的es进行查询?

medcl commented 2 years ago

给个具体的场景和查询样例,我看看怎么实现?

taoyantu commented 2 years ago

就是我们准备对ES集群进行升级,从ES 5 版本升级到ES 7 版本,新搭建ES 7 集群。用两套logstash,将数据在两个集群都写入。 现在一些客户端服务 查询数据,使用的是 msearch接口

POST _msearch {"index":"xxxxxx"} {"query":{yyyyyy}}

为了灰度验证,希望以索引名作为判断,将指定的索引从访问老集群迁移到访问新集群,单不影响其他索引的访问。 这种请求体里的 index 能做判断,进行路由分流吗?

medcl commented 2 years ago

更好的做法可以参考:

  1. 使用网关进行双写,5 和 7 集群最终数据保持一致,在网关层统一 type
  2. 旧的应用走 5 集群,新的应用走 7 集群,新旧应用都走网关来进行双写
  3. 灰度验证,只需要将部分用户请求切到新的应用就行了

通过索引名是没有办法做到合理的切换的,应用会搞的特别复杂,走网关无缝透明就可以轻松实现。

请求体进行路由分流是完全可以的,可以使用 JavaScript 来进行解析和判断,比如这个教程: https://gateway.infinilabs.com/zh/docs/tutorial/path_rewrite_by_javascript/