自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 netty源码-学习整理

netty源码解析,感觉看源码最好可以自己画出来一个流程图,以后复习或者说面试都很有用.我们知道netty是一个多reactor模型.第一个reactor就是监听连接(boss),并且处理连接,讲channel的读写事件注册到 work当读写事件就绪,就是怎么处理数据了,netty使用了pipeline.是一个处理链.不断对数据进行处理,例如过滤,反序列化.各种协议的解析,或者调用用户线程池进行业务处理等等.总之你可以添加任意多的handler.grpc其实也是基于此....

2020-11-27 00:45:58 211

原创 [k8s]cgroup namespace测试 overlay测试

容器技术的核心功能,就是通过约束和修改进程的动态表现,从而为其创造出一个“边界”.1.namespacelinux通过命名空间对进程,做到视图隔离.一个拥有独立命名空间的程序看不到其他命名空间的程序.linux提供了clone命令,参数中可以指定namespace.int pid = clone(main_function, stack_size, CLONE_NEWPID | SIGCHLD, NULL);2.cgroupcgroup允许我们对进程使用的资源做出限制.例如cpu,内存

2020-11-25 17:19:54 537

原创 docker存储-overlayfs.镜像底层原理/volume原理

1.介绍联合文件系统,overlayFs依赖并建立在其它的文件系统之上(例如ext4fs和xfs等等),并不直接参与磁盘空间结构的划分,仅仅将原来底层文件系统中不同的目录进行“合并”.2.命令mount -t overlay overlay -o lowerdir=lower1:lower2:lower3,upperdir=upper,workdir=work merged1)lowerdir=xxx:指定用户需要挂载的lower层目录(支持多lower,最大支持500层);2)upp

2020-11-25 16:57:04 768

原创 [k8s] centos7 k8s搭建

集群机器:master:10.160.92.104worker:10.100.217.2501.docker安装阿里云https://developer.aliyun.com/article/110806使用这个命令,自动安装curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun也可以手动安装.没必要# step 1: 安装必要的一些系统工具 sudo yum install -y y.

2020-11-23 15:11:01 1018

原创 sort原理/select count原理

MySQL 会给每个线程分配一块内存用于排序,称为 sort_buffer。示例:select city,name,age from t where city='杭州' order by name limit 1000 ;执行流程:1.初始化sort_buffer,确定需要存放city,name,age三个字段2.通过city索引,插叙city=杭州的行,回表查出name,age字段值3.将2中的三个字段值,放入到sort_buffer.4.将sort_buffer中..

2020-11-23 02:57:05 373

原创 mysql binlog redolog 两阶段思考 mvcc

1.redolog1.为什么要有redolog更新的时候,直接更新磁盘数据效率低(随机写),所以先写入redo-log,更新内存数据,直接返回就行了.2.那磁盘上的数据什么时候会刷呢?首先redo log不是一个无限大的文件,有固定大小,所以当redo log满的时候,肯定会刷新磁盘,更新数据.这时候刷已经晚了,用户插入数据已经开始阻塞了.第二个是,mysql线程会定期刷redo log到磁盘.3.用处用于崩溃恢复.crash saferedolog,两阶段,redolog-

2020-11-23 02:55:17 461

原创 [etcd]etcd源码

naming生产环境目前使用的etcd是3.2版本.因此分析了核心的读写部分代码.1.etcd存储结构etcd存储结构: 内存:treeIndex,存储key对应的reversion信息.一个key可能对应多个reversion.(etcd以此实现的mvcc) 磁盘:boltdb.这个是开源的kv存储引擎.此处存储reversion对应的value. 因此一个读请求需要先从treeIndex查找到key对应的reversion,再从boltd...

2020-11-23 02:20:54 698

原创 [etcd]raft总结/选举/数据同步,协议缺陷与解决/Multi Raft

raft协议是multi paxos协议的实现.Etcd、Consu都使用了raft1.角色raft协议中包含这几种角色领导者:带头大哥1.提出提议,但是不需要确认,因为我是大哥;2.复制日志,数据以大哥为准,3,领导者会定时发送心跳,确定自己的位置.告诉小弟老实呆着,一旦心跳超时,小弟就会重新选举大哥.跟随者:只要大哥发送心跳,我就老实的同步日志.一旦没有心跳,我就变成候选人,开始发起投票,争取做大哥候选人:心跳超时后,变成候选人,这是个中间状态.选举时机:1.心跳超时后,变成

2020-11-22 23:03:31 2828

原创 zab选举

1.选举每个节点都有一个投票池,以3个节点为例,A(事务id=1),B(事务id=2),C(事务id=1)1.刚开始每人投票给自己,此时三个节点的投票池都是各自投自己.2.三个把投票都投给其余两人.例如A把票投给BC,B收到后,比较事务id,自己大,不用改票,但是记录下A投A;同理C也是3.B把票投个AC.AC收到票后,比较自身,都改票了.4.AC把改票信息再次群发.最终这个投票箱肯定都是投给B的raft选举和zab选举的区别1.raft选举 每个节点只能投...

