自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(135)
  • 资源 (1)
  • 问答 (1)
  • 收藏
  • 关注

原创 jvm调试工具(1)

jdk内置工具探索,仅用于学习

2022-06-15 06:15:32 374 1

原创 从架构的视角分析可靠性消息投递

1.rabbitmq页面:2.从架构的视角分析可靠性消息投递消息发送模式——确认消息发送

2021-08-28 10:51:30 160

原创 spring项目不能加载application.properties文件的kafka配置问题

问题:在application.properties文件配置了kafka配置项,却没有生效。项目启动起来,加载的仍是kafka默认的配置。 分析: 首先,我这是一个maven多模块的工程,一般情况,在主模块下面不写代码,在其他分模块下写。但是,我在主模块写了代码,在主模块下配置了application.properties,而主模块的pom文件里有<packaging>pom</packaging>,package打包的方式主要有pom,jar,war,默认是jar。p...

2021-08-28 10:48:07 1143

原创 RabbitMQ(二)

1. 消息如何保障100%的投递成功?1.1 什么是生产端的可靠性投递?(1)保障消息的成功发出(2)保障MQ节点的成功接收(3)发送端收到MQ节点(Broker)确认应答(4)完善的消息进行补偿机制1.2 生产端-可靠性投递互联网大厂的解决方案:(1)消息落库,对消息状态进行打标(2)消息的延迟投递,做二次确认,回调检查保障MQ我们思考如果第一种可靠性投递,在高并发的场景下是否适合?答案是不适合,第一种数据库操作比较耗时,所以在第二种方法中,我们要减少数据库操作

2021-08-23 16:25:18 132

原创 RabbitMQ(一)

1.RabbitMQ是什么?RabbitMQ是一个开源的消息代理和列服务器,用来通过普通协议在完全不同的应用之间共享数据,RabbitMQ是使用Erlang语言来编写的,并且RabbitMQ是基于AMQP协议义的。2.RabbitMQ高性能的原因Erlang语言最初在于交换机领域的架构模式,这样使得RabbitMQ在Broker之间进行数据交互的性能是非常优秀的。Erlang的优点:Erlang有着和原生Socket一样的延迟。3.AMQP高级消息队列协议与模型AMQP全称:...

2021-08-18 15:15:48 82

原创 Kafka介绍与高性能原因分析

1. Kafka介绍Kafka是LinkedIn开源的分布式消息系统, 目前归属于Apache顶级项目Kafka主要特点是基于Pull的模式来处理消息消费,追求高吞吐量,一开始的目的就是用于日志收集和传输0.8版本开始支持复制,不支持事务,对消息的重复、丢失、错误没有严格要求适合产生大量数据的互联网服务的数据收集业务2. Kafka有哪些特点?支持分布式、跨平台、伸缩性好、实时性好。3. Kafka高性能的原因是什么?顺序写,Page Cache空中接力,高效读写高性能.

2021-08-18 11:43:04 165

原创 RabbitMQ集群架构模型与原理解析

1.RabbitMQ四种集群架构(1)主备模式a. 主备模式+HaProxy配置(2)远程模式远距离通信和复制,可以实现双活的一种模式,简称Shovel模式。远程模式在现在用的不是很多,它的可靠性不好,并且配置起来也很麻烦。所谓Shovel就是我们可以把消息进行不同数据中心的复制工作,可以跨地域的让两个mq集群互联。RabbitMQ早期版本提供的多活存储,主要做数据异地的容灾,可以提升性能。比如当单节点处理不过来,可以把数据转发到下游的集群。Shovel架构模型..

2021-08-18 10:21:35 312

原创 MQ的应用场景与MQ性能衡量指标

