自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

rootlh的博客

普通开发者如果习惯于在架构师封装好的东西之上,只专注于做业务开发,那久而久之,在技术理解和成长上就会变得迟钝甚至麻木。

  • 博客(121)
  • 资源 (1)
  • 收藏
  • 关注

原创 K8S调度器Schduler工作原理--Priority优选算法中的抢占机制

文章目录一、为什么需要抢占机制二、如何使用抢占机制1、创建 PriorityClass 对象:2、在 deployment、statefulset 或者 pod 中声明使用已有的 priorityClass 对象即可三、相关流程一、为什么需要抢占机制当一个 pod 调度失败后,暂时处于 pending 状态,直到 pod 被更新或者集群状态发生变化,调度器才会对这个 pod 进行重新调度。但在实际的业务场景中会存在在线与离线业务之分,若在线业务的 pod 因资源不足而调度失败时,此时就需要离线业务下掉一

2020-05-23 15:59:16 570

原创 K8S-APIServer源码分析组件构成、原理、程序流程

文章目录一、组件构成二、组件实现原理三、程序流程源码分析一、组件构成apiserver 由 3 个组件构成(AggregatorServer、APIServer、APIExtensionServer)AggregatorServer:实现请求的代理转发,将来自用户的请求拦截转发给其他服务器,并且负责整个 APIServer 的服务发现功能APIServer:负责对内建资源对象请求的一些处理...

2020-05-10 17:16:51 2138

原创 K8S实现资源预留分析

节点可为pod分配的资源计算方法:Node Allocatable Resource = Node Capacity(资源总大小) - Kube-reserved(kubelet保留资源) - system-reserved(系统保留资源) - eviction-threshold(用户设置的驱逐阈值)

2020-04-12 15:58:55 2218

原创 K8S基于MutatingAdmissionWebhook实现资源超卖

K8S基于MutatingAdmissionWebhook解决资源超卖问题资源超卖问题分析实现资源超卖的思路MutatingAdmissionWebhook特性MutatingWebhookConfiguration对象简介源码分析资源超卖算法实践参考资料资源超卖问题分析在生产环境中,kubernetes集群的计算节点上运行着许许多多的Pod,分别跑着各种业务容器,我们通常用Deploymen...

2020-03-22 15:12:12 6951 2

原创 K8S调度器Schduler工作原理--Predicates预选算法过程分析

Predicates预选算法过程分析Scheduler工作流程Predicates预选流程predicate的并发过程用 podFitsOnNode 函数实现一个node的预选过程单个predicate执行过程Scheduler工作流程我们在使用K8S集群时,常常需要对Deployment Controller做创建、修改、删除操作,K8S对应的会创建、销毁和重新调度Pod在合适的节点上,这个...

2020-01-14 16:02:43 1635

原创 K8S调度器Schduler工作原理--Priority优选算法过程分析

Priority优选算法过程分析Scheduler工作流程Priority优选流程Fucntion类型优选算法Map-Reduce类型优选算法Combine组合结果集Scheduler工作流程我们在使用K8S集群时,常常需要对Deployment Controller做创建、修改、删除操作,K8S对应的会创建、销毁和重新调度Pod在合适的节点上,这个调度过程是通过K8S的Scheduler调度...

2020-01-11 19:20:17 892

原创 JVM字节码分析--switch语法糖

