杂七杂八111

MQ

用处

一、异步。可提高性能和吞吐量

二、解耦

三、削峰

四、可靠。常用消息队列可以保证消息不丢失、不重复消费、消息顺序、消息幂等

选型

一Kafak:吞吐量最大,性能最好,集群高可用。缺点:会丢数据,功能较单一。

二RabbitMQ:可靠性高,功能全面。缺点:吞吐量低,可能消息积累影响性能。

三RocketMQ:高吞吐、高性能、高可用、事务性消息。缺点:生态相对不成熟。

如何保证消息不丢失

可能会丢失消息的环节

生产者->MQ MQ主从复制 MQ存磁盘 MQ->消费者

依次解决

一、生产者发送消息到MQ:

Kafak:回调。RocketMQ:回调、事务性消息。RobbitMQ:回调、手动事务、事务性消息(不细腻)

回调:生产者发送消息之后会注册一个回调函数,MQ收到消息返回ack,表示已收到。

二、消息同步不丢失:

RocketMQ:

普通集群中,异步同步性能高,可能丢消息。同步同步相反。

同步同步是指master结点拿到消息后从节点发送消息,从节点存盘后返回生产者ack。

异步同步是指master结点收到消息后往从节点同步消息,并直接返回生产者ask。

Dledger集群-两阶段提交。类似于ZAB协议同步数据。

RabbitMQ:

普通集群中,消息分散存储,结点不主动进行消息同步,可能丢消息。

镜像集群中,会在集群之间主动进行消息同步,安全性较高。

Kafak:

通常用在允许消息少量丢失的场景。

三、MQ消息内存到磁盘消息不丢失:

RocketMQ:使用同步刷盘安全性高,性能低。异步刷盘相反。

broker收到消息后,消息在内存中,需要其他线程将消息刷新到磁盘。

RabbitMQ:将消息配置为持久化队列,新增的Quorum类型的队列,用Raft协议进行消息同步。

四、MQ消费者消费消息不丢失:

分析:消息队列中有消息的偏移量,一般是在本地事务执行完成后移动。异步可能会丢失消息

RocketMQ:使用默认方式消费即可,不要采用异步的方式。

RabbitMQ:autoCommit->手动提交offset。

Kakfa:手动提交offset

原则:采用同步的方式,在消息被消费完成,也就是本地事务执行完后提交消息,移动偏移量。

如何保证消息幂等

MQ产品并没有主动提供解决幂等的机制,需要由消费者自行控制。

RocketMQ中可以给每条消息分配一个ID,作为判断依据,但不保证全局唯一,不推荐。

建议使用带业务标识的ID,来进行幂等判断,如OrderID,统一ID分配。

如何保证消息有序

MQ只需保证局部有序,不需要保证全局有序。例如一个聊天窗口和整个QQ消息。

关键在于,单机下,队列可以先进先出保证有序,但在分布式状态下,有多个队列。

所以要保证生产者把一组消息放到同一个队列中,而消费者依次消费该消息组的所有消息

RockeMQ:

有完整设计,生产者中MessageSelevtor可保证,消费者需要注册一个registerMessageListener

RabbitMQ:要保证一组消息只对应一个队列,并且一个队列只对应一个消费者

Kafak:生产者可以将消息分配到同一个partition。Topic下只由同一个消费者消费

什么是?

Elasticsearch是一个开源的分布式全文搜索和分析引擎,它能够快速地处理大量的数据,并具有高度可扩展性和可靠性。Elasticsearch最初是在Lucene搜索引擎的基础上开发的,它提供了一个RESTful API,可以通过HTTP来访问。

以下是Elasticsearch的主要特点:

  1. 分布式架构:Elasticsearch采用分布式架构,可以将数据分片存储在多个节点上,从而提高数据的处理能力和可靠性。

  2. 实时搜索:Elasticsearch能够快速地搜索和分析数据,支持实时搜索,可以在毫秒级别内返回搜索结果。

  3. 多种查询方式:Elasticsearch支持多种查询方式,包括全文搜索、精确匹配、模糊匹配、范围查询等。

  4. 自动负载均衡:Elasticsearch可以自动将数据分配到集群中的不同节点上,并实现负载均衡,从而提高系统的可用性和性能。

  5. 可扩展性:Elasticsearch可以通过添加新节点来扩展集群的处理能力,同时也支持水平扩展和垂直扩展。

  6. 多种数据类型:Elasticsearch支持多种数据类型,包括文本、数字、日期、地理位置等。

  7. 多语言支持:Elasticsearch支持多种语言,包括Java、Python、PHP等。

  8. 数据安全性:Elasticsearch支持数据加密和访问控制,可以保障数据的安全性。

总的来说,Elasticsearch是一个功能强大、可靠性高、可扩展性好、易于使用的搜索引擎和分析工具,被广泛应用于各种大规模的数据处理和搜索分析场景。