1. MQ的应用场景服务解耦,削峰填谷,异步化缓冲1.1 MQ应用思考点(1)生产端可靠性投递有的场景对可靠性要求高,有的场景则对可靠性不是很严格。(2)消费端幂等(3)高可用(4)低延迟(5)可靠性(6)堆积能力(7)扩展性2. MQ性能衡量指标2.1 业界主流的分布式消息队列(MQ)Active、Rocket、Rabbit、Kafka2.2 如何进行技术选型?各个MQ的性能、优缺点、相应的业务场景;集群架构模式,分布式、可扩展、高可用、可维

2021-08-18 09:02:27 438

原创 第三方云存储解决方案

1.FastDFSFastDFS的优点是支持水平扩容,但是它也有缺点,比如运维复杂、开发复杂。2. 云存储阿里OSSSDK使用简单,提供强大的文件处理功能,零运维成本,图形化管理控制台,CDN加速。

2021-08-17 21:01:51 273

原创 FastDFS分布式文件系统(二)

1.配置 Nginx FastDFS实现文件服务器nginx一定要和storage安装在同一个服务器上,这样,你的服务才能被访问到1.1 解压fastdfs-nginx-moduletar -zxvf fastdfs-nginx-module-1.22.tar.gz1.2 配置fastdfs-nginx-module-1.22/src/config文件1.2.1 进入解压之后的目录fastdfs-nginx-module-1.22/src1.2.2 打开配置文件config...

2021-08-17 07:21:39 337

原创 FastDFS分布式文件系统(一)

1. 目前文件上传的问题单向存储、不支持集群、文件数据冗余、可扩展差2. 什么是FastDFS? FastDFS是用c语言编写的一款开源的分布式文件系统,它是由淘宝资深架构师余庆编写并开源。FastDFS专为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。https://baike.baidu.com/item/fastdfs/5609710?fr=alad...

2021-08-16 18:17:24 152

原创 logstatsh数据同步

1.logstash介绍1.1 数据采集logstash是一个插件,将其他地方的数据(如数据库)同步到elasticsearch1.2 以id或update_time作为同步边界 当数据库中的id增长时(前提是数据库使用自增id),es做定时任务时,比较自己数据的id和数据库的id,如果增长了,那就是有新增的数据,那么,再进行同步。以id作为同步边界这种方法只能识别到增长的数据,不能识别到更改的数据。而以update_time作为同步边界,同理,也是定时比较自己的update_...

2021-08-13 20:11:22 689

原创 elasticsearch整合springboot(三)

