大流量下的 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等错误的 ...
随机推荐
- 微服务实践之路--RPC
微服务实践之路--RPC 重点来了,本文全面阐述一下我们的RPC是怎么实现并如何使用的,跟Kubernetes和Openstack怎么结合. 在选型一文中说到我们选定的RPC框架是Apache Thr ...
- 简明Python3教程 6.基础
你肯定不满足于只打印"Hello World"吧? 你想要的更多 - 你希望得到一些输入,操纵它后再从中得到某些东西.我们可以使用python中的常量和变量实现这些功能. 字面常量 ...
- Blend_技巧篇_导入PSD文件制作ToggleButton (Z)
原文:Blend_技巧篇_导入PSD文件制作ToggleButton (Z) 系统: Win7sp1 32位 IDE: Microsoft VisualStudio 2013 Ultimate Ble ...
- (015)实现一个函数来检查是否平衡树(keep it up)
实现一个函数来检查是否平衡树.这个问题而言. 平衡指的是这棵树随意两个叶子结点到根结点的距离之差不大于1. 这个题我们能够採用暴力搜索,找到叶子节点到根节点的最小值和最大值.然后他们的差假设大于1就不 ...
- WPF控件的一些特殊应用
1 checkbox.IsChecked 返回的是bool?类型,需要用bool强转,或者直接和bool类型比较,将发生隐形转换 2 RadioButton有分组属性GroupName
- C++的中英文字符串表示(string,wstring),使用wcout.imbue(std::locale("chs"));本地化解析编码
在C++中字符串类的string的模板原型是basic_string template <class _Elem, class traits = char_traits<_Elem> ...
- String的本质是一个char*,只是以类的形式提供,使用起来比较方便
String的本质是一个char*,只是以类的形式提供,使用起来比较方便 Class String {private: char* m_data;}摘自<后台开发 核心技术与应用实践__徐晓鑫& ...
- 因内存释放而引发的中断问题,dll中new的内存释放问题
调试程序,每次关闭一个界面就会弹出中断错误. 为了确认这个问题,我将出现问题那一段代码中的函数一个个屏蔽,以此来确认到底哪个函数出现问题,缩小范围: 最后我发现,只要屏蔽掉checkIfFingerI ...
- Android零基础入门第39节:ListActivity和自定义列表项
原文:Android零基础入门第39节:ListActivity和自定义列表项 相信通过前两期的学习,以及会开发最简单的一些列表界面了吧,那么本期接着来学习更多方法技巧. 一.使用ListActivi ...
- JSON对象与字符串之间的相互转换 - CSDN博客
原文:JSON对象与字符串之间的相互转换 - CSDN博客 <html> <head> <meta name="viewport" content=& ...