什么是倒排索引

倒排索引(Inverted Index)是一种常用的文本索引技术,用于快速地查找包含特定词语的文档。在倒排索引中,每个词语都对应着一组文档,这些文档包含了该词语出现的位置信息。

倒排索引的构建过程包括以下几个步骤:

  1. 分词:将文本内容按照一定的规则进行分词,形成一组词语。

  2. 建立索引:对每个词语建立一个索引,索引中包含了该词语出现的文档列表。

  3. 存储位置信息:对于每个文档,记录该词语出现的位置信息,以便后续的检索和排名。

倒排索引的查询过程包括以下几个步骤:

  1. 输入查询词语:用户输入要查询的词语。

  2. 查找索引:根据查询词语,在倒排索引中查找对应的文档列表。

  3. 进一步筛选:根据查询词语在文档中出现的位置信息,进一步筛选出符合查询条件的文档。

  4. 返回结果:返回符合条件的文档列表,可以按照相关性进行排序。

倒排索引的优点包括:

  1. 快速查找:倒排索引可以快速地查找包含特定词语的文档,减少了搜索的时间和计算量。

  2. 精确匹配:倒排索引可以实现精确的词语匹配,避免了模糊匹配和错误匹配。

  3. 支持多种查询方式:倒排索引支持多种查询方式,包括全文搜索、短语搜索、通配符搜索、范围搜索等。

  4. 支持高效的排名:倒排索引可以根据词语在文档中出现的位置信息,计算出文档的相关性,从而实现高效的排名。

总的来说,倒排索引是一种高效、精确、灵活的文本索引技术,被广泛应用于各种搜索引擎和文本处理系统中。

BoolQueryBuilder

BoolQueryBuilder是Elasticsearch Java API中的一个类,用于构建布尔查询,即使用多个查询条件进行组合查询的操作。除了must、should和must_not三种查询之外,BoolQueryBuilder还提供了一个filter方法,用于添加过滤条件。

与查询条件不同的是,过滤条件不会影响搜索结果的相关性得分,它只是根据条件过滤掉不符合要求的文档,从而提高搜索效率。因此,过滤条件通常用于一些不需要考虑相关性得分的场景,例如范围查询、精确匹配等。

使用filter方法时,需要先创建一个实例对象,然后通过方法链式调用来添加过滤条件。例如:

BoolQueryBuilder boolQuery = QueryBuilders.boolQuery().must(QueryBuilders.termQuery("field1", "value1")).should(QueryBuilders.termQuery("field2", "value2")).mustNot(QueryBuilders.termQuery("field3", "value3")).filter(QueryBuilders.rangeQuery("field4").gte(10).lte(20));

以上代码构建了一个bool查询,包含了三个查询条件和一个过滤条件:field1=value1(必须满足)、field2=value2(可以满足)、field3=value3(不能满足)、field4的值必须在10到20之间(过滤条件)。

构建完bool查询后,可以将其作为参数传递给SearchRequestBuilder的setQuery方法,用于进行搜索操作。例如:

SearchResponse response = client.prepareSearch("index").setQuery(boolQuery).execute().actionGet();

以上代码将bool查询作为参数传递给SearchRequestBuilder的setQuery方法,执行搜索操作,并返回搜索结果。

总之,BoolQueryBuilder是Elasticsearch Java API中一个非常常用的类,可以方便地构建复杂的布尔查询和过滤条件,提高搜索的精确度和效率。

filter和must有什么区别?

过滤条件和must条件都是BoolQueryBuilder类中的方法,用于构建布尔查询。两者的区别在于,过滤条件不会影响搜索结果的相关性得分,而must条件会影响搜索结果的相关性得分。

过滤条件主要用于过滤掉不符合条件的文档,从而提高搜索效率。过滤条件通常用于一些不需要考虑相关性得分的场景,例如范围查询、精确匹配等。在搜索时,过滤条件会被应用到搜索结果上,从而过滤掉不符合条件的文档。

must条件主要用于筛选符合条件的文档,并影响搜索结果的相关性得分。must条件可以包含多个子条件,表示所有子条件都必须满足,相当于“AND”操作。在搜索时,must条件会被应用到搜索结果上,从而筛选出符合条件的文档,并对搜索结果的相关性得分进行加权。

例如,假设我们要搜索商品名称包含“手机”且价格在1000到2000之间的商品,可以使用以下bool查询:

BoolQueryBuilder boolQuery = QueryBuilders.boolQuery().must(QueryBuilders.matchQuery("name", "手机")).filter(QueryBuilders.rangeQuery("price").gte(1000).lte(2000));

以上代码使用must条件筛选出商品名称包含“手机”的文档,并使用filter条件过滤掉价格不在1000到2000之间的文档。在搜索时,must条件会影响搜索结果的相关性得分,而filter条件不会影响搜索结果的相关性得分,从而提高搜索效率。

