大流量下的 ElasticSearch 搜索演进

这是泥瓦匠(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 , 存储项目相关的数据。项目的数量级越来越大,亿量级,万亿量级。那一个大索引的查询啥的都会出现瓶颈。这时候该怎么优化呢?

解决方案:冷热分离;拆分

大索引的拆分,也不是很难。类似分片的路由规则,根据具体业务指定即可。

这里,我们可以定义 1000 个索引,分别名为 project_1、project_2、project_3…

然后在 ES 集群上面架一层简单的 proxy 。里面核心的业务路由规则可以这样:

project_id 项目自增 ID
index_id 得出来的索引对应的 ID

index_id = project_id % 1000

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

冷热分离;也是类似的就是中间状态的数据最热独立集群独立索引。定期从里面删除终态数据。那么这个索引数据量少,支持搜搜查询量贼大。何乐而不为。

  • 完 -

原文地址:https://www.cnblogs.com/Alandre/p/11130898.html

时间: 2024-08-01 03:52:45

大流量下的 ElasticSearch 搜索演进的相关文章

【阿里云产品公测】大数据下精确快速搜索OpenSearch

[阿里云产品公测]大数据下精确快速搜索OpenSearch 作者:阿里云用户小柒2012 相信做过一两个项目的人都会遇到上级要求做一个类似百度或者谷歌的站内搜索功能.传统的sql查询只能使用like 或者FIND_IN_SET来实现.后者性能稍微好点但是必须要逗号分隔才可以实现匹配.甚至多条件的话还可能用到OR这是极影响系统性能的. 最近公司项目需要.主要是系统查询缓慢.并且查询精度不敢恭维.一开始想到的是Lucene 毕竟是一个开放源代码的全文检索引擎工具包 并且官方还在持续更新中.当时闲暇时

大数据下精确快速搜索OpenSearch

相信做过一两个项目的人都会遇到上级要求做一个类似百度或者谷歌的站内搜索功能.传统的sql查询只能使用like 或者FIND_IN_SET来实现.后者性能稍微好点但是必须要逗号分隔才可以实现匹配.甚至多条件的话还可能用到OR这是极影响系统性能的. 最近公司项目需要.主要是系统查询缓慢.并且查询精度不敢恭维.一开始想到的是Lucene 毕竟是一个开放源代码的全文检索引擎工具包 并且官方还在持续更新中.当时闲暇时间大概搞了将近一个星期的时间.索引的增删查改以及中文分词IKAnalyzer.但是数据量大

京东商品详情页应对“双11”大流量的技术实践

大家来京东打开商品页一般会看到如通用版.闪购.全球购等不同的页面风格,这里面会牵扯到各种各样垂直化的模板页面渲染.以前的解决方案是做静态化,但是静态化一个很大的问题就是页面改版时需要重新全量生成新的静态页.我们有几亿个商品,对于这么多商品,你如果生成页面的话需要跑很多天,而且还无法应对一些突发情况. 比如新的<广告法>,需要对一些数据进行清洗,后端清洗时间和成本来不及,那么很多时候就是从前台展示系统来进行数据过滤.因此需要非常灵活的前端展示架构来支持这种需求. 首先这是我们前端首屏大体的结构.

大数据下的数据分析平台架构zz

转自http://www.cnblogs.com/end/archive/2012/02/05/2339152.html 随着互联网.移动互联网和物联网的发展,谁也无法否认,我们已经切实地迎来了一个海量数据的时代,数据调查公司IDC预计2011年的数据总量将达到1.8万亿GB,对这些海量数据的分析已经成为一个非常重要且紧迫的需求. 作为一家互联网数据分析公司,我们在海量数据的分析领域那真是被“逼上梁山”.多年来在严苛的业务需求和数据压力下,我们几乎尝试了所有可能的大数据分析方法,最终落地于Had

对于大流量的网站,您采用什么样的方法来解决访问量问题?

当一个网站发展为知名网站的时候(如新浪,腾讯,网易,雅虎),网站的访问量通常都会非常大,如果使用虚拟主机的话,网站就会因为访问量过大而引起 服务器性能问题,这是很多人的烦恼,有人使用取消RSS等错误的方法来解决问题,显然是下错药,那么对于大流量的网站,需要采用什么样的方法来解决访问量 问题? 解决方法参考如下: 首先,确认服务器硬件是否足够支持当前的流量. 普通的P4服务器一般最多能支持每天10万独立IP,如果访问量比这个还要大,那么必须首先配置一台更高性能的专用服务器才能解决问题,否则怎么优化

对于大流量网站怎样解决访问量的问题

当一个网站发展为知名网站的时候(如新浪,腾讯,网易,雅虎),网站的访问量通常都会非常大,如果使用虚拟主机的话,网站就会因为访问量过大而引起 服务器性能问题,这是很多人的烦恼,有人使用取消RSS等错误的方法来解决问题,显然是下错药,那么对于大流量的网站,需要采用什么样的方法来解决访问量 问题? 解决方法参考如下: 首先,确认服务器硬件是否足够支持当前的流量. 普通的P4服务器一般最多能支持每天10万独立IP,如果访问量比这个还要大,那么必须首先配置一台更高性能的专用服务器才能解决问题,否则怎么优化

大流量网站优化

如何优化大数据,大流量的网站 1.服务器环境的选择,建议采用Linux服务器 2.页面纯静态化,不要使用伪静态,大家都知道如果是非静态页面,都需要服务器端利用一定的CPU资源进行编译之后才能显示出来,而静态页面则直接显示,另外千万不能使用伪静态,伪静态实际上只是为了迎合搜索引擎而产生的一门技术,在使用过程中,会加大服务器的资源消耗,当访问量大的时候要慎用. 3.负载均衡技术,通俗点讲就是将网页上的元素分开放置到不同的服务器上来分担单台服务器的压力,如:数据库单独一台服务器,静态页面一台服务器,图

大流量高并发量网站的之解决方案

一.对于网站访问速度影响的条件如下: 瓶颈主要有: 1.磁盘搜索 优化方法是:将数据分布在多个磁盘上 2.磁盘读/写 优化方法是:从多个磁盘并行读写. 3.CPU周期 优化方法:扩充内存 4.内存带宽 二.大流量高并发量网站的解决方案 1.确认服务器硬件是否足够支持当前的流量. 2.使用memcache缓存技术,将动态数据缓存到内存中,动态网页直接调用这些文件,而不必在访问数据库. 3.禁止外部的盗链. 4.外部网站的图片或者文件盗链往往会带来大量的负载压力,因此应该严格限制外部对自身图片或者文

对于大流量的网站,您采用什么样的来解决访问量分问题?

当一个网站发展为知名网站的时候(如新浪,腾讯,网易,雅虎),网站的访问量通常都会非常大,如果使用虚拟主机的话,网站就会因为访问量过大而引起 服务器性能问题,这是很多人的烦恼,有人使用取消RSS等错误的方法来解决问题,显然是下错药,那么对于大流量的网站,需要采用什么样的方法来解决访问量 问题? 解决方法参考如下: 首先,确认服务器硬件是否足够支持当前的流量. 普通的P4服务器一般最多能支持每天10万独立IP,如果访问量比这个还要大,那么必须首先配置一台更高性能的专用服务器才能解决问题,否则怎么优化