大流量下的 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等错误的 ...
随机推荐
- Linux下快速静态编译Qt以及Qt动态/静态版本共存(提供了编译4.6,5.6的精通编译脚本,并且apt-get install 需要的库也全列出来了。还有分析问题的心理过程)good
qt4.6 Linux./configure -static -release -confirm-license -opensource -qt-zlib -qt-libpng -qt-libjpeg ...
- matlab 工具函数 —— normalize(归一化数据)
function x = normalize(x, mu, sigma) x = bsxfun(@minus, x, mu); x = bsxfun(@rdivide, x, sigma); end ...
- matlab 求解 Ax=B 时所用算法
x = A\B; x = mldivide(A, B); matlab 在这里的求解与严格的数学意义是不同的, 如果 A 接近奇异,matlab 仍会给出合理的结果,但也会提示警告信息: 如果 A 为 ...
- 升级phpstudy2018默认mysql版本到5.7
原文:升级phpstudy2018默认mysql版本到5.7 版权声明:在那最初的相遇中,我们都曾经为彼此心动过... https://blog.csdn.net/weixin_36185028/ar ...
- “Rsync” could not be found on your PATH
Vagrant with VirtualBox on Windows10: “Rsync” could not be found on your PATH 使用agrant安装系统时,遇到的错误提示: ...
- ASP CRUD
//UserInfoList.html <!DOCTYPE html> <html><head><meta http-equiv="Content- ...
- OpenGL红宝书附带源码编译问题集锦
以下所有源码均在win7,VS2008环境下测试.下不再赘述. 1.所有的.c扩展名请改为.cpp扩展名,以避免不可预测的错误. 想知道会出现什么不可预测的错误..请见我上一篇Blog... 2.如果 ...
- .NET Core2.1项目在Linux上使用验证码报Unable to load shared library 'gdiplus' or one of its dependencies
-- ::, 线程ID:[] 日志级别:ERROR 出错类:WebApp.HttpGlobalExceptionFilter property:[(null)] - 错误描述:System.TypeI ...
- 核心思想:许多公司都没有认识到云储存的革命性(类似QQ把它搞成了用户的家、再也离不开了)
在云储存刚刚兴起的时候,也就是dropbox刚刚进入大家视野的时候.许多人都是简单的认为这只是一个提供在线存储的服务而已,许多公司都没有认识到云储存的革命性. 对于这些大公司贸然进入一些新的领域是需要 ...
- mysql8解压版安装
1.下载 下载mysql8 2.安装 ① 解压到需要安装的目录,然后新建一个my.ini(位于解压目录下,与bin目录在同一个目录下) # For advice on how to change se ...