JVM字节码分析--switch语法糖一、switch 底层实现二、String的switch实现一、switch 底层实现编译器使用 tableswitch 和 lookupswitch 两个指令来生成 switch 语句的编译代码:int chooseNear(int i) { switch (i) { case 0: return 0; case...

2019-05-16 14:13:35 382

原创 JVM字节码分析--invoke指令

JVM字节码分析--invoke指令一、方法调用的5个字节码指令二、方法的静态绑定与动态绑定三、invokestatic、invokevirtual 、invokespecial 、invokeinterface 和 invokedynamic 指令使用场景一、方法调用的5个字节码指令在对象实例初始化时,方法的调用会对应5种字节码指令invokestatic:用于调用静态方法invoke...

2019-05-15 11:26:10 1587

原创 Redis分布式锁的探索

Redis分布式锁的探索参考资料Redlock业务场景解决分布式锁思路1解决分布式锁思路2使用Redlock算法解决分布式锁参考资料Redlockhttp://zhangtielei.com/posts/blog-redlock-reasoning.htmlhttp://zhangtielei.com/posts/blog-redlock-reasoning-part2.html业务场景...

2019-04-29 10:11:34 132

原创 布隆过滤器--推荐系统去重

布隆过滤器--推荐系统去重使用场景基本思路1基本思路2Redis布隆过滤器实现思路基本指令自定义参数的布隆过滤器布隆过滤器实现原理使用场景我们在使用新闻客户端看新闻时,它会给我们不停地推荐新的内容,它每次推荐时要去重,去掉那些已经看过的内容。基本思路1服务器记录了用户看过的所有历史记录,当推荐系统推荐新闻时会从每个用户的历史记录里进行筛选,过滤掉那些已经存在的记录。但当用户量很大、每个用户...

2019-04-29 09:51:44 2909 2

原创 CyclicBarrier核心代码dowait()方法分析(底层实现机制)

引言:    相信大家对CyclicBarrier并不陌生,当一个线程调用了CyclicBarrier的await方法时,线程阻塞,直到指定数量的线程都执行完await方法后才唤醒所有线程。那么CyclicBarrier的代码底层是如何实现的呢?它和CountDownLatch有什么区别呢?    很显然,CyclicBarrier底层是使用ReentrantLock中的get

2017-09-24 23:32:57 1073

转载 从一个 NullPointerException 探究 Java 的自动装箱拆箱机制

转载自知乎专栏:https://zhuanlan.zhihu.com/p/28645185作者:mzlogin前天遇到了一个 NullPointerException,触发的代码类似下面这样:public class Test { public static long test(long value) { return value;

2017-08-21 14:25:13 424

原创 K8S调度器--优先级与抢占机制、亲和性调度、内置调度算法(1.19版本新特性)

一、优先级与抢占机制Kube-scheduler 在调度过程中,每次从调度队列(SchedulingQueue)中取出 Pod,进行一轮调度。那么调度队列中的 Pod 是按照什么顺序入队的呢?Pod 资源对象支持设置优先级(Priority)属性,通过优先级的不同,将优先级高的 Pod 放在调度队列的前面,优先进行调度。如果优先级高的 Pod 调度失败,没有找到合适的节点时,会放入无法调度队列(UnschedulableQueue)中,进入抢占阶段,在下次调度时将节点上优先级低的 Pod 驱逐。如何为

2020-10-26 21:09:47 1335

原创 K8S调度器--kube-scheduler架构设计和启动流程源码分析

文章目录一、kube-scheduler架构设计二、kube-scheduler组件启动流程一、kube-scheduler架构设计调度器的核心功能是为Pod找到最适合的节点运行。对于小规模集群,每个调度周期会遍历集群中的所有节点,找到最合适节点进行调度。而对于大规模集群,每个调度周期只会遍历集群中的部分节点,在这部分节点中找到最合适的节点进行调度。整个调度流程主要分为预选、优选和绑定三个节点。预选阶段首先过滤掉不符合条件的节点,优选阶段主要对预选阶段筛选后的节点进行打分,绑定阶段将分数最高的节点和

2020-10-17 16:30:48 812

原创 K8S-APIServer日志报 has no resources 的分析

文章目录一、现象二、源码分析三、APIServer的启动流程对应的源码:1、资源注册2、创建 KubeAPIServer一、现象在生产环境中遇到 api-server 服务发生陆续重启的现象, 查看监控,APIServer 所在的 master 节点的CPU、内存和网络流量发生抖动。在 APIServer 日志中可以看到日志中存在 it has no resources 的警告日志:{"log":"W0814 03:04:44.058851 1 genericapiserver.go:3

2020-09-06 11:07:02 2186

原创 Client-go源码分析(四)WorkQueue

文章目录一、WorkQueue 简介二、WorkQueue 结合 Informer 的完整使用案例三、FIFO 队列四、延迟队列五、限速队列本文为《Kubernetes 源码剖析》读书笔记,书籍简介:http://www.broadview.com.cn/book/6104一、WorkQueue 简介在 Informer 中,Delta FIFO 队列触发 Add、Update、Delete 回调,在回调方法中,将需要处理的资源对象变化事件的 key 放入 WorkQueue 工作队列中。等待 Con

2020-08-21 22:49:21 696

原创 Client-go源码分析(三)Informer机制

文章目录一、简介二、Reflector 底层原理分析[思考] Informer 中的优化机制本文为《Kubernetes 源码剖析》读书笔记,书籍简介:http://www.broadview.com.cn/book/6104一、简介Kubernetes 中,控制器需要对集群中的资源对象的状态进行监控,使资源对象的实际状态和通过 yaml 定义的期望状态协调达到一致。那么控制器是如何对资源对象进行监控,并根据对象的实际状态变化做出相应的处理呢?实际上就是通过 Client-go 包中的 Informe

2020-08-12 21:38:54 732

原创 Client-go源码分析(二) Informer 中的 Resync 机制分析

一、Client-go 中的 Informer 工作流程图Informer 中的 Reflector 通过 List/watch 从 apiserver 中获取到集群中所有资源对象的变化事件(event),将其放入 Delta FIFO 队列中(以 Key、Value 的形式保存),触发 onAdd、onUpdate、onDelete 回调将 Key 放入 WorkQueue 中。同时将 Key 更新 Indexer 本地缓存。Control Loop 从 WorkQueue 中取到 Key,从 Ind

2020-08-09 10:52:15 1877

原创 Client-go源码分析(一)客户端对象

一、源码结构discoverydynamickubernetesrestscaleinformerslisterstoolsutiltransportplugin二、Client 客户端对象

2020-08-07 20:22:52 1014

原创 TCP相关

文章目录1.Linux端口复用参数(套接字中SO_REUSEPORT和SO_REUSEADDR的区别)1.Linux端口复用参数(套接字中SO_REUSEPORT和SO_REUSEADDR的区别)参考:https://www.jb51.net/article/139134.htmSO_REUSEADDR:如果在一个socket绑定到某一地址和端口之前设置了其SO_REUSEADDR的属性,那么除非本socket与产生了尝试与另一个socket绑定到完全相同的源地址和源端口组合的冲突,否则的话这个so

2020-06-07 22:48:53 136

原创 Openshift中Route的HAProxy实现无缝重载原理分析

文章目录一、背景二、Haproxy在不同版本中处理无缝重载的策略OpenShift 3.9及更高版本OpenShift 3.7及更早版本一、背景在openshift集群中(以下简称OCP),对外部流量的转发是通过Router控制器控制Route对象中的路由规则来重载Infra节点中的HAProxy配置文件实现的。在上图中的第3步,Router重载Haproxy配置的过程中是会有有一小段时间Haproxy服务不可用,那么在Haproxy重载过程中是如何做到用户请求不丢失呢?二、Haproxy在不同版

2020-05-30 14:06:10 927

原创 Raft算法详解

文章目录一、leader选举过程1、启动时选举:2、运行时选举:3、log replication4、脑裂问题一、leader选举过程raft协议中,一个节点任一时刻处于以下三个状态之一:leader:主节点follower:从节点candidate:候选主节点1、启动时选举:有节点启动时都是follower状态,在一段时间内如果没有收到来自leader的心跳,从follower切换到candidate,发起选举。如果收到集群中大多数的票(含自己的一票)则切换到leader状态;如果发现其

2020-05-23 17:01:02 3704

原创 K8S的HPA机制

K8S的HPA机制一、HPA简介二、HPA设置一、HPA简介HPA(Horizontal Pod Autoscaler)Pod自动弹性伸缩,通过对Pod中运行的容器各项指标(CPU占用、内存占用、网络请求量)的检测,实现对Pod实例个数的动态新增和减少。早期的kubernetes版本,只支持CPU指标的检测,因为它是通过kubernetes自带的监控系统heapster实现的。到了kube...

2020-03-13 14:11:43 17739

原创 OKD(OpenShift 3.11)平台3节点集群安装

OKD平台3节点集群安装1.准备工作1.1 机器划分ssh-keygen #生成秘钥 一路回车ssh-copy-id master01ssh-copy-id node01ssh-copy-id node02yum update -yyum install wget git net-tools bind-utils yum-utils iptables-services bridge-utils ...

2020-02-24 12:36:02 3022 5

原创 Redis主从复制及其心跳检测实现机制

[Redis专题] Redis主从复制及其心跳检测实现机制1、Redis主从工作模式简述2、同步2.1老版本的Redis(2.8之前)新版本的Redis(2.8之后)3、命令传播4、新版本主从节点同步示例5、心跳检测5.1 检测主从服务器的网络连接状态5.2 辅助实现min-slave选项5.3 检测命令是否丢失1、Redis主从工作模式简述假设Redis中有一个主节点和一个从节点。正常情况下...

2019-07-25 15:50:00 4021

原创 布谷鸟过滤器

布谷鸟过滤器一、布隆过滤器二、布谷鸟过滤器三、优缺点四、参考资料一、布隆过滤器布隆过滤器有exists方法通过对位数组的hash计算判断某元素是否在集合中,实现去重功能。但布隆过滤器有一下缺点:不支持反向删除元素:一旦对位数组进行了赋值,无法将其删除。查询性能弱:布隆过滤器使用多个hash函数计算位图多个不同位点,由于多个位点在内存中不连续,CPU寻址花销较大。空间利用率低。二、布...

2019-07-07 16:15:38 9552

转载 Java 8新的时间日期库的20个使用示例

Java 8新的时间日期库的20个使用示例一、 如何 在Java 8中获取当天的日期二、 如何在Java 8中获取当前的年月日三、在Java 8中如何获取某个特定的日期四、在Java 8中如何检查两个日期是否相等五、在Java 8中如何检查重复事件,比如说生日六、如何在Java 8中获取当前时间七、如何增加时间里面的小时数八、如何获取1周后的日期九、一年前后的日期十、在Java 8中使用时钟十一、...

2019-06-30 14:32:35 237

转载 JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解

JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解一、企业级应用开发现状二、jps(Java Virtual Machine Process Status Tool)三、jstack四、jmap(Memory Map)和jhat(Java Heap Analysis Tool)五、jstat(JVM统计监测工具)六、hprof(Heap/CPU Prof...

2019-06-22 15:57:01 714

原创 JVM字节码分析--Synchronized关键字底层实现

JVM字节码分析--Synchronized关键字底层实现一、代码块级别的 synchronized二、方法级别的synchronized一、代码块级别的 synchronized一个代码块加synchronized关键字的例子:private Object lock = new Object();public void test() { synchronized (lock) {...

2019-05-26 12:44:38 854

原创 一致性哈希算法

一致性哈希算法一、普通hash算法二、一致性哈希算法一、普通hash算法在分布式系统中,Redis 的 key 通过对服务器数量 n 取模即可得到对应存放的服务器编号,将对应的key-value进行读写。但由于这套hash算法和分布式系统中的服务器节点数量是强相关的,一旦系统中的节点出现了增删,整套hash算法需要重新计算,在计算过程中会导致缓存无法命中,耗费性能且易出错。二、一致性哈希算法...

2019-05-19 16:01:15 216

原创 Redis持久化

Redis持久化业务场景持久化分类全量持久化原理AOF原理使用混合持久化的方式业务场景Redis 的数据全部在内存里,如果突然宕机,数据就会全部丢失,因此必须有一种机制来保证 Redis 的数据不会因为故障而丢失,这种机制就是 Redis 的持久化机制。持久化分类Redis的持久化分为全量持久化(快照)和增量持久化(AOF 日志)。全量持久化将内存中的数据直接快照存在硬盘中,增量持久化通过...

2019-04-29 10:22:58 126

原创 漏洞算法实现漏斗限流

漏洞算法实现漏斗限流漏斗算法思想漏斗算法思想漏斗的容量是有限的,如果将漏嘴堵住,然后一直往里面灌水,它就会变满,直至再也装不进去。如果将漏嘴放开,水就会往下流,流走一部分之后,就又可以继续往里面灌水。如果漏嘴流水的速率大于灌水的速率,那么漏斗永远都装不满。如果漏嘴流水速率小于灌水的速率,那么一旦漏斗满了,灌水就需要暂停并等待漏斗腾空。所以,漏斗的剩余空间就代表着当前行为可以持续进行的数量,漏嘴...

2019-04-29 10:21:05 2578

原创 zset实现简单限流

zset实现简单限流业务场景限流思路业务场景有一个限流系统要求限定用户的某个行为在指定的时间里只能允许发生 N 次限流思路这个限流需求中存在一个滑动时间窗口,而 zset 数据结构的 score 值,恰好可以通过 score 的范围来圈出这个时间窗口。我们只需要保留这个时间范围窗口,窗口之外的数据都忽略掉。这个 zset 的 value 需要保证唯一性,将value设置成毫秒时间戳即可。...

2019-04-29 10:19:09 1110

原创 HyperLogLog--统计用户访问量

HyperLogLog--统计用户访问量使用场景基本思路1使用HyperLogLog解决海量数据统计问题基本指令(用法和set集合的sadd类似)pfmerge合并两个HyperLogLogHyperLogLog实现原理使用场景需要统计网页每天的用户访问量的数据,同一个用户一天之内的多次访问请求只能计数一次,要求每一个网页请求都需要带上用户的 ID,无论是登陆用户还是未登陆用户都需要一个唯一 ...

2019-04-29 10:02:37 7159 1

原创 CAP理论

1.1 CAP理论简介CAP 分别为 consistency (强一致性)、availability (可用性) 和 partition tolerance (分区容错性)。理论核心: 在分布式系统中,一个分布式系统不可能同时很好的满足一致性、可用性和分区容错性这三个需求。因此,根据 CAP 原理将 NoSQL 数据库分成满足 CA 原则、满足 CP 原则和满足 AP 原则三大类:CA:单点...

2019-03-18 11:58:05 188

原创 [Redis专题]list列表操作及其原理分析

一、list操作在Redis 中,列表操作通常使用list指令进行,类似于java 的LinkedList,Redis 的列表使用的是链表的数据结构进行数据存储。上图创建了一个key 为person 的list ,通过lpop 指令将其依次推出队列,可见其满足队列的先进先出(FIFO)原则。二、list的底层实现在上小节中提到,Redis 的list 使用的是链表数据结构进行数据存储,这...

2018-12-02 13:48:04 2199

转载 [Redis专题]Redis基础知识巩固

一、Redis的数据结构:常用:字符串String、字典Hash、列表List、集合Set、有序集合SortedSet、HyperLogLog等二、Redis分布式锁的应用:通过set指令争抢锁,得到锁后expire设置锁的超时时间(防止锁得不到释放)三、Redis异步队列的应用:方法1:(非阻塞)使用list结构作为队列,rpush生产消息,lpop消费消息。当lpop没有消息的时候,...

2018-12-02 11:37:21 149

原创 [Nginx专题]二、Nginx的组成

目录1.1 核心功能:二进制可执行文件1.2 、Nginx.conf配置文件1.3、access.log访问日志1.4、error.log错误信息1.1 核心功能:二进制可执行文件Nginx由各个模块组成,这些模块可最终编译成一个二进制可执行文件,让Nginx正常的运行1.2 、Nginx.conf配置文件Nginx运行时的各种功能可以由用户根据自己的需求定制所需功能,用户按照一定的语法规...

2018-11-19 00:04:50 251

原创 [Nginx专题]一、Nginx的功能

[Nginx专题]一、Nginx的功能1.1 一个简单的web服务器1.2 高并发情况下的web服务器1.3 页面加载迅速的web服务器1.4 直接访问数据库的web服务器1.5 总结1.1 一个简单的web服务器在日常的后端开发工作中,我们常常使用apache作为后端的应用服务器:1.2 高并发情况下的web服务器随着用户访问量的增加,应用服务器的QPS(每秒用户查询量)达到瓶颈,我们...

2018-11-17 22:23:36 126

原创 Spring Social开发第三方登录----OAuth协议简介

一、为什么需要OAuth协议?在用户使用社交软件(微信等)登录第三方应用账号时,考虑到用户安全性问题:1.如果用户将社交软件(如:微信、QQ)的账号密码告知服务端,服务端将获取微信、QQ上的所有数据(包括好友列表、朋友圈、聊天记录图片等隐私数据),安全性无法得到保障。2.若用户打算终止授权,需要手动修改密码才能实现(对用户十分不友好)。3.密码容易泄露。4.需要一种机制,用户不

2018-01-18 17:32:30 1520

log4j-1.2.17

log4j源码包!!需要请自取!!Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器。

2017-09-13

空空如也

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

TA关注的人

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