- 博客(62)
- 问答 (1)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 rocketmq消息索引是怎么做的
rocketmq消息索引是怎么做的参考文章形象的图示举例很棒:https://kunzhao.org/docs/rocketmq/rocketmq-message-indexing-flow写简单代码解析rocketmq的消息索引文件:https://juejin.im/post/5eaa6add6fb9a04359028457在使用rmq的过程中觉得他的消息检索很方便,像一个db一样,很好奇它在数据量这么大的情况下,是怎么做到根据messageId、message-key、时间范围这些
2020-06-06 13:20:34
475
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 rocketmq消息的存储与读取
消息实体的存储待添加…消息位置的存储消息在commitLog的putMessage方法,一直到最后的doAppend方法将消息实体写到了最新的一个MappedFile里,然后根据用户不同的配置进行同步刷盘或者异步刷盘,异步刷盘就是有一个单独的刷盘线程去完成的。那消息位置信息怎么存呢?众所周知,消息实体存在于commitLog这一个逻辑文件里,而某个queue拥有哪些消息这个信息,是存在于这个queue自身的名叫consumeQueueFile的逻辑文件里的。这里涉及到两个服务,ReputMess
2020-05-31 15:24:24
1009
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 索引条件下推(index condition pushdown)
索引条件下推(index condition pushdown)概念 当没有icp时,存储引擎会运用索引定位到符合索引条件的行,将这些行发送给MySQL server去计算where 条件是否正确。当有icp时,如果where 条件的一部分可以通过索引来计算(意思就是索引中包含的信息可以计算这一部分where条件),那么MySQL Server就会将这部分索引条件下推到(index cond...
2020-02-13 19:43:26
1829
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 rocketmq——通过学习后对于rocketmq分布式事务的理解
在搜了三天资料后,对于rocketmq的事务消息特性有了一定的了解,现在就分享一下我在看了下面几篇文章之后对于rocketmq实现分布式事务的理解。参考文章:RocketMQ源码分析之事务消息实现原理下篇-消息服务器Broker提交回滚事务实现原理分布式开放消息系统(RocketMQ)的原理与实践RocketMQ 源码分析 —— 事务消息分布式事务RocketMQ学习-事务...
2018-08-17 13:45:10
498
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 rocketmq消费流程学习笔记
rocketmq源码学习——消费篇 最近在学习rockmq,经过前面的安装的“洗礼”(rocketmq在docker环境下的单机搭建(ubuntu-16.0 + docker-17.03 + rocketmq-4.2)后,准备着用它做一个东西,于是去查网上的“rockmq在实际中的用法”,没有找到称心的,所以去搜了“rockmq源码学习”,看了一篇很棒的文章(文章地址见本篇结尾),跟随着...
2018-08-08 16:49:55
3016
原创 应用层如何感知传输层链路故障
比如,一条普通的http连接底层依赖了一条普通的tcp连接,当某些故障导致tcp断掉了,http如何感知呢?结论:tcp连接本质上是逻辑上的连接,依靠两边的操作系统内核维护了一些变量来表示连接的不同状态,所以只有在两端间真正有数据包传送的时候,才可能会改变现有的逻辑状态到一个新状态。
2022-09-04 09:56:41
651
原创 内核学习笔记-网络篇
NAPI(NewAPI)是一种新的linux网卡数据处理API,综合了中断+轮询中断好处:响应及时坏处:数据量大时,中断次数过多,占用CPU时间轮训好处:因为是定时轮训,所以处理大数据量时,也只会占用固定次数的CPU时间坏处:数据量小时,也会占用CPU时间NAPI是二者的结合,数据量低时使用中断,数据量高时使用轮训。平常使用中断,如果有数据到达,则中断函数会关闭中断状态,开始轮询处理数据,直到没有新数据到达才会打开中断状态...
2022-06-16 23:39:11
354
原创 《RocketMQ 5.0: 存储计算分离新思路》笔记
rocketmq官微发布了一篇RocketMQ 5.0: 存储计算分离新思路的文章,讲述了5.0以及后续版本的改造方向,核心就是存储计算分离,使得存储模块和计算模块互不干扰,能各自进行扩缩容。更加云原生 😃文中对现有问题和新架构能解决哪些问题都做了解释,感觉受益匪浅,于是做下笔记,加深理解。...
2022-06-13 00:00:32
271
原创 MySQL gap lock、net-key lock 实验记录
实验记录打开两个sessionset innodb_lock_wait_timeout=5; 设置 Lock wait timeout exceeded 为5秒,这样等待被锁阻塞的时间能短点 -_-! 便于实验进行表结构其中id为主键;age为普通索引in name age1 name1 155 lucy 1811 南风 2215 洛神赋 28存在的非唯一索引select * from user where age = 22 for update;锁住[18,28]sele
2022-04-20 19:44:51
478
原创 golang gc笔记
GC三色标记法过程开始前所有对象都是白色将根节点指向的对象标记成灰色遍历每个灰色对象,将自己指向的对象标成灰色,同时将自己标成黑色重复至没有灰色对象清除剩余的所有白色对象写屏障因为标记过程是并发的,在并发阶段新创建的对象如何处理着色?白色,不行,万一引用这个新对象的是个黑色,那在这一轮标记结束后,该对象会被清除,可能会引起用户程序错误灰色,可行,染成灰色是偏保守但不会出错的方案,但如果这个对象实际上不是存活对象的话,这轮gc是肯定不会清除他的,只能等下一轮
2022-02-27 20:57:27
345
原创 go 并发调度笔记
开启一个m从空闲process列表中获取一个process从空闲列表获取一个m,或者新建一个m使用newosproc()方法创建一个内核线程,并把内核线程和m以及mstart方法关联,该线程执行时会调用mstart方法由该m的g0开始执行schedule方法g0的作用?为runtime 下调度G的工作提供栈空间,每个m都有一个g0调度循环schedule()获取G,有三种方式每处理n个任务后就去全局g队列中获取G,同时会将全局队列中一定数量的G搬运到
2021-12-16 13:13:34
708
原创 难写的SQL——case when 特征函数
难写的SQL——case when 特征函数case when 是特征函数,简单介绍见 https://www.jianshu.com/p/cbb05073931f今天做了一个sql题,用到了case when函数,这个函数在做数据统计的时候经常用来解决条件太复杂的问题。题干如下# 表结构如下CREATE TABLE `t_received` ( `c_id` int(11) NOT NULL AUTO_INCREMENT, `c_customer_id` varchar(15) DEFA
2020-08-05 18:28:23
346
原创 mysql 的两个重要的日志模块
mysql 的两个重要的日志模块mysql查询语句的执行过程redo log(InnoDB特有的日志,发生在引擎层)redo log是物理日志,记录了这个数据页 “做了什么改动”,发生在InnoDB引擎中,当修改数据时,InnoDB将数据写入内存,在写入redo log就算修改完了,而且redo log是顺序写磁盘速度很快。避免了修改数据时直接修改数据行带来的大量随机IO,采用了随机IO转...
2020-04-23 14:55:25
486
原创 ES分布式特性与分布式搜索的机制-笔记
不同的集群通过名字来区分节点类型coordinating node路由请求的节点,默认所有节点都是该种节点比如创建索引的请求会被路由到Master节点data node数据节点,一个节点启动默认就是data node保存分片数据,由Master node 决定如何把分片数据分配到数据节点上增加data node可以水平扩展和解决单点问题主分片和副分片不允许在同一dat...
2019-11-08 09:17:53
272
原创 使用http作为消息投递协议的潜在问题(在实际业务中结合TCP协议的抓包分析)
情景抓包结合tcp协议分析”为什么会发送两次请求“,这导致了我们的一个消息重复的问题。先说结论,大概原因就是因为网络阻塞,发送的第一次请求,实际已经到达服务端,服务端已经写入MQ,但是由于相关ack并没有返回给客户端,客户端认为发送失败,于是就执行了重传逻辑,进行了第二次的发送,导致了消息写入MQ写了两次而出现了重复消息。第一次请求分为"5"和"6"两个ip,下面是详细的过程解释:第一...
2019-10-20 20:55:52
290
1
原创 TCP协议的seq、ack的计算与实际中tcp断开的优化
TCP协议的seq、ack的计算与实际中tcp断开的优化wireshark显示的seq是相对序号seq与ack都为4个字节当连接建立后,每个包都必须把ACK置为1,并携带ackseq的语义序号范围[0,2^32-1],序号增加到 2^32-1 后,下个序号又回到 0。tcp是面向字节流的,每个字节流都会被按顺序编号,seq指的是当前包的第一个字节在整个数据流中应该在的位...
2019-10-20 20:52:14
693
原创 并发对ArrayList读写
并发对ArrayList读写代码示例class Demo{ private List<String> testStrList; void methodA() { //... //在使用的时候copy一份 ArrayList<String> realStrList = new ArrayList<>(testStrList);...
2019-09-23 15:14:31
1152
原创 读《重构》的读书笔记
第一章重构的目的让你以更少的工作量的对程序添加新特性。重构的技巧构建可靠的、可以自我检验的测试环境,因为对比测试结果会浪费大量时间注意返回值范围与是否需要浮点数的问题,比如返回int还是double,返回int还是long分解长代码代码块越小,它的处理和移动越轻松好的代码应该清楚地表达自己的功能,而变量是实现这一点的关键如果某段代码只用到了一个类中的数据,那应该...
2019-09-08 17:59:01
184
原创 Java线程内存模型,volatile实现原理相关学习笔记
minor gc:轻GC,对应用影响很小full gc:针对老年区的清理,jvm优化主要针对full gcJVM调优:主要是减少full gc的次数,与一次full gc需要的时间通过gc日志。多核并发缓存架构JAVA线程内存模型Java线程内存模型与cpu的缓存类似,也是先将主内存中的变量拷贝一份副本到自己的工作内存区域中,线程主要是跟自己的工作内存打交道的。因为拷贝一份副...
2019-09-02 22:19:02
240
原创 记录——使用命令对比两个大量数据文本的内容是否相同的
使用命令对比两个大量数据文本的内容是否相同的记录需求DB中有一份数据,有|time|sum|的两列数据,ES查询出来的json格式结果,也是包含time与sum两个结果。现需要对比二者的数据中time-sum是否能一一匹配,因为数据量较大,不适合人工一条条的去对,所以需要使用一些工具来实现。数据举例,DB:timesum12121212121233312121...
2019-08-30 15:56:50
833
1
原创 FastDFS大量请求时报ClientAbortException问题解决记录
FastDFS大量请求时异常解决记录起因最近做毕业设计,图片文件的保存用到了FastDFS,普通地用发现并没有什么问题,但是当大量的图片请求涌向FastDFS时,会报ClientAbortException,具体如下:org.apache.catalina.connector.ClientAbortException: java.io.IOException: 你的主机中的软件中止了一个已建...
2019-05-13 13:07:23
1030
原创 分布式爬虫(Zookeeper+Redis+Spring+WebMgic+Dubbo)
Dpider参考网上大佬的一张分布式爬虫的架构图,对其的一个实现。因为时间比较急,所以在某些地方跟原架构图不一样(有的省去了,有的用的其他技术),但总体架构是按照这个来的。文章很棒,推荐大家看一看!文章如下:分布式爬虫系统设计、实现与实战:爬取京东、苏宁易购全网手机商品数据+MySQL、HBase存储项目地址:GitHub/gasoliner/dpider架构图如下:...
2019-04-09 12:00:46
763
原创 redis+结巴分词做倒排索引
起源之前爬取过一百万的歌曲,包括歌手名,歌词等,最近了解到倒排索引,像es,solr这种太大,配置要求太高,对于一百万的数据量有些小题大做,所以想到了redis做一个倒排索引。我的配置这里说一下我的配置,后面用的到:cpu:i7 8750HQ (六核十二线程)内存:8G ddr4硬盘:ssd(.m2接口)思路简单来说就是把MySQL中的数据取出来,分词(包括去除停用词),将分词后...
2019-03-14 21:15:23
3116
原创 Netty断线重连实现
netty断线重连实现学习文章浅析 Netty 实现心跳机制与断线重连心跳机制心跳是TCP长连接中,c-s之间发送的一种特殊的数据包,用来通知对方还在线,以确保TCP连接的有效性。原理是:当在一段时间Idle后,c或者s会发送一个特殊的数据包,也就是ping包给对方,当对方收到一个ping包时,会返回一个pong包以证明自己还在线。这样就确保了TCP连接的有效性。在netty中使用心跳...
2019-03-05 14:46:06
3964
1
原创 基于netty+Spring+Zookeeper的分布式RPC框架
文章目录开发笔记参考文章启动示意图对示意图中出现的单词意义解释providerconsumerZookeeperzk节点结构step1~6是启动顺序实现细节对于“当server的状态没有还没有同步到consumer的服务器列表里”这种情况该如何获取连接思考第一阶段思考第二阶段思考第三阶段PS:增加一个补救措施存在的问题以下是知识笔记Netty关于addListener方法关于sync方法关于awa...
2019-03-03 20:02:19
1077
1
原创 动态规划题目-合唱团-学习笔记
动态规划题目-合唱团题目地址及我参考的解析牛客网-[编程题]合唱团题目[编程题]合唱团热度指数:86848 时间限制:1秒 空间限制:32768K有 n 个学生站成一排,每个学生有一个能力值,牛牛想从这 n 个学生中按照顺序选取 k 名学生,要求相邻两个学生的位置编号的差不超过 d,使得这 k 个学生的能力值的乘积最大,你能返回最大的乘积吗?输入描述:每个输入包含 1 个测试用...
2018-11-15 20:49:45
219
原创 Zookeeper的典型应用场景(《从Paxos到ZooKeeper:分布式一致性原理与实践》读书笔记)
Zookeeper的典型应用场景基于对zab算法的实现,该框架能够很好地保证分布式环境中数据的一致性。也正是由于这样的特性,使得ZooKeeper成为了解决分布式一致性问题的利器。...
2018-11-11 22:13:54
370
原创 Zookeeper基础学习(《从Paxos到ZooKeeper:分布式一致性原理与实践》读书笔记)
Zookeeper基础学习(《从Paxos到ZooKeeper:分布式一致性原理与实践》读书笔记)分布式一致性问题假设客户端c1将系统中的一个值k由v1更新为v2,但客户端c2无法立即读到k的最新值,需要一段时间才能读到,这个例子就是常见的数据库之间复制的延时问题。分布式系统对于数据复制需求一半都来自于以下两个原因:为了增强系统的可用性,以防止单点故障引起的系统不可用。提高系统的整体性...
2018-11-11 21:50:55
397
原创 Redis事务学习笔记
Redis事务先来一张思维导图事务提供了一种“将多个命令打包,然后一次性的、按顺序的执行”的机制,并且事务在执行的期间不会主动中断,也就是说服务器在执行完事务中所有的命令后,才会继续处理其他客户端的其他命令。相关的命令multi #开启一个事务OK# 事务逻辑命令redis> set book-name "kkk"QUEUEDredis> get book-na...
2018-11-03 21:03:29
204
原创 Redis持久化学习笔记(AOF与RDB详细)
Redis持久化Redis持久化有两种方式,rdb和aof:rdb会保存一个时间点的数据快照aof会记录每一个服务器收到的写操作。在服务器启动时,这些记录的操作会逐行从aof文件中执行,从而重建原先的数据集。写操作命令记录的格式与Redis协议一致,以追加的方式进行保存Redis持久化可以禁用Redis两种持久化方式可以同时存在,重启redis时,aof优先用于重建RDB工作原理...
2018-11-02 10:07:50
592
原创 Spring事务管理学习笔记
Spring事务管理Spring事务管理接口PlatformTransactionManager: (平台)事务管理器TransactionDefinition: 事务定义信息(事务隔离级别、传播行为、超时、只读、回滚规则)TransactionStatus: 事务运行状态所谓事务管理,其实就是“按照给定的事务规则来执行提交或者回滚操作”。PlatformTransac...
2018-10-31 14:45:48
314
原创 ThreadLocal源码学习笔记
参考文章:并发容器之ThreadLocal概述线程安全问题的核心在于多个线程会对同一个临界区共享资源进行操作,如果每个线程都使用自己的“共享资源”,各自使用各自的,又互相不影响到彼此即让多个线程间达到隔离的状态,这样就不会出现线程安全的问题。这就是一种“空间换时间”的方案,每个线程都会都拥有自己的“共享资源”无疑内存会大很多,但是由于不需要同步也就减少了线程可能存在的阻塞等待的...
2018-09-10 17:20:33
143
原创 关于rocketmq-client 3.6.2.Final中的一个bug
关于rocketmq-client 3.6.2.Final中的一个bug背景之前在进行消息消费的时候,明明我的consumeMessage方法都执行了,但是看rocketmq-console控制台,发现每条消息都显示“未消费”,感到非常疑惑,试过各种方法都未果,最后debug源码找到了问题所在。经过我当时使用的是rocketmq-client 3.6.2.Final版本的j...
2018-08-27 18:37:48
690
原创 rocketmq——关于消费的疑惑(ACK机制)
rocketmq——关于消费的疑惑(ACK机制)开个头消息的数据结构在Producer端是Message,因为到了Broker,Broker会给消息加字段,就成了MessageExt,MessageExt继承自Messagerocketmq在MessageListenerConcurrently接口的consumeMessage的参数List是一个消息列表consumeMessa...
2018-08-10 11:27:56
8914
6
原创 项目开发笔记
ECP项目开发笔记JS异步产生的问题问题一今天卡在一个JS问题上,研究了好久,最后发现是忽略了异步Ajax请求特点导致的。问题:有一个全局变量,先使用Ajax请求初始化这个变量,下面的代码接着使用了这个全局变量,导致使用这个全局变量的时候失败了。原因:在Ajax请求未响应之前,我就去使用了这个全局变量,肯定取到的值为空!因为本地代码执行速度远大于异步请求的响应时间。...
2018-08-06 22:34:32
409
原创 rocketmq在docker环境下的单机搭建(ubuntu-16.0 + docker-17.03 + rocketmq-4.2)
概述本次搭建主要使用Dockfile搭建,因为在本地有速度慢和易出错的问题,所以我采取了编写好Dockerfile后交给网易蜂巢进行镜像的搭建。根据docker提倡的“一个容器一个进程”的思路,我分为namesrv容器和broker容器,搭建途中遇到了一些问题,通过网络资料,涨了很多知识,特此记录一下。编写Dockerfile构建镜像分为namesrv镜像和broker镜像...
2018-08-04 13:26:22
1587
原创 Java中String字符串的长度与生成的txt文件大小之间的关系
起因一个文件存储系统中有一个“快速文本”的功能,流程为用户在前端的textarea中添加文本内容,后台接收改字符串后生成一个临时的txt文件,使用完毕后会删掉该临时文件,为了防止用户上传超大字符串等恶意攻击,应该对字符串长度进行判断,如果太长就不会生成txt文件,并返回错误信息。这里就涉及到了Java中String字符串的长度与生成的txt文件大小之间的关系。分析这里用自己写的生...
2018-06-14 12:31:41
4865
空空如也
【求助大佬】关于java并发实际操作中出现的一个问题
2017-11-19
TA创建的收藏夹 TA关注的收藏夹
TA关注的人