自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(65)
  • 收藏
  • 关注

原创 限流策略实战指南:从算法选择到阈值设置,打造高可用系统

本文将深入探讨常见的限流算法及其适用场景,并详细解析基于 QPS 的限流方案。从如何设置合理的限流阈值,到请求被限流后的处理策略。

2025-02-05 20:34:46 1007

原创 高可用建设开篇 - 01 - 服务高可用建设指南

本文探讨了高可用性的核心概念及其实现方法。强调通过冗余设计、故障发现与处理机制、技术方案和资源隔离等策略,来确保服务的持续可用。在技术方案中,许多知识点(如熔断、限流等)尚未深入探讨。这部分内容将在后续文章中详细分析。

2025-02-05 20:33:48 809

原创 第33 章 - ES 实战篇 - MySQL 与 Elasticsearch 的一致性问题

MySQL 与 Elasticsearch 一致性问题是老生常谈了。网上有太多关于这方面的文章了,但是千篇一律,看了跟没看没有太大区别。在生产中,我们往往会通过 DTS 工具将 binlog 导入到 Kafka,再通过 Kafka 消费 binlog,组装数据写入 ES。在这个过程中,可能会存在 binlog 到 Kafka 数据丢失,或者应用程序消费 Kafka 数据成功,但是数据未正确写入至 ES。本文将探讨如何解决 MySQL 与 ES 的数据一致性问题。

2025-01-12 14:56:55 545

原创 第 32 章 - Elasticsearch 的应用场景与技术解决方案

Elasticsearch 主要应用于搜索场景。场景的如 应用内的搜索框、还有日志搜索等。下面将介绍 Elasticsearch 在开发中的常见应用场景。

2025-01-11 15:01:43 513

原创 第 31 章 - 源码篇 - Elasticsearch 写入流程深入分析

在内部又会通过协调节点(接收客户端请求的就是协调节点)先将请求转发给对应主分片所在的节点,主分片节点写入后,主分片节点又会转发给副本分片,副本分片写入后,返回给主分片,主分片再返回给协调节点,最后协调节点返回给客户端。当索引不存在时,则会先创建索引,接着再执行写入操作。上诉 3 个路由算法,底层算法都是类似的,都是基于一致性 hash 计算对应的路由。转发请求至副本分片,是在主分片写入数据后,才执行的。构造函数,注册了副本分片写入的处理函数。构造函数,注册了主分片写入的处理函数。方法,因此,只需要关注。

2025-01-04 15:40:16 851

原创 第 30 章 - 源码篇 - 路由注册及Search 流程源码解析

在本节中,我们将探讨 Elasticsearch 如何实现路由注册,并深入分析其 Search 流程的源码。通过了解路由注册的工作原理,我们可以更好地理解 Elasticsearch 的请求处理和数据检索机制。

2024-12-30 23:26:29 635

原创 第 29 章 - ES 源码篇 - 网络 IO 模型及其实现概述

本文介绍了 ES 使用的网络模型,并介绍 transport,http 接收、响应请求的代码入口。

2024-12-28 18:30:01 613

原创 第 28 章 - ES 源码篇 - Elasticsearch 启动与插件加载机制解析

不管是什么框架,启动类里面做的一定是初始化的工作!

2024-12-28 18:29:16 717

原创 第 27 章 - 源码篇 - 构建你的 Elasticsearch 8 本地集群调试环境:步骤与技巧

如果你觉得在 1 个项目中启动多个 elasticsearch 进程不方便 debug,可以拷贝多份 elasticsearch 源码,IDEA 打开多个 elasticsearch 源码项目,从而每个针对每个节点设置不同的断点。这一步是为了在本地分别启动 3 个 elasticsearch 节点。,如果看到 3 个节点,则表示本地 Debug 集群搭建完毕。这一步是配置不同节点的端口,同时将安全认证关闭,方便本地调试。这一步是为了删除项目中不存在的配置项,否则启动会报错。其他的 2 个节点也是类似。

2024-12-14 19:55:06 1058

原创 第 24 章 - Elasticsearch 索引生命周期管理

本章讲解 Elasticsearch 的索引生命周期管理。通过 ES 的索引生命周期管理,我们可以非常方便的实现,索引自动删除、索引备份功能。下面我将介绍生命周期的相关概念,以及基本使用。

2024-10-26 08:19:06 1633

原创 第23章 - Elasticsearch 洞悉你的查询:如何在上线前发现潜在问题!