2020-11-22 21:55:58 433

原创 basic paxos,multi paxos

basic paxos:集群内所有节点如何就一个值达成共识角色:1.提议者:提出提议(proposal).2.接受者:对于提议要给出自己的回答.3.学习者:接受达成共识的值,不参与投票和提议.注意1.除了学习者节点.每个节点都可以生成提议(proposal)和接受提议2.共识的达成需要两阶段协议3.不需要所有节点同意,过半同意即可.流程:1.提议一般是节点生成的.生成的提议可有使用p(id,value).其中id是提议编号.2.一个节点生成提议后...

2020-11-22 21:46:00 488

原创 拜占庭将军

1.问题-二忠一叛例子:齐楚燕去商议攻打秦国,怎么达成一致的消息.拜占庭问题点在于,消息不一定是可靠的,如果不可靠,如下图,齐国和燕国一个说攻,一个说退.楚如果是叛徒,对燕说攻,对齐说退,那么燕肯定完蛋了.拜占庭存在的问题2.如何解决2.1口信消息型如果叛将人数为 m,将军人数不能少于 3m + 1 ,那么拜占庭将军问题就能解决2.2 签名消息型对消息进行签名,既然消息有可能是假的,那么就去对假消息进行验证3.总结拜占庭将军问题非常复杂,一般在内部系统中,不会..

2020-11-22 15:35:18 244

原创 从io模型到ppc,tpc,reactor,preactor

nio sendfile 零拷贝1.网络io模型这是我们常见的一张图.1.传统的bio,就是同步阻塞的.当调用socket.read的时候.会阻塞. 知道系统可读/写,当真正去执行读的时候(内核-->用户),还是阻塞.2.非阻塞io,当调用read时,如果不可读,那么直接返回一个标识,告诉你等会再来问.现在不可读嘞.那么好的,你就过一会问一下.当可读时,去调用recvFrom系统调用.不过此时还是阻塞....

2020-11-22 15:31:29 1175

原创 Tcp参数 tcp_nodelay tcp_quickAck

1.Nagle算法例子:使用telnet的时候,可能发送的字节只有1,但是在网络传输中还是要加上tcp header,ip header(20B)如下,为了发送1个字节,要多加上40字节.小报文因此为了避免发送小数据包.出现了nagle算法.算法定义:任意时刻,最多只能有一个未被确认的小的分组,在该分组的ack收到前,会收集其他的小分组,然后收到ack后,一起发过去.伪代码:if thereisnew datatosend if the window...

2020-11-22 12:11:29 1031

原创 从head of line到http3/quic

1.head of line 队头阻塞什么是队头阻塞呢?就是第一个人的问题影响了后面的人.一堆人排队过桥,第一个卡住了,那么后面的人谁也别想过去.tcp:tcp协议为了保证帧的顺序行,每个帧都有编号.接受者会按照编号对数据进行处理.1.如果2,3,4都传输过去了,但是1没有传输过去,那么2,3,4还是不可读的.同时1234也不能从写缓存中滑走.2.由于读写的socket缓冲区是有限的,会导致用户不可读写.(注意:用户进程写入成功是指,用户将数据从用户空间拷...

2020-11-22 12:10:15 122

原创 socket缓冲区/sk_buffer/滑动窗口关系

之前看极客时间对内核缓冲区,socket缓冲区.sk_buffer,着实有些乱,整理了一下午,把这些概念理清,真是顺畅,通透啊!首先,还是感谢极客时间大佬.关于网络协议方面的讲解,还有一些优秀博客(https://www.cnblogs.com/silyvin/p/11996349.html,https://blog.csdn.net/daaikuaichuan/article/details/83061726?utm_source=app)1.socket.read和socket.write意..

2020-11-22 12:04:18 1530

转载 重定向和转发(转)

重定向和转发 源码分析 forward sendRedirect

2017-05-20 12:33:09 292

原创 filter原理

tomcat filter

2017-05-20 12:19:14 293

转载 Java NIO浅析(转)

Java NIO浅析 (转)

2017-05-20 12:10:02 240

原创 # Executor源码分析 一看就会

Executor源码分析 Executors工具类为我们提供了若干创建线程池的方法,比如newFixedThreadPool;newSingleThreadExecutor;newCachedThreadPool等,其实都是调用了new ThreadPoolExecutor()并传入了不同的参数,那么我们来看下这些不同的参数都是做啥的呢?corePoolSize:核心运行的poolSize,也就是当

2016-09-20 22:22:58 397

空空如也

空空如也

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

TA关注的人

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