总之,过滤条件和must条件都是BoolQueryBuilder类中的方法,用于构建复杂的布尔查询。两者的区别在于,过滤条件不会影响搜索结果的相关性得分,而must条件会影响搜索结果的相关性得分。在实际应用中,我们需要根据具体场景选择合适的条件,以获得更好的搜索效果。

在这里插入图片描述

代理模式在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

工厂模式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

CAP

在这里插入图片描述
在这里插入图片描述

BASE理论

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Raft算法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/535729.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT浪潮来袭!谁先掌握,谁将领先!

任正非在接受采访时说 今后职场上只有两种人, 一种是熟练使用AI的人, 另一种是创造AI工具的人。 虽然这个现实听起来有些夸张的残酷, 但这就是我们必须面对的事实 📆 对于我们普通人来说,我们需要努力成为能够掌握…

1960-2020年全球双边迁移数据库(Global Bilateral MigrationDatabase)

1960-2020年全球双边迁移数据库(Global Bilateral MigrationDatabase) 1、时间:1960-2000年,每10年一次具体为:1960年、1970年、1980年、1990年、2000年 2、来源:世界银行 3、指标:Country O…

c#递归函数

在 C#中,递归函数是指在函数内部直接或间接调用自身的函数。递归函数在解决一些问题时非常有用,例如遍历树形结构、递归计算等。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks…

ios xcode 15 PrivacyInfo.xcprivacy 隐私清单 查询应用使用的隐私api

1.需要升级mac os系统到13 兼容 xcode 15.1 2.升级mac os系统到14 兼容 xcode 15.3 3.选择 New File 4.直接搜索 privacy 能看到有个App Privacy 5.右击Add Row 7.直接选 Label Types 8.选中继续添加就能添加你的隐私清单了 苹果官网文档

使用Docker管理linux容器

文章目录 一、使用docker管理镜像 二、使用docker管理容器 一、使用docker管理镜像 1、安装操作系统,我安装的是centOS 7 ,因为centos7有着非常丰富的软件仓库,方便后续安装与docker相关的软件。 2、初始化设置, 关闭防火墙 关闭…

AHU 数据库 实验三

《数据库》实验报告 【实验名称】 实验3 数据库的连接查询 【实验目的】 1. 熟悉基本的连接查询的概念和作用; 2. 了解数据库管理系统DBMS 实现连接查询的基本方法; 3. 掌握SQL语言连接查询语句的语法和功能&#…

【Android】工厂模式中 字体大小/显示重叠/显示不完整 相关 问题分析与解决

工厂模式中 字体大小/显示重叠/显示不完整 相关 问题分析与解决 1-Factory Mode是什么?2-Factory Mode的显示界面3-找到factory模块中对应设置字体尺寸的代码4-分析与修改代码 Tips 1-Factory Mode是什么? 在Android手机中,Factory Mode&…

TypeScript(五)交叉类型,联合类型,映射类型

交叉类型 交叉类型是将多个类型合并为一个类型。可以把现有的多种类型叠加到一起成为一种类型,它包含了所需的所有类型的特性。使用符号 & 表示。交叉类型 A & B 表示,任何一个新类型必须同时属于 A 和 B,才属于交叉类型 A & B …

金和OA jc6 viewConTemplate.action RCE漏洞复现

0x01 产品简介 金和OA协同办公管理系统软件(简称金和OA),本着简单、适用、高效的原则,贴合企事业单位的实际需求,实行通用化、标准化、智能化、人性化的产品设计,充分体现企事业单位规范管理、提高办公效率…

【Linux/OS学习】基础文件控制/IO——内存文件

文章目录 一、 基础文件控制1.1 系统接口open函数1.2 Linux中文件描述符1.2 C语言FILE中的文件描述符 二、重定向1. 输出重定向2. 追加重定向3. 输入重定向 tips:fd的分配规则 一个文件要有一个唯一的文件标识,以便用户识别和引用。 文件名包含3部分:文件…

基于springboot+vue的电子商务系统(源码+论文)

目录 前言 一、功能设计 二、功能实现 三、库表设计 四、论文 前言 各种购物网站现在已经成了生活中不可缺少的调味品,比如比较全面的淘宝网,还有可以进行交流问答的小红书APP,还有电脑爱好者者们的天堂京东商城等等。拥有一个功能丰富、操作方便的电子商务销售网站,可以汇…

十二:多线程服务端实现

1 理解线程 1.1 引入线程背景 多进程模型有如下缺陷: 创建进程的过程会带来一定的开销。为了完成进程间的数据交换,需要特殊的IPC技术每秒少则数十次,多则数千次的‘上下文切换’是创建进程时最大的开销 运行程序前需要将相应进程信息读入…