大流量下的 ElasticSearch 搜索演进

  • 时间:
  • 浏览:1
  • 来源:大发时时彩_时时彩彩票app_大发时时彩彩票app

这是泥瓦匠(bysocket.com)的第27篇精华分享

ES (ElasticSearch)是分布式搜索引擎。引擎太晦涩,人太好什儿 俩个 MySQL ,俩个存储。方便提供下面功能:

  • 近实时搜索
  • 全文检索,特征化搜索,统计分析

那末存储在 ES 数据哪里来?

答案是数据同步。法律法律依据 推荐如下:

  1. 数据传输(Data Transmission)是阿里云提供的你什儿 支持RDBMS(关系型数据库)、NoSQL、OLAP等多种数据源之间数据交互的数据服务。【阿里的】

    https://help.aliyun.com/product/26590.html

  2. 有赞亿级订单同步的探索与实践【小弟我呆的小组搞的】

    https://mp.weixin.qq.com/s/33KACMxXkgzZyIL9m6q4YA

回归到 ES 演进

当时在创业公司,同步每次也有全量的,你什儿 午夜任务跑一下即可。可能直接同步往 ES CRUD 数据。

单机伪集群,也可不时要跑。具体全文检索思路:

  • 基于「短语匹配」并设置最小匹配权重值
  • 哪来的短语,利用 IK 分词器分词
  • 基于 Fiter 实现筛选
  • 基于 Pageable 实现分页排序

具体看我系列 ES 博客和 GitHub。

你什儿 量级预估是 百万 / 千万数据同步和查询。

就都能否不能了单机伪集群了,运维层面能防止你什儿 量:

  • 多个 ElasticSearch 运行实例(节点 Node)的组合体是 ElasticSearch 集群
  • 通过水平扩容为集群加进去去更多节点

怎样水平扩容

主分片在索引创建可能选则。读操作可不时要同时被主分片和副分片防止。你什儿 ,更多的分片,会拥有更高的吞吐量。自然,时要增加更多的硬件资源支持吞吐量。说明,这里无法提高性能,可能每个分片获得的资源会变少。动态调整副本分片数,按需伸缩集群,比如把副本数默认值为 1 增加到 2:

PUT /blogs/_settings
{
"number_of_replicas" : 2
}

基本俩个集群 Cluster 含着各个业务搜搜:订单、商品等

俩个劲发现俩个大问題:

  • A 集群后面 的大索引慢查会影响 A 集群的你什儿 小索引。

比如现在同俩个 订单 索引大了,慢查。影响了你什儿 业务。那不应该呀,该为啥办?

答案是:物理隔离为多集群:

  • 分为啥都集群:集群订单、集群商品等隔离
  • 多机房支持

往往这前一天大问題由来了:业务单点怎样优化升级?

俩个索引 project , 存储项目相关的数据。项目的数量级那末大,亿量级,万亿量级。那俩个大索引的查询啥的还会冒出瓶颈。这前一天该为啥在么在优化呢?

防止方案:冷热分离;拆分

大索引的拆分,也也有比较慢。什儿 分片的路由规则,根据具体业务指定即可。

这里,.我.我.我 歌词 歌词 可不时要定义 50 个索引,分别名为 project_1、project_2、project_3…

你什儿 在 ES 集群后面 架一层简单的 proxy 。后面 核心的业务路由规则可不时要那末 :

project_id 项目自增 ID

index_id 得出来的索引对应的 ID

index_id = project_id % 50

  • ES proxy 层:做总索引和真正分索引的映射
  • ES 索引配置管理:做索引与业务的映射
  • ES 集群

冷热分离;也是什儿 的而是后面 具体情况的数据最热独立集群独立索引。定期从后面 删除终态数据。那末你什儿 索引数据量少,支持搜搜查询量贼大。何乐而不为。

  • 完 -