1.文档数据的修改其中,.withId("1002")中的1002是文档id,不是stuId public void updateStuDoc(){ Map<String,Object> sourceMap = new HashMap<>(); sourceMap.put("sign","I am not super man"); sourceMap.put("money",88.6f); sourc.

2021-08-12 22:37:01 224

原创 elasticsearch整合springboot(二)

1. 扩展Mapping增加以下三个属性: @Field(store = true) private Float money; @Field(store = true,type = FieldType.Keyword) private String sign; @Field(store = true) private String description;添加数据public void createIndexStu(){ Stu stu = new Stu

2021-08-12 18:41:23 417 1

原创 elasticsearch整合springboot(一)

1.配置文件1.1 加入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> <version>2.2.2.RELEASE</version&.

2021-08-12 18:00:06 344

原创 elasticsearch集群(三)

1. elasticsearch集群脑裂现象探讨 我们现在有3台服务器,当主节点服务器1宕机后,就会选举出新的master,如下图,选出服务器2为主节点。 当服务器1恢复后,服务器1有可能不会成为slave,不会加入到原先的集群里,为什么呢?这是因为当服务器满足最小投票人数(也就是1)时,就会成为master,服务器1自己的票投给了自己,那么服务器1就会成为master,这时,就有两个集群了。这就是脑裂现象。 对于不完整的master服务器1来说,此时它里...

2021-08-12 10:57:16 109

原创 elasticsearch集群(二)

1.elasticsearch集群分片测试1.1 创建索引,分片数是1,副本数是0五角星代表主节点,圆形代表副节点,此时的分片落在从节点es-node1上。1.2 创建索引b,主分片数是3,副分片数是1,也就是每个主分片对应1个副分片可以看到,粗框的是主分片,细框的是副分片,相同数字的主副分片不可能在同一个节点上1.3 创建索引c,主分片数为5,副分片数为2,即每个主分片对应2个副分片2.elasticsearch集群节点宕机测试目前节点的状态...

2021-08-12 10:13:59 144

原创 elasticsearch集群(一)

1.elasticsearch集群的概念粗框代表主分片(shard),细框代表副分片(replica)。shard和replica相同的数字不能在同一台服务器,这个由es去处理。因为:比如shard:1和replica:1都在服务器1上,服务器1如果挂了,那么shard:1上的数据也不会被备份出来。反之,(见下图)若服务器1挂掉,0,1,2,3,4分片还是能对外提供服务,这时,0,3是replica分片。2.搭建elasticsearch集群2.1 首先,删除nodes部署集群的三...

2021-08-11 19:14:57 185

原创 批量操作 bulk

1. 基本语法bulk操作和以往的普通请求格式有区别。不要格式化json,不然就不在同一行了,这个需要注意。{ action: { metadata }}\n{ request body }\n{ action: { metadata }}\n{ request body }\n...1.1 { action: { metadata }} 代表批量操作的类型,可以是新增、删除或修改1.2 \n 是每行结尾必须填写的一个规范,每一行包括最后一行都要写,用于es的解析1.3

2021-08-11 16:27:32 914

原创 批量查询 _mget

为了提升吞吐量,减少客户端与es服务端的交互,就有了批量查询。_search批量查询:还有一种批量查询是_mget返回数据:{ "docs": [ { "_index": "shop", "_type": "_doc", "_id": "1001", "_version": 4, "_seq_no": 3, "_primary_term": 1, "found": true, "_source": { "id": ...

2021-08-11 11:51:18 764

原创 scroll 滚动搜索

1.什么是scroll 滚动搜索? 一次性查询1万+数据,往往会造成性能影响,因为数据量太多了。这个时候可以使用滚动搜索,也就是 scroll 。 滚动搜索可以先查询出一些数据,然后再紧接着依次往下查询。在第一次查询的时候会有一个滚动id,相当于一个 锚标记 ,随后再次滚动搜索会需要上一次搜索的记录id ,根据这个进行下一次的搜索请求。每次搜索都是基于一个历史的数据快照,查询数据的期间,如果有数据变更,那么搜索是不会查到变更了的数据,搜索的内容还是快照。1.1 scroll查询初始化请...

2021-08-11 10:59:40 600

原创 理解深度分页

1. 深度分页1.1 请求第9990~10000条之间的10条数据成功请求,没有报错1.2请求9999~10009之间的10条数据报错如下,es指出请求的最大数据不能超过10000,但是我们数据达到了10009。请往下看这是由于es拉取数据是这么拉取的:1.3 深度分页:从每个shard中拉取总数10009条,最后在汇总成30027条数据,再对30027条数据进行排序,然后,再从30027条数据中取出9999-10009之间的10条数据(分页),返回给用户。...

2021-08-10 21:54:08 2363

原创 DSL搜索(五)

1. 过滤器post_filter1.1 gt:大于 、lt:小于返回60<money<1000的数据:{ "took": 2, "timed_out": false, "_shards": { "total": 3, "successful": 3, "skipped": 0, "failed": 0 }, "hits": { "total": { "value": 4, "relation": "eq" }, "max_s.

2021-08-10 18:21:35 280

原创 DSL搜索(四)

1.multi_matchfields:后面跟列名,查询多列返回结果:{ "took": 8, "timed_out": false, "_shards": { "total": 3, "successful": 3, "skipped": 0, "failed": 0 }, "hits": { "total": { "value": 5, "relation": "eq" }, "max_score": 7.372511, "hi..

2021-08-10 17:00:23 142

原创 DSL搜索(三)

1.match_phrase1.1 会将所查询的内容进行分词,比如将“大学 毕业”分词为“大学”、“毕业”,再进行查询,查询时,“大学”后面必须跟“毕业”,才能被检索到。1.2 “大学”和“研究生”之间至少有三个词,所以slop设置为3,就能查到这条记录;设置成大于等于3的数,也能查找到。slop的含义是词之间要跳过的词的数量。测试二:2.match operatormatch:只要包含所要查询的内容的词汇,就会查询出。这样,我们查询的条件是or,那么我们能不能把条...

2021-08-10 15:13:05 136

原创 DSL搜索(二)

1.查询所有1.1查询所有数据 match_all1.2查询某些字段1.3可视化查询在head插件的页面上也可以查询点击基本查询,选择一个索引,选择must,match_all,点击搜索,就能查询所有数据2.分页 from、size共12条数据,第一页第一页返回了10条数据{ "took": 3, "timed_out": false, "_shards": { "total": 3, "successful": 3, "ski..

2021-08-10 12:25:44 84

原创 DSL搜索(一)

1.数据准备1.1扩展自定义词库1.2 创建索引shop1.3 为shop索引建立mappings入参json:{"properties": {"id": {"type": "long"},"age": {"type": "integer"},"username": {"type": "keyword"},"nickname": {"type": "text","analyzer": "ik_max_word"},"money": {"type.

2021-08-09 22:51:20 331

原创 自定义中文词库

1.用ik中文分词器分析这句网络用语返回的结果没有将“骚年”、“慕课网”放在一起,所以,我们需要自定义中文词库{ "tokens": [ { "token": "骚", "start_offset": 0, "end_offset": 1, "type": "CN_CHAR", "position": 0 }, { "token": "年在", "start_offset": 1, "end_offset": 3, "typ.

2021-08-09 19:06:29 480

原创 建立ik中文分词器

1.下载elasticsearch-analysis-ikhttps://github.com/medcl/elasticsearch-analysis-ik/releases/tag/v7.4.22.上传至linux服务器3.解压unzip elasticsearch-analysis-ik-7.4.2.zip -d /usr/local/elasticsearch-7.4.2/plugins/ik4.进入到/usr/local/elasticsearch-7.4.2/plugins/.

2021-08-09 18:39:13 89

原创 分词与内置分词器

1.全局分析2.索引库分析3. standard 分析的结果,大写会转换成小写返回的分析结果:{ "tokens": [ { "token": "my", "start_offset": 0, "end_offset": 2, "type": "<ALPHANUM>", "position": 0 }, { "token": "name", "start_offset": 3, "end_offset".

2021-08-09 18:02:48 83

原创 文档乐观锁控制 if_seq_no与if_primary_term

1.修改文档版本现在是72.当有很多用户并发修改文档,那么这时就要根据version来判断版本是否一致,如果一致,则修改用version请求,结果报错:这是因为老版本中支持version,而新版本用if_seq_no与if_primary_term控制版本,也就是乐观锁控制。es在保存数据时,为每个文档分配了_seq_no,_primary_term,可以将_seq_no理解为学号,_primary_term理解为班级3.用if_seq_no与if_primary...

2021-08-09 17:33:42 529

原创 文档的基本操作

一、文档的基本操作1.添加文档与自动映射(1)添加文档返回的version:1,第一次创建文档是1,之后修改的话,会累加。如果创建文档时不指定id,那么es会自动分配:(2)自动映射(1)中创建的字段,比如name,自动映射成text类型,id映射成long类型,create_date映射成date类型(3)创建了9条文档,前4条是手动指定了id,后5条是自动生成的id(4)分词查找,只支持英文分词查找(5)不支持中文分词查找中文的...

2021-08-09 16:57:29 1175

原创 mappings自定义创建映射

一、mappings自定义创建映射1.postman添加索引,并添加mappings映射text、keyword都是String类型。text,比如一些文字内容要被分词,被倒排索引的话,比如产品的名称、详情、介绍、描述,这种比较大的、长的文本,可以用text;keyword,比如用户的qq号、手机号等,这些用keywords,可以精确匹配到;当然用户的qq号、手机号等也可以用模糊搜索——text类型,完全看自己的需求。"index":true index设置成true,被索引,默认就是tru..

2021-08-09 16:57:16 1021

原创 Elasticsearch核心术语与安装、head与postman基于索引的基本操作

一、Elasticsearch核心术语1.核心概念ES -> 数据库索引index -> 表文档 document -> 行(记录)字段 fields -> 列文档以json的形式存在:stu_index{id: 1001,name: jason,age: 19},{id: 1002,name: tom,age: 18},{id: 1003,name: rose,age: 22}2.集群相关分片(shard):把索引

2021-08-08 23:03:39 221

原创 CAS单点登录

一、时序图流程梳理1.在hosts文件配置域名www.mtv.com、www.music.com作为前端系统。www.sso.com、www.cas.com作为后台登录管理系统。二、构建CAS工程1.主要配置(1)加依赖<!--sso cas 用spring构建登录页面--> <dependency> <groupId>org.springframework.boot</groupId&..

2021-08-06 18:36:58 383 2

原创 分布式会话拦截器

一、构建拦截器1.在controller层创建一个类UserTokenInterceptorpublic class UserTokenInterceptor implements HandlerInterceptor { /** * 拦截请求,在访问controller调用之前 * @param request * @param response * @param handler * @return * @throws Exc

2021-08-06 13:27:04 195

原创 实现Redis用户会话、SpringSession实现用户会话

一、实现Redis用户会话七、集群分布式系统会话(图)注册或登录时,将token信息保存在redis里//实现用户的redis会话 String uniqueToken = UUID.randomUUID().toString().trim(); redisOperator.set(REDIS_USER_TOKEN + ":" +userResult.getId(), uniqueToken);...

2021-08-06 11:32:34 460

原创 Redis缓存雪崩,穿透、multiGet 批量查询优化、pipeline 批量查询优化

一、缓存穿透的解决方案为了演示缓存穿透,这里设置的redis是单机单实例。二、缓存穿透之布隆过滤器布隆过滤器能够迅速判断一个元素是否存在于集合里。布隆过滤器缺点:1.会有1%的误判率,误判概率越低,数组所占用的空间越长。2.布隆过滤器的数据只能添加,不能移除,主要是由于多个数据可能存在于同一个位置,比如subCat:2、subCat:3。3.维护起来比较麻烦,代码复杂。三、缓存雪崩与预防1.什么是缓存雪崩?当在同一时刻缓存里有大量的key过期时间结束,此时有大

2021-08-05 11:48:24 8104 1

原创 什么是slot槽节点、Springboot集成Redis集群

一、什么是slot槽节点slots:槽,用于装数据,主节点有,从节点没有1.怎么分配slot? ——平均分配需要注意的是,槽节点是分配给master节点的,slave节点没有。2.槽slot怎么存储?槽slot分配,遵循一致性hash原则。3.查看集群信息的另一种方法,进入集群客户端:4.测试在203这个节点:结论:不论在哪个节点,master也好,slave也好,都可以连接集群客户端,且必须在集群客户端下操作数据,才能写入、读取。写入数据时,red...

2021-08-04 22:07:17 525

原创 SpringBoot 集成Redis哨兵、Redis-Cluster 集群、搭建Redis的三主三从集群模式

一、SpringBoot 集成Redis哨兵启动程序后,设置key,value拿到结果:查看redis库:二、Redis-Cluster 集群三、搭建Redis的三主三从集群模式需要搭建6台服务器集群,如下:192.168.1.201、192.168.1.202、192.168.1.203、192.168.1.204、192.168.1.205、192.168.1.2061.开启集群模式2.每个节点处于集群中的配置文件,与其他节点的关系...

2021-08-04 19:00:09 887 1

threadtest.rar

threadtest.rar

2021-06-30

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

TA关注的人

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