- 博客(613)
- 资源 (17)
- 收藏
- 关注
原创 flannel-vxlan模式原理解析
前言上一章介绍完flannel的udp模式后,接着来介绍一下vxlan模式,因为很多生产的K8S都正在使用这个模式,所以将会介绍得详细些。在前面的章节中,我们介绍过配置linux vxlan完成跨主机的容器通信,flannel的vxlan模式大概完成的事情就是把那个章节中手工完成的事情自动化了而已,想了解的童鞋可以看回那一章linux配置跨主机容器通信vxlan模式下的flannel比udp模式少了一个组件,就是用c语言写的打开tun设备的守护进程flanneld,因为vxlan模式下通信的全程都由
2021-08-03 10:36:44
1700
原创 flannel-udp模式原理分析
本来上一篇文章应该是介绍flannel的udp模式的了,但因为其中的内容会涉及到linux虚拟网络设备tun的原理,所以先介绍一下tun设备,然后在这一篇才转入正题。flannel一共有UDP、VXLAN、HOST-GW三种工作模式,如果开启了Directrouting的话,会使用VXLAN和HOST-GW组合,不跨网段就使用HOST-GW,跨网段就使用VXLAN。对于host-gw和vxlan我们在前面的文章中有过简单地介绍,在这篇文章我们来分析一下flannel的UDP模式,虽然这种模式现在基本上已经
2021-08-03 10:33:56
732
原创 理解linux虚拟网络设备tun
tun是linux的另一种虚拟网络设备,与前面讲过的veth类似,只是另一端连的不一样,veth设备是一端连着内核协议栈,另一端连着另一个netns的协议栈;而tun设备是一端连着内核协议栈,另一端连接着一个用户程序,任何时候从协议栈发到tun网卡的数据都能从用户程序中读到,而从用户程序写入/dev/net/tun的数据都会被内核协议栈收到。当我们通过程序打开/dev/net/tun设备时,就会发现我们的主机上多了一张网卡,打开多次会新增多张网卡,命名依次为tun0/tun1/tun2…,我们读写tun网
2021-08-03 10:31:35
4123
原创 linux配置跨主机容器通信
在本章主要完成以下几件事情:配置linux主机路由完成跨主机容器通信配置linux ip tunnel完成跨主机容器通信配置linux vxlan完成跨主机容器通信主机路由前面我们已经介绍了几种从容器到主机通信的配置方式,接下来我们通过配置主机路由来打通不同主机的容器,首先在两台主机上分别创建一个新的NS然后配置到各自主机的通信,环境如下:---------------------------------host1:host-name:worker2ip:10.57.4.2
2021-08-03 10:30:06
758
原创 linux模拟POD并通过主机上外网
在这篇文章我们将完成以下几件事情:模拟一个POD将这个POD和主机连接起来,在主机中能访问POD的网站让这个POD能上外网模拟一个PODPOD是一个K8S的逻辑概念,POD里会有一个或多个容器,他们之间共享一个网络命名空间,可以用localhost相互访问,下面我们将脱离开K8S,直接用docker来模拟这种情况:docker run -itd --name=pause --net=none podinfo这时候pause容器会新建一个网络命名空间,但不会加入docker0网
2021-08-03 10:26:10
481
原创 理解linux虚拟网络设备bridge
上一节我们介绍了Linux veth设备,知道了如何把多个彼此隔离的网络命名空间(下面开始简称NS)与主机通过VETH连接起来,并且多个NS间也能相互通信,在这一节我们将介绍另一种方式,用linux bridge。Linux bridge即linux虚拟网桥,工作方式类似于物理的网络交换机,工作在二层时,能够转发以太网报文,能够学习MAC地址与端口的映射关系,但是也能工作在三层,提供类似三层交换机的功能,想要让linux bridge工作在三层,只需要给它配置一个IP地址。还是通过一些示例来了解一下,我
2021-08-03 10:23:16
4446
2
原创 理解linux虚拟网络设备veth
上一章介绍了linux network namespace,接着来讨论一下如何让一个独立的网络命名空间的和主机的网络相互通信,这里我们需要用到linux虚拟网络设备veth。veth设备veth设备总是成对出现,通常就是用来连接不同网络命名空间(下面开始简称NS),一端连着NS1的内核协议栈,另一端连着NS2的内核协议栈,一端发送的数据会被另一端接收。我们接下来试一下创建一个新的NS,然后跟主机的NS连接起来通过下面的命令可以创建一对VETH设备ip link add veth0 type ve
2021-08-03 10:20:53
2248
原创 理解linux network namespace
network namespace 是linux内核提供的用于实现网络虚拟化的重要功能,它能创建多个隔离的网络空间,一个独立的网络空间内的防火墙、网卡、路由表、邻居表、协议栈都是独立的。不管是虚拟机还是容器,当运行在独立的命名空间时,就像是一台单独的主机一样。下面会通过一些例子来说明网络命名空间,以加深理解,会用到iproute2工具包的ip命令,请各位先自行安装,并且使用root权限操作在centos下执行如下命令:yum install iproute2验证安装完成:[root@worker
2021-08-03 10:11:24
1575
1
原创 ZooKeeper分析-读写请求篇
前言在前面中,我们已经 了解了ZooKeeper 集群的启动,Leader 选举相关流程,下面我们一起来看看ZooKeeper 读写请求处理中的一些相关细节。ZooKeeper 系列文章 会讲一些重要的功能和概念,主要包括:重要概念介绍 - 整体视图的认识服务端启动流程集群选举过程读写请求操作会话管理数据与存储本节主要 讲一下读写请求操作 流程,对于前面内容可以点击相关链接进行跳转。概述在Zookeeper中对于请求分为两类:事务性请求非事务性请求所谓事务性请求,说白了就
2020-05-10 17:57:32
3488
1
原创 ZooKeeper分析-选举篇
前言前面几篇文章讲了整体概念,服务器启动的流程,对于选举过程是一笔带过,我们已经了解了ZooKeeper 集群中的三种服务器角色:Leader,Follower 和Observer,本篇接下来主要讲述Leader选举的相关流程。我们从选举算法概述、服务器启动Leader选举、服务器运行期间Leader选举三个方面探讨实现细节。仅仅分析选举流程 还是比较简单的ZooKeeper 系列文章...
2020-05-05 12:41:49
750
原创 ZooKeeper分析-服务端启动篇
前言今年五一认真整理以前凌凌散散的学习内容,发现虽然看得多,但是如果不去看看源码,真的是不深刻,没什么感觉,这也是为什么要重新整理ZooKeeper的相关学习笔记了,在前面的时候我们介绍ZooKeeper的一些重要的概念,在整体上对ZooKeeper 有了一个简单的认识,下面我们再从服务端的启动流程来了解了解,本小节不会将集群的选举过程,这个将放在下一篇文章中介绍,本节知识整体了解一下服务端的启...
2020-05-03 21:36:28
873
原创 ZooKeeper分析-概览篇
前言最近打算写几篇 深入学习 ZooKeeper 的文章,结合自己的情况和经验,打算从核心功能出发进行研究一下,整个部分不会深入很多细节的代码上面,只做重要的介绍,因为时间的原因 很多点上可能也不会涉及到,对于读者 建议结合源码一起看,不然可能没什么帮助,也记不住的,要学习就适当多看代码,否则只是单纯背书而已,意义不大。在前面也看过部分的Dubbo 的源码,但是写的文章 都太细节化了,不便于了...
2020-05-01 15:53:37
343
原创 dubbo 启动概述(三)-扩展机制浅析
前言在上篇文章,我们了解了Dubbo 服务端的暴露流程,在最后,提出关于一行代码的疑问private static final Protocol protocol = ExtensionLoader.getExtensionLoader(Protocol.class).getAdaptiveExtension();不管是暴露到本地,还是暴露到远程,最后都是调用的**protocol.exp...
2019-12-07 15:21:32
2811
原创 dubbo 启动概述(二)-服务暴露
前言在上篇文章中,了解了ServiceBean在spring 中的加载过程,下面我们再来看看ServiceBean是如何暴露的,这部分参考了官方的文档,但是这里不会分析的很仔细,粒度比较粗,只是简单的介绍一些模块,重在思想,如果一行一行的结束代码,估计也会看得爪瞌睡。本文很大程度上参考了官方文档 服务导出并在上面基础上做了增删,很多复杂的地方被我略去了简介Dubbo 服务导出过程始于...
2019-12-01 23:43:21
1526
原创 dubbo 启动概述(一)-服务加载
前言在项目启动过程中,dubbo服务如何随项目的启动而发布?dubbo如何随着spring容器的初始化而启动?我们使用的dubbo 注解@Service 是如何工作的(或者xml 配置),下面我们将来分析dubbo 服务端是如何随着Spring 启动而启动的,本文主要分析基于注解方式。本文需要Spring 启动流程加载的一些知识,这里不会细讲,具体可以参考我以前写的Spring IOC相关的...
2019-11-30 21:30:06
609
原创 Guava EventBus 源码分析
前言EventBus是Guava的事件处理机制,是设计模式中的观察者模式(生产/消费者编程模型)的优雅实现。EventBus是一个非常优雅和简单解决方案,我们不用创建复杂的类和接口层次结构。传统上,Java的进程内事件分发都是通过发布者和订阅者之间的显式注册实现的。设计EventBus就是为了取代这种显示注册方式,使组件间有了更好的解耦。EventBus不是通用型的发布-订阅实现,不适用于...
2019-06-08 13:40:24
641
1
原创 springboo2.x权限 demo(shiro,sprng security,oauth2)
前言这是一篇关于权限方面的文章,这是去年的时候结合一些简单的项目,自己抽空瞎折腾的学习demo,进行了一定的整理,涉及的内容包括spring boot 2.x,shiro,spring security,oauth2公布出来的目的??,方便爱学习的你(骗赞)。本文也不得介绍这些项目流程,也不会讲解怎么实现的,毕竟都是套路,难度不大,自己debug 调试,也算是能力的提高。每个项目中很...
2019-01-12 18:52:20
2958
原创 Netty源码分析三 Future,Promise
前言前面 分析了Netty整体的流程 和 Channel的结构,我们看到 Netty 中有很多的异步调用,所以在介绍更多 NIO 相关的内容之前,我们来看看它的异步接口是怎么实现的。回顾前面我们在介绍 Echo 例子的时候,已经用过了 ChannelFuture 这个接口了,接下来我们就来看看 Netty 中的异步调用是如何实现的。客户端// Start the client.Chan...
2019-01-12 17:48:20
705
原创 Spring Bean 生命周期
原文发布于: http://blog.ztgreat.cn/article/68前言在前面 我们分析了Spring BeanFactory,Spring IOC,Spring AOP,对于IOC的部分,我们跟踪了整个bean的初始化过程:Spring源码分析:IOC容器初始化(一)Spring源码分析:IOC容器初始化(二)这里我们对Spring Bean的生命周期单独做一个总结,...
2019-01-05 17:06:52
982
原创 Netty源码分析二 Channel实现
原文发布于: http://blog.ztgreat.cn/article/67前言2018年最后几天,争取憋一篇文章出来( >﹏<。)~在上文 Netty源码分析一 初识Netty 中利用官方的例子Echo 把Netty的整体流程走马观花的过了一遍,现在我们就一起来分析Netty中的一些具体模块,看Netty 是如何封装实现Java 中的NIO 的,今天我们来看看Netty...
2018-12-31 20:59:58
633
原创 Netty源码分析一 初识Netty
前言开始进入Java NIO系列的深入学习了,Netty 是Java系的一个著名NIO框架,Netty在互联网领域获得了广泛的应用,一些著名的开源组件也基于Netty构建,比如RPC框架、zookeeper等。Netty从使用的角度来说非常的简单,套官方的Demo就可以了,当然对于我们大部分的猿类来说仅仅是使用是不可能的,对于一些核心的技术知识,必须要知其所以然,不然长江后浪推前浪,前浪死在沙...
2018-12-23 18:59:21
418
原创 图解B树的前世今生
背景注:本文假设读者有搜索树(排序树)的基础知识。我们知道计算的存储系统是一个分级结构(一般来讲,存储器速度越快,价格也越高,因而也越难满足大容量的要求)首先容量和类型不同的存储器在访问速度上的差异是极其悬殊的,就以我们最常见的磁盘以及内存这两级存储为例:就传统的旋转式磁盘而言 它的访问速度大致是毫秒量级,而典型的内存呢 大致是在纳秒量级,如果 以一秒为基准,前者是10的-3次方 而后者...
2018-12-07 20:06:12
1879
原创 Spring源码分析:AOP分析(三)
个人扯淡博客:http://blog.ztgreat.cn前言在上篇博客中,分析了Spring Aop的Advice的实现过程,其中Spring对Advice 使用了适配器模式,将Advice包装成了Interceptor,在最后,我们通过Spring提供的接口,实现了PointCut,Advice ,Advisor,至此更加的明白了三者的关系。在前面的配置中,对于每一个需要被代理的be...
2018-11-24 14:48:49
431
原创 Spring源码分析:AOP分析之Advice
个人扯淡博客:http://blog.ztgreat.cn前言上篇文章中我们先从动态代理技术谈起,简单的分析了动态代理技术,接着对Spring 中的AOP 以ProxyFactoryBean为例,通过简单的配置,对Spring AOP的基本实现和工作流程进行了简单的梳理,通过ProxyFactoryBean 得到AopProxy对象。对于JDK的AopProxy代理对象,使用是Invoc...
2018-11-16 19:15:44
6534
原创 基于Netty的代理工具Proxy
前言个人扯淡博客:http://blog.ztgreat.cnNetty是一个高性能、异步事件驱动的NIO框架,提供了对TCP、UDP和文件传输的支持,对于目前而言,只要互联网存在,那么网络IO 也将存在,就目前的形式而言,硬件越来越好,带宽也越来越大,这个时候IO的瓶颈就凸显了出来,个人觉得,掌握一门IO框架是很重要的,不能仅仅的学会做点应用层,对于中下层还是需要熟悉的,这样才能健全整个...
2018-11-08 19:05:27
9103
7
原创 Spring源码分析:AOP分析(一)
前言个人扯淡博客:http://blog.ztgreat.cnSpring 的两大核心,一是IOC,我们之前已经学习过,而另一个则是大名鼎鼎的 AOP,AOP的具体概念我就不介绍了,我们今天重点是要从源码层面去看看 spring 的 AOP 是如何实现的。在Spring AOP实现中,使用的核心技术是动态代理,生成代理类有两种策略:jdk动态代理和cglib动态代理。下面简要的谈一谈这...
2018-11-08 19:02:50
560
原创 Spring源码分析:循环依赖
前言个人扯淡博客:http://blog.ztgreat.cn前面分析了Spring BeanFactory,接着分析了Spring IOC的初始化过程,对整个流程有了一定的认识,当然没有面面俱到,当然也不可能,我自己本身定位就是把握主要脉络,前面遗留了一个问题,就是在Spring IOC最后初始化单例bean的时候,针对循环依赖的处理问题,学习一下思想,处理方式,这是这篇文章的主要目的。...
2018-11-08 19:01:46
1629
原创 Spring源码分析:IOC容器初始化(二)
个人扯淡博客:http://blog.ztgreat.cn前言在前面分析了Spring IOC的初始化过程的前半部分,今天分析一下初始化过程中一个非常重要的环节—初始化所有的 singleton beans需要以下基础内容:Spring源码分析:Spring IOC容器初始化(一)Spring-BeanFactory源码分析(一)Spring-统一资源加载策略Spring-Bea...
2018-10-18 09:13:25
485
原创 Spring源码分析:IOC容器初始化(一)
个人扯淡博客:http://blog.ztgreat.cn前言在前面 先分析了最底层的IOC容器BeanFactory,接着简单分析了高级形态的容器ApplicationContext,在ApplicationContext 中我们知道一个核心方法 refresh,这里面就是IOC容器的初始化流程,在前面并没有直接去分析它,只是简单的分析了BeanDefinition的载入,解析注册,有了...
2018-10-18 09:12:29
616
原创 Spring源码分析:BeanFactory (二)
个人扯淡博客:http://blog.ztgreat.cn前言在前面我们简单的分析了BeanFactory的结构,ListableBeanFactory,HierarchicalBeanFactory,AutowireCapableBeanFactory。主要核心类DefaultListableBeanFactory,通过编程启动IOC容器 将BeanFactory的功能逐渐的剥离开来,方...
2018-10-18 09:11:12
690
原创 Spring-统一资源加载策略
个人扯淡博客:http://blog.ztgreat.cn前言在前面我们初步简单的分析了一下BeanFactory的体系结构,第一步我们需要从配置文件中读取配置信息,JDK所提供的访问资源的类(如java.net.URL、File等),并不能很好的满足各种底层资源的访问需求,比如缺少从类路径或者Web容器的上下文获取资源的操作类。Spring 设计了一个Resource接口,它为应用提供...
2018-09-27 12:58:54
1345
原创 Spring-BeanFactory源码分析(一)
个人扯淡博客:http://blog.ztgreat.cn前言Spring 版本:5.0.9.RELEASE正式进入Spring 源码分析这个模块了,对于spring这个庞大的工程,如果要一点点的完全分析是非常困难的,对于应用型框架,我还是偏向于掌握思想或者设计,而不是记住代码,对于初次看spring源码,相信大家都很头大,而且看懂并不一定就是理解了,想要更好的效果,就要记录下来,扯...
2018-09-27 12:56:29
5145
原创 Java NIO之Selector 浅析
个人扯淡博客:http://blog.ztgreat.cnJava NIO 由以下几个核心部分组成:1、Buffer2、Channel3、Selector在Java NIO之Channel、Buffer中 简单的介绍了Buffer,Channel ,本文主要讲解NIO的Selector相关知识,Selector是整个NIO的核心,理解selector机制是理解整个NIO的关键所在。...
2018-09-27 12:52:37
10844
2
原创 终于还是有了自己的小站
2018年8月,终于还是有了自己的小站,断断续续写博客也有3年了,感谢当时学校团队里面的学长们,最开始也是在他们的鼓励下,自己才写的,当时也没有想太多,也就简单记录一下吧,那个时候年轻嘛,哈哈,写写算法,简单记录了一下学习的东西,并没有在上面倾注太多的精力,大四的时候断了一年。2017年走出了学校,随后又开始写博客了,期间萌生过想法,搭建一下自己的博客网站,对于程序猿来说,我想这应该很容易,但...
2018-08-26 19:24:00
620
2
原创 乱弹 --- Linux 之 I/O模型
随着现在互联网技术的发展,在以前对一个网站的要求都不高,但是现在要求越来越高了,不断的优化服务,不断的提高硬件设施,在以前I/O方面的消耗还影响不大,但是现在I/O的瓶颈越来越凸显,了解I/O模型,能了解I/O的发展历史,同时也能帮助我们写出更加健壮的代码。一般来说,I/O模型可以分为阻塞/非阻塞和同步/异步,我们先从阻塞/非阻塞模型说起。在Linux 系统中,Linux内核会将所有的外部...
2018-08-12 17:52:12
301
原创 Java NIO之Channel、Buffer
Java NIO 由以下几个核心部分组成:BufferChannelSelector传统的IO操作面向数据流,面向流 的 I/O 系统一次一个字节地处理数据,意味着每次从流中读一个或多个字节,直至完成,数据没有被缓存在任何地方。NIO操作面向缓冲区( 面向块),数据从Channel读取到Buffer缓冲区,随后在Buffer中处理数据。什么是Buffer(缓冲区)?Bu...
2018-08-09 21:03:44
506
原创 Spring Session 源码分析(2)——Session机制的实现细节
在Spring Session 源码分析(1)中,梳理了一下Spring Session 接管Tomcat Session的过程,通过配置DelegatingFilterProxy 和指定过滤器名称,spring 接收到请求后,包装HttpServletRequest ,HttpServletResponse ,然后再传递到后续应用,因此没有特殊的需求,需要把DelegatingFilterPro...
2018-08-07 22:42:22
482
原创 深入理解ClassLoader工作机制(jdk1.8)
ClassLoader 顾名思义就是类加载器,ClassLoader 作用:负责将 Class 加载到 JVM 中审查每个类由谁加载(父优先的等级加载机制)将 Class 字节码重新解析成 JVM 统一要求的对象格式类加载时机与过程类从被加载到虚拟机内存中开始,直到卸载出内存为止,它的整个生命周期包括了:加载、验证、准备、解析、初始化、使用和卸载这7个阶段。其中,验证、准备和解...
2018-08-05 23:28:46
43524
8
原创 Spring Session 源码分析(1)——springSessionRepositoryFilter
Tomcat Session对于session 是一个老生畅谈的话题了,Session管理是JavaEE容器比较重要的一部分, Tomcat中主要由每个context容器内的一个Manager对象来管理session。对于这个manager对象的实现,可以根据tomcat提供的接口或基类来自己定制,同时,tomcat也提供了标准实现。 在每个context对象,即web app都具有一个...
2018-08-02 19:38:29
13101
2
原创 Java 线程池 --- ThreadPoolExecutor源码分析
在多线程编程中,或多或少都听过或者使用过线程池,合理利用线程池能够带来三个好处。降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。但是要做到合理的利用线程池,必
2018-01-23 21:13:57
889
TCP-IP详解卷1:协议
2015-10-15
nasm中文手册
2015-03-12
C++标准程序库
2014-11-10
ACM培训-动态规划
2014-11-10
取石子游戏_博弈
2014-11-10
白话经典算法之七大排序第2版
2014-11-10
背包问题九讲
2014-11-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人