大流量下的 ElasticSearch 搜索演进
这是泥瓦匠(bysocket.com)的第27篇精华分享
ES (ElasticSearch)是分布式搜索引擎。引擎太晦涩,其实类似一个 MySQL ,一个存储。方便提供下面功能:
- 近实时搜索
- 全文检索,结构化搜索,统计分析
那么存储在 ES 数据哪里来?
答案是数据同步。方式推荐如下:
数据传输(Data Transmission)是阿里云提供的一种支持RDBMS(关系型数据库)、NoSQL、OLAP等多种数据源之间数据交互的数据服务。【阿里的】
https://help.aliyun.com/product/26590.html有赞亿级订单同步的探索与实践【小弟我呆的小组搞的】
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 , 存储项目相关的数据。项目的数量级越来越大,亿量级,万亿量级。那一个大索引的查询啥的都会出现瓶颈。这时候该怎么优化呢?
解决方案:冷热分离;拆分
大索引的拆分,也不是很难。类似分片的路由规则,根据具体业务指定即可。
这里,我们可以定义 1000 个索引,分别名为 project_1、project_2、project_3…
然后在 ES 集群上面架一层简单的 proxy 。里面核心的业务路由规则可以这样:
project_id 项目自增 ID
index_id 得出来的索引对应的 ID
index_id = project_id % 1000
- ES proxy 层:做总索引和真正分索引的映射
- ES 索引配置管理:做索引与业务的映射
- ES 集群
冷热分离;也是类似的就是中间状态的数据最热独立集群独立索引。定期从里面删除终态数据。那么这个索引数据量少,支持搜搜查询量贼大。何乐而不为。
- 完 -

大流量下的 ElasticSearch 搜索演进的更多相关文章
- 【阿里云产品公测】大数据下精确快速搜索OpenSearch
[阿里云产品公测]大数据下精确快速搜索OpenSearch 作者:阿里云用户小柒2012 相信做过一两个项目的人都会遇到上级要求做一个类似百度或者谷歌的站内搜索功能.传统的sql查询只能使用like ...
- ELK 性能(2) — 如何在大业务量下保持 Elasticsearch 集群的稳定
ELK 性能(2) - 如何在大业务量下保持 Elasticsearch 集群的稳定 介绍 如何在大业务量下保持 Elasticsearch 集群的稳定? 内容 当我们使用 Elasticsearch ...
- CentOS 7.4 下搭建 Elasticsearch 6.3 搜索群集
上个月 13 号,Elasticsearch 6.3 如约而至,该版本和以往版本相比,新增了很多新功能,其中最令人瞩目的莫过于集成了 X-Pack 模块.而在最新的 X-Pack 中 Elastics ...
- ElasticSearch搜索介绍四
ElasticSearch搜索 最基础的搜索: curl -XGET http://localhost:9200/_search 返回的结果为: { "took": 2, &quo ...
- Elasticsearch搜索调优权威指南 (1/3)
本文首发于 vivo互联网技术 微信公众号 https://mp.weixin.qq.com/s/qwkZKLb_ghmlwrqMkqlb7Q英文原文:https://qbox.io/blog/ela ...
- 大数据篇:ElasticSearch
ElasticSearch ElasticSearch是什么 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口. ...
- Elasticsearch搜索资料汇总
Elasticsearch 简介 Elasticsearch(ES)是一个基于Lucene 构建的开源分布式搜索分析引擎,可以近实时的索引.检索数据.具备高可靠.易使用.社区活跃等特点,在全文检索.日 ...
- 看完这篇还不会 Elasticsearch 搜索,那我就哭了!
本文主要介绍 ElasticSearch 搜索相关的知识,首先会介绍下 URI Search 和 Request Body Search,同时也会学习什么是搜索的相关性,如何衡量相关性. Search ...
- php 解决大流量网站访问量问题
当一个网站发展为知名网站的时候(如新浪,腾讯,网易,雅虎),网站的访问量通常都会非常大,如果使用虚拟主机的话,网站就会因为访问量过大而引起 服务器性能问题,这是很多人的烦恼,有人使用取消RSS等错误的 ...
随机推荐
- hdu2083 简易版之最短距离
点A和点B之间随意一点到A的距离+到B的距离=|AB|,而AB外的一点到A的距离+到B的距离>|AB|: #include<math.h> #include<stdio.h&g ...
- 图像金字塔(pyramid)与 SIFT 图像特征提取(feature extractor)
David Lowe(SIFT 的提出者) 0. 图像金字塔变换(matlab) matlab 对图像金字塔变换接口的支持(impyramid),十分简单好用. 其支持在reduce和expand两种 ...
- 工具:sql server profiler(分析器)
打开profiler新建->连接数据库进行监测 任何访问该数据库的都有记录 image 对于linq的检验:sql实际如何->运行程序,查看分析器记录 image ...
- python socket 客服端服务端编程
客服端编程 import socket try: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) except socket.error a ...
- Apache Cordova for ios环境配置
原文:Apache Cordova for ios环境配置 1.安装针对iOS的工具 https://technet.microsoft.com/ZH-cn/library/dn757054.aspx ...
- SQL Server 事务复制分发到订阅同步慢
原文:SQL Server 事务复制分发到订阅同步慢 最近发现有一个发布经常出现问题,每几天就出错不同步,提示要求初始化.重新调整同步后,复制还是很慢!每天白天未分发的命令就达五六百万条!要解决慢的问 ...
- SqlServer 禁止架构更改的复制中手动修复使发布和订阅中分别增加的字段同步
原文:SqlServer 禁止架构更改的复制中手动修复使发布和订阅中分别增加的字段同步 由于之前的需要,禁止了复制架构更改,以至在发布中添加一个字段,并不会同步到订阅中,而现在又在订阅中添加了一个同名 ...
- Android零基础入门第24节:自定义View简单使用
原文:Android零基础入门第24节:自定义View简单使用 当我们开发中遇到Android原生的组件无法满足需求时,这时候就应该自定义View来满足这些特殊的组件需求. 一.概述 很多初入Andr ...
- ADB命令笔记本
ADB即Android Debug Bridge,作为电脑操作手机的工具,被Android开发者和众多国内xxx安全管家所使用.在此记录一些常见的命令,随时更新,方便以后查找.(万一以后我也要开发一款 ...
- UWP入门(八)--几个简单的控件
原文:UWP入门(八)--几个简单的控件 每天看几个,要不聊几天我就可以看完啦,加油! 看效果 1. CheckBox <TextBlock Grid.Row="0" Tex ...