在第 21 章中,我介绍了的读优化,但你是否曾疑惑:如何在上线前判断查询的耗时?在第 22 章中,我提到可以通过查看文档所在的索引,但这个API的功能是否仅限于此?本章将深入探讨和,帮助你了解如何在上线前识别查询问题,以及是如何计算文档评分的。接下来,我将通过一个简单的例子,带大家了解其使用写入测试数据POST _bulk使用human=true"query": {"bool": {"must": [],"range": {"gte": 0,"lte": 20。

2024-10-19 19:25:06 1072

原创 第 22 章 - 你不能错过的Elasticsearch核心知识点-BM25相关性评分算法(进阶)

上一章介绍了 Elasticsearch 的读写优化技巧。本章将深入探讨与 Elasticsearch 相关的 BM25 相关性评分公式。我们将全面解析 BM25 如何在查询时影响文档评分。BM25 是 Elasticsearch 的核心内容之一,内容可能较为难懂,请耐心阅读。文档评分是基于文档所在的分片进行计算的。在同一个分片中,1个 term 出现在大多数文档中,那么该 term 的得分就会低,反之则高。

2024-10-13 21:10:21 710 1

原创 重生之我们在ES顶端相遇第 21 章 - 你应该了解的 ES 读写优化技巧(进阶)

有关读写大部分的内容,前面的章节已经介绍完毕。该章节会着重介绍日常开发过程中,如何优化我们的读写操作。

2024-10-07 09:31:38 1042

原创 重生之我们在ES顶端相遇第 20 章 - Mapping 参数设置大全(进阶)

在基础篇,我们只介绍了索引 Mapping 的基本用法。本章将深入探讨日常中较经常使用的 Mapping 其他参数配置。不想看过程,可直接看最后的总结。_source所有的字段都会存储在_source中。搜索、updatereindex、高亮显示 API 需要用到该字段默认启用_copy_to将多个字段拷贝至 1 个或多个字段,用于优化多个 text 字段查询doc_values允许字段使用排序、聚合、script 字段访问默认除了text不启用,其他字段都启用index。

2024-10-06 11:45:37 1307

原创 重生之我们在ES顶端相遇第 19 章 - 综合排序(进阶),打造你的个性化排序

假设有这样一个业务场景:如何实现类似电商搜索按照价格、销量、评分等因素的实时综合排序?。

2024-10-03 17:05:37 748

原创 重生之我们在ES顶端相遇第 18 章 - Script 使用(进阶)

在前面部分,我们介绍了 ES 的基本使用和要掌握的基础性读写原理。从本章开始,会开始介绍 ES 进阶使用。本章要介绍的内容是Script的基本使用。在日常开发中,读请求很少会用,写请求会使用比较多。在读请求、写请求中,Script访问文档值的方式有所不同,下面我将对Script在读写请求中使用进行介绍。读请求中,可以使用doc['字段名']访问对应字段的对象script 读请求中,无法访问text字段painless语法与JAVA语法类似关于painless更多可阅读。

2024-10-02 19:52:06 1580

原创 重生之我们在ES顶端相遇第16 章 - Lucene 写入流程

上一章我们介绍了倒排索引的数据结构。本章我们将深入介绍 Lucene 写入流程。该知识点在面试中比较常问,也是理解 ES 必须掌握的知识点。

2024-09-22 19:27:48 665

原创 重生之我们在ES顶端相遇第15 章 - ES 的心脏-倒排索引

上一章,简单介绍了 ES 的节点类型。本章,我们要介绍 ES 中非常重要的一个概念:倒排索引。ES 的全文索引就是基于倒排索引实现的。本章内容建议重点学习,因为面试也常问。

2024-09-21 19:13:34 546

原创 重生之我们在ES顶端相遇第14 章 - ES 节点类型

通过前面的学习,我们已经初步的掌握了 ES 的大部分用法。后面的篇章会介绍 ES 集群相关的内容。本文着重介绍 ES 节点类型,以及他们的作用。简单大概了解下本章的内容,为后面的学习做铺垫。

2024-09-21 18:59:26 415

原创 重生之我们在ES顶端相遇第 13 章 - 听说你深度分页时,把ES 搞垮了?

在 ES 中,我们通常使用from, size进行分页。为了避免使用from, size分页太深,或者一次请求过多数据。默认情况下,分页不能超过 1w 条。如果需要深度分页的场景,一般使用PITscroll API解决深度分页性能问题。有关深度分页的内容,也可自行阅读ES 深度分页官网。

2024-09-15 16:42:37 469

原创 如何做服务迁移、重构?

意在提供服务迁移的完整思路,将思考题变成填空题,只需要按照本文提供的思路填空,服务迁移至少可以做到 80 分

2024-09-08 11:46:40 910

原创 重生之我们在ES顶端相遇第12 章 - 聚合运算

ES 聚合运算在面向 C 端的日常开发中,比较少碰到。在面向公司内部,或者数据报表的开发中可能会碰到。桶聚合(指标聚合(管道聚合(因为管道聚合开发中实在没碰到过,本篇章就不介绍了。

2024-09-08 09:36:50 874

原创 重生之我们在ES顶端相遇第11 章 - 深入自定义语言分词器

国内企业出海是大势所趋,那么基于不同的语种进行分词就显得尤为重要,因为这会让用户的搜索体验更棒!国内出海企业,会更偏向于选择欧美、中东这 2 个地区。因此本文章也重点介绍英语、阿拉伯语的分词。在 ES 中内置的分词器中,有一个叫,我们可以根据该分词器,自定义出符合业务需求的特定语言分词器。该篇我们探讨了如何实现英语、阿拉伯语的分词器。理论上其他语种的分词器也是类似的做法。

2024-08-31 20:25:29 960

原创 重生之我们在ES顶端相遇第10 章- 分分分词器的基本使用

分词器在 ES 搜索使用中非常关键,一个好的分词器能够提高搜索的质量,让用户搜索到其想要的内容。下面我将带大家从整体了解分词器。0个或多个 character filters有且仅 1 个 tokenizer0个或多个 token filterscharacter filters: 对输入进行预处理,比如删除 html 元素,比如将表情符号映射为文本tokenizer: 分词器,上面说到的standardwhitespace都属于分词器。

2024-08-31 14:01:04 676

原创 服务代码瘦身

整体实现难度不高,主要是相关资料太少,导致开发难度上升。

2024-08-19 22:13:17 409

原创 重生之我们在ES顶端相遇第9 章- 搜索框最常用的功能 - 搜索建议

在上章介绍完 bool 查询后。我们接下来介绍搜索最常被使用的功能:搜索建议、搜索纠错。在 ES 中的SuggestersAPI 中有以下 4 个 API本文,因章幅原因,以及开发中使用频率,只选择讲解。更多内容请阅读返回与输入的文本相似的 terms。在日常开发中,我们可以使用 term suggest 作为拼写纠错来使用。我们已经将 ES 大部分主流的查询介绍完了,下一个篇章我们将介绍 ES 的分词器。

2024-08-02 22:27:37 902

原创 重生之我们在ES顶端相遇第8 章- 它来了,开发中最常用的查询: Bool 查询

在前几章,我们介绍了,如何创建 Mapping,以及常见的搜索。接下来,我们将介绍开发中最最最常用的查询: Bool Query。

2024-07-23 22:55:17 455

原创 重生之我们在ES顶端相遇第7 章- 动态映射 - dynamic template(动态模板)

上一篇说的, 当字段不存在时,会按照一定的规则去映射字段类型。而则允许你修改这一规则。PS:开发中几乎不用。为了知识体系的完善,本文章只做简单介绍,更多详细内容可自行阅读官方文档。

2024-07-21 14:55:40 450

原创 重生之我们在ES顶端相遇第6 章- Dynamic Mapping(动态映射)

在第5章,我们说完 ES 常用字段类型。但是,并未跟大家解释,为什么不设置 Mapping,写入的字符串,默认就可以全文搜索。例如"query": {"name": {这一切都跟 ES 的功能有关。下面我将介绍这一功能。dynamic mapping 默认是开启的。ES 有以下 4 个可选值• true: 往文档写入新字段时,会自动创建字段类型(默认值)• runtime: 往文档写入新字段时,会自动创建字段类型, 与 true 的区别为,2者字段映射不一样。

2024-07-20 11:26:15 614

原创 重生之我们在ES顶端相遇第5章-常用字段类型

手动设置字段类型为keywordPUT /test3"tags": {写入数据keyword其实就是字符串,输入什么,存储就是什么。与 keyword 相对的则是 text。在第三章,我们介绍了全文搜索 match 的用法。你可能会好奇,为啥默认写入的数据就可以使用全文搜索。因为当输入是无规则字符串时,字段类型就是 text。(别着急,默认的字段类型,一会我们就会详细介绍)手动设置字段类型为text# 先删除索引PUT /test3"tags": {

2024-07-20 11:25:05 1269

原创 重生之我们在ES顶端相遇第4章-term?match?分不清?我教你一招!

如果我们将 term 查询换成上章讲解的 match 查询,你会发现,以上查询都有匹配记录。在上文我们提到,ES 在全文搜索前(match),会先将输入分词,分解为一个个 term(词)。当使用 term 查询时,ES 会把输入当成一个词。当成一个词(大小写敏感),到 name 中查询。当成一个词,到 name 中查询。因为只有文档1 有 ok 这个词,所以,只有文档1 符合查询条件。是 ES 中非常重要的概念,用于表示文档中一个单独的词。类似的,term 查询的字段,也可以设置算分权重。

2024-07-20 11:23:59 328

原创 重生之我们在ES顶端相遇第3章-我学会了全文搜索!!!

与 most_fields, best_fields 主要区别在于,cross_fields 算分是以 term(分词) 为纬度,后两者是以字段为维度。上篇章,介绍了 ES 基本的增删改查。本篇章,将介绍 ES 的全文搜索(full text query),term query 会放到下一章节介绍。分别在 name, title 中查询,如果 name 或者 title 中有匹配,文档就算匹配。被搜索的关键字,要按照指定的顺序出现在文档中,该文档才能被检索。需要注意的是,被搜索的字段,需要有相同的分词器。

2024-07-20 11:21:49 1044

原创 重生之我们在ES顶端相遇第2章-救命,有人要教我的CURD

OK,简单的 CURD 就介绍完了。后面会慢慢展开更多的知识点,也会越来越深入讲解 ES。总之各位看官不要着急,本系列文章的定位就是 由浅入深,系统的讲解 ES。

2024-07-20 11:20:51 359

原创 重生之我们在ES顶端相遇第1章 - ES集群环境搭建

因为 ES 集群开启了 SSL,如果后续有使用客户端连接集群的需求,可以将证书复制至宿主机。使用 docker-compose 搭建 3 个节点集群,外加 kibana。docker-compose 默认会读取当前目录下的。

2024-07-20 11:19:28 379

原创 RocketMQ之 CommitLog 加载流程

commitlog 加载当我们把 broker 重启后,RocketMQ 是如何重新将磁盘的 commitlog 文件重新加载到磁盘中的呢?带着这个疑问,我们来看一下 commitlog 的加载流程commitlog 的加载流程大致如下:我们在这里主要关心 第1,2 个流程。第 3 个流程,在讲解完 ConsumeQueue, IndexFile 会重点说明。稍微带下第3个流程,第 3 个流程逻辑为,将 commitlog 存入到 consumeQueue。 这里的 commitlog 是未被转发

2021-06-27 20:39:45 459

原创 RocketMQ之 CommitLog

1 消息存储概述RocketMQ 的存储文件,放在 ${ROCKET_HOME}/store 目录下。当生产者发送消息时,broker 会将消息存储到 commit 文件下,然后再异步的转存到 consumeQueue 以及 indexFile。commitlog消息主体以及元数据的存储主体。Producer 发送的消息就存放在 commitlog 里面.consumeQueue消息消费队列,引入的目的主要是提高消息消费的性能,由于 RocketMQ 是基于主题 topic 的订阅模式,消息消费

2021-06-27 20:37:58 7272

原创 RocketMQ之 Producer

producer 发送流程producer 在消息发送时,肯定要先知道 topic 的信息,以及 topic 在哪个 broker 上,那么 producer 是如何做的呢?还记得在 01 开篇说的吗? namesrv 提供一个通过 topic 获取路由信息的接口(RouteInfoManager#pickupTopicRouteData). producer 就是根据该接口返回的 TopicRouteData, 知道要将 topic 发送至哪个 broker.TopicRouteDatapriva

2021-06-27 20:31:37 769

原创 RocketMQ之 namesrv

整体架构从架构设计图来看,namesrv 充当的角色为注册中心,broker 向 namesrv 注册。producer、consumer 分别与 namesrv 保持长连接, 并从 namesrv 中拉取 broker 信息,然后再与namesrv 之间是不互相通信的,他们各自持有 broker 的注册信息。在分布式领域中,正常集群部署,都会有主从、或者有 leader 节点。但是对于 namesrv,它每个节点都是独立的,每个 namesrv 节点都是互不通信。rocketMQ 在注册中心这一

2021-06-27 20:30:11 1908

原创 二、SpringBoot 整合 Dubbo 进阶,Provider 不使用 web 容器启动

demo github 地址0、docker 启动 zkdocker-compose.ymlversion: '3'services: zoo1: image: zookeeper restart: always hostname: zoo1 ports: - 2181:2181docker-compose up -d1、创建父 pom<?xml version="1.0" encoding="UTF-8"?><proje

2021-03-12 23:31:23 624

原创 一、SpringBoot 整合 Dubbo 光速入门

0、docker 启动 zkdocker-compose.ymlversion: '3'services: zoo1: image: zookeeper restart: always hostname: zoo1 ports: - 2181:2181docker-compose up -d1、创建父 pom<?xml version="1.0" encoding="UTF-8"?><project xmlns="http:

2021-03-12 23:30:07 324 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除