自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(94)
  • 问答 (1)
  • 收藏
  • 关注

原创 kubebuilder(4)部署&测试

现在还没有我们自定义的demo crd实例,demo nameSpace下也没有任何pod。在samples目录下有一个默认的资源描述文件tutorial_v1_demo.yaml。验证通过patch修改podNum,来增减pod的数量。controller中也会看到对应的日志。我们apply一下这个demo crd。编译运行controller。controller的日志。看到3个pod都创建出来了。我们可以使用进行部署测试。将crd部署到k8s。

2024-04-25 20:40:41 601

原创 kubebuilder(3)实现operator

在开发公司自己的paas平台,有一个需求是,用户在发版的时候,只需要在页面上填几个字段,我们在k8s中自动拉起service和deployment等资源,屏蔽k8s的底层技术对上层用户的困扰。就是对任何tutorialv1.Demo或Service、Deployment、Pod的变化,我们的Controller都会监听到,并生成事件,触发Reconcile()方法。在前面的文章我们已经了解了operator项目的基本结构。也就是我们在k8s中只要这个crd的变动,就会触发我们的Reconcile()方法。

2024-04-24 20:07:28 739

原创 kubebuilder(2)创建项目及初始化

groupversion_info是一些group和version信息,zz_generated.deepcopy.go是会自动生成的。manager是用来管理controller的控制器,代码的主要功能就是启动controller,并使多个controller共存。main.go是程序的入口,初始化了Manager,由manager来管理api和controller。这一步创建了 Go module 工程基本的模板文件,引入了必要的依赖。否则找不到,就会去下载,但是我当前工作目录下并没有bin目录。

2024-04-22 20:49:38 243

原创 kubebuilder(1)开发环境搭建

基于模板生成YAML文件,下载kustomize二进制压缩包:https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize/v3.8.1/kustomize_v3.8.1_linux_amd64.tar.gz。kustomize允许用户将不同环境所共享的配置放在一个文件目录下,而将其他不同的配置放在另外的目录下。这样用户就可以很容易的区分那些值是当前环境所特有的,从而在修改的时候会额外关注。首选需要一个可用的K8S集群。

2024-04-20 19:22:34 681

原创 怎么理解load_average

这通常意味着进程正在等待 I/O 操作,如从磁盘读取数据,而这个操作目前无法完成,可能是因为物理设备(如硬盘)正在忙碌,或者数据尚未准备好。可以 cat /proc/<pid>/stack, 看到进程停在内核中的哪个函数上,结合内核的代码,猜一下到底是卡在哪里。假设一台只有1个cpu的服务器,如果此时cpu在运行一个进程,并且没有其他等待运行的进程。比如同样的业务应用场景,服务器配置一样,将高速磁盘换成低速磁盘,会明显感受到应用性能的降低。还是看这张图,在进行磁盘io操作的时候,进程就会进入这个状态。

2024-04-19 20:28:10 360

原创 【开源分享】容器内的top命令工具

考虑到部署lxcfs有一定的成本,topic(top in container)的思路则是改造top命令,去适配容器,读取容器中反映真实运行情况的系统文件,从而展示正确的容器运行信息,对于用户而言成本更低。针对容器内查看系统状态的问题,目前比较通用的解决方案是通过lxcfs,将容器中相应的文件通过fuse劫持read调用,在打开时显示为容器信息,从而统一解决各种系统状态诊断工具的问题。topic 即 top in container的缩写,意味容器内的top命令。现在的cpu和内存都是容器自己的。

2024-04-18 20:53:50 391

原创 如何正确查看容器的CPU使用率

在容器里top看到的是宿主机的cpu的原因就是,top查的是/proc/stat文件,这个文件是反应整个宿主机的状态信息的,不是单个容器的。很多工具如Prometheus,k8s中的资源计算,docker的计算最终都是从这个cgroup文件来的。这些指标每个空格隔开是一项,现在就看第14项时utime,即进程的用户态部分占用的cpu时间片。每个进程的状态是放在文件里的,在/proc目录下,每个进程有自己pid命名的文件夹,进入容器中top,虽然看到的PID是容器的,但是%Cpu的统计信息却是宿主机的。

2024-04-17 20:29:36 612

原创 绝对清晰的top中cpu指标的解释

nice值正数表示低优先级进程占用的CPU时间,而steal是在虚拟化环境中使用的,表示被同一宿主机上的其他虚拟机偷走的CPU时间。在内核态中,read()系统调用会首先在文件系统层面进行操作,这一阶段的CPU使用时间会计入“sy”(即system的缩写)。当一个用户程序开始执行,它首先处于用户态,用CPU使用率中的“us”(user的缩写)来表示。不管是硬中断hi还是软中断si,它们的CPU使用时间都不会计入进程的CPU时间,因为处理这些中断的时间不属于任何特定进程。横线的上半部分时用户态。

2024-04-16 20:23:29 281

原创 容器的底层技术:CGroup和NameSpace

无论是容器,还是虚拟机,都依赖于内核中的技术,虚拟机依赖的是 KVM,容器依赖的是 namespace 和 cgroup 对进程进行隔离和资源限制。容器实现封闭的环境主要要靠两种技术,一种是看起来是隔离的技术,称为(命名空间)。在每个 namespace 中的应用看到的,都是不同的 IP 地址、用户空间、进程 ID 等。另一种是用起来是隔离的技术,称为(资源限制),即明明整台机器有很多的 CPU、内存,但是一个应用只能用其中的一部分。

2024-04-03 20:19:16 1030

原创 MongoDB内存过高问题分析解决

freelist的就是已经分配后来又用完释放的内存,存在这个freelist数据结构中,已备后面重用这些内存,我的理解就是我用完了,但是我先拿着。因为这里的配置只是wiredTiger的内存cache限额,并不是mongo的全部使用内存限额,整个mongo进程的内存占用要比这个值大,所以cacheSizeGB万万不可设置超过RAM的60%。, 多数情况下,内存使用率高的原因是 tcmalloc 未能及时将内存归还给操作系统,导致内存最大可能达到几十GB。已经用满了,这种情况可以加一下内存了。

2024-03-28 21:02:46 563

原创 这班上的值不值

生活不只有眼前的苟且,还有诗和远方——但如果诗和远方的路费有点贵,那就先来【这班上的值不值】算一算,看看今天的班,到底值不值得你跨出这一步!输入日薪,工作时长,通勤时长,摸鱼时长,学历系数,工作环境系数,异性环境系数,同事环境系数,职业资格系数等。各位打工人,是不是每天上班遇到烦心事时,心里就想,这xx工作真是干不下去了。后来在一个群里有朋友分享了一个excel,用来测算自己这个班上的值不值。用了一晚上开发好了,发布的时候微信说要备案,好家伙,一备备了三个星期。想了一下,这玩意做个小程序这不很简单吗。

2024-03-26 21:26:17 342

原创 [易学SpringBoot]配置项的使用总结

在业务开发中,配置配置项是基本能力。本篇总结下SpringBoot中常用的配置项使用方法。1,最基础的直接使用在配置文件application.yml中写好配置。在代码中直接使用@RestControllerpublic class HelloController { @Value("${spring101.name}") private String name;...

2019-03-20 22:18:55 313

原创 老的SpringMVC项目接入shiro步骤

最近新接手了一个老项目。之前没有任何的权限管理。现在想接入shiro把权限这块管理起来。关于shiro网上的资料已经很多了,我就不重复了。 直接开搞。1,引入依赖 &lt;dependency&gt; &lt;groupId&gt;org.apache.shiro&lt;/groupId&gt; &lt;artifactId&gt;shiro-all&lt;/ar...

2019-01-31 11:58:47 735

原创 [极简SpringCloud]1,SpringCloud简介与5大组件

springcloudspringcloud是微服务架构的集大成者,将一系列优秀的组件进行了整合。基于springboot构建,对我们熟悉spring的程序员来说,上手比较容易。通过一些简单的注解,我们就可以快速的在应用中配置一下常用模块并构建庞大的分布式系统。SpringCloud的组件相当繁杂,拥有诸多子项目。重点关注Netflix图片来源@王璐-Louise。我是画不出来...

2019-01-20 22:27:19 226

原创 [极简SpringCloud]0,关于微服务

本文是SpringCloud系列文章的第一篇。学习Springcloud要先理解微服务。明白SpringCloud是为了解决什么问题而产生的。什么是微服务?微服务(Microservice Architecture)是近几年流行的一种架构思想,关于它的概念很难一言以蔽之。 此图适用于一切高大上的名字——技术有SOA,Agile,CLOUD,DevOps等等,古代有道,气,八卦等...

2019-01-20 17:19:54 239

原创 mongo集群移除shard操作

1,登录mongos移除shard必须在mongos节点执行命令我们先查一下当前的shard开始移除: db.runCommand( {removeshard:“shard1”} )看到如图的报错。原因下面说2,先做主节点切换一个库如果开启了分片,他是有一个primary shard的。不是所有分片都是平等的。如果要移除的恰好是主分片,必须在迁移完数据后,手动执行 movePri...

2019-01-14 21:42:38 2972

原创 大型网站架构

大型网站架构网站架构包括:前端架构+应用层架构+服务层架构+存储层架构+后台架构+数据中心机房架构+安全架构+数据采集与监控。前端架构浏览器优化技术 并不是优化浏览器,而是通过优化响应页面,加快浏览器页面的加载和显示,常用的有页面缓存、合并HTTP 减少请求次数、使用页面压缩等。CDN 内容分发网络,部署在网络运营商机房,通过将静态页面内容分发到离用户最近的CDN 服务器,使用户可以通过最短

2017-08-01 14:22:05 971

原创 linner入门

linner1,linner是啥一个html5应用打包器2,为什么要用参考链接: https://ruby-china.org/topics/12507 http://ruby-china.org/topics/258023,怎么使用1, 下载安装linner:安装ruby 安装RubyGems ruby setup.rb 安装DevKit ruby dk.rb init 随后

2017-07-28 17:01:13 3520

原创 java并发编程

一、前言借用Java并发编程实践中的话”编写正确的程序并不容易,而编写正常的并发程序就更难了”,相比于顺序执行的情况,多线程的线程安全问题是微妙而且出乎意料的,因为在没有进行适当同步的情况下多线程中各个操作的顺序是不可预期的,本文算是对多线程情况下同步策略的一个一个简单介绍。二、 什么是线程安全问题线程安全问题是指当多个线程同时读写一个状态变量,并且没有任何同步措施时候,导致脏数据或者其他不可预见的

2017-06-15 17:39:16 330

转载 sql优化

一、定位慢查询                                                                                      我们要对sql语句进行优化,第一步肯定是找到执行速度较慢的语句,那么怎么在一个项目里面定位这些执行速度较慢的sql语句呢?下面就介绍一种定位慢查询的方法。 1.1、数据库准备     首先创

2017-06-14 16:27:19 406

原创 sso原理浅析

关于sso原理分析:同域: xxx.com/demo1/hello.action xxx.com/demo2/hello.action 登录页面只需要在根路径下加一个cookie 关键就是这个cookie的路径要放到根路径,即顶级目录下,cookie.setPath(“/”); 这样两个action都可以访问到 即可进行登录验证同父域: demo1.xxx.com/demo1/he

2017-06-13 17:20:29 681

原创 jsonp原理

什么是JSONP? 先说说JSONP是怎么产生的:其实网上关于JSONP的讲解有很多,但却千篇一律,而且云里雾里,对于很多刚接触的人来讲理解起来有些困难,小可不才,试着用自己的方式来阐释一下这个问题,看看是否有帮助。1、一个众所周知的问题,Ajax直接请求普通文件存在跨域无权限访问的问题,甭管你是静态页面、动态网页、web服务、WCF,只要是跨域请求,一

2017-06-13 17:17:47 229

原创 ## javascript笔记(七)

javascript笔记(七)ajaxXMLHttpRequestjs能实现无需装载整个页面便能向服务器发送请求,靠的就是这个XMLHttpRequest。 XMLHttpRequest 是一个 JavaScript 对象。 var req = new XMLHttpRequest(); 常用属性 onreadystatechange Function,当readyState属性改变时会

2017-06-09 17:34:49 236

原创 javascript笔记(六)

javascript笔记(六)正则var expression = / pattern / flags flags是标记,有三种: g: 表示全局模式,即模式将被应用于所有字符串,而非在发现第一个匹配项时立即停止i: 表示不区分大小写模式,即在确定匹配项时忽略模式与字符串的大小写m: 表示多行模式,即在到达一行文本末尾时还会继续查找下一行中是否存在模式匹配的项和其他语言一样,元字符要转义

2017-06-09 17:28:57 217

原创 javascript笔记(五)

javascript笔记(五)面向对象javascript中没有类的概念。创建对象对面字面量方式var person = { name: '张三', age: 27, walk: function() { console.log('走路'); }}缺点很明显,只适合临时创建对象。 工厂模式 自然我们会想到,使用工厂模式批量生产对象。functi

2017-06-09 17:20:32 273

原创 JavaScript笔记(四)

JavaScript笔记(四)事件事件冒泡和事件捕获事件冒泡即事件开始时由最具体的元素接收,然后逐级向上传播到较为不具体的节点。 与事件冒泡相反,事件捕获中,最具体的元素会在最后接收到事件。 事件绑定语法: target.addEventListener(type, listener[, useCapture]); type : String,表示监听的事件类型(如click为点击事件

2017-06-09 17:20:02 244

原创 javascript笔记(二)

javascript笔记(二)数组length设置length会导致数组丢掉超长的数据,很危险,要小心。var arr = ["1",2,3,4]arr.length4arr.length = 11arr["1"]arr.length = 44arr["1", undefined × 3]以undefined填充为赋值的元素。 push,pop,shift,unshiftpus

2017-06-09 17:07:33 202

原创 javascript笔记(一)

javascript笔记(一)变量局部变量 用 var 操作符定义的变量将成为定义该变量的作用域中的局部变量。也就是说,如果在函数中使用 var 定义一个变量,那么这个变量在函数退出后就会被销毁,例如: function test(){var message = "hi"; // 局部变量}test();alert(message); // 错误!​ 这里,变量 message 是在函

2017-06-09 17:05:41 278

转载 数据库索引原理及优化

个人总结:要实现高效的查询,就需要高效的算法。而使用高效的算法需要特定数据结构的支持,索引就是这种特定的数据结构。  B+tree对b-tree主要不同,节点上只存key,不存数据。 数据结构。基本上所有的对速度的优化,最后都落到计算机组成原理的底层。联合索引,顺序极其重要。最左匹配原则。%xx是匹配不到索引的。    原文链接:http:/

2017-06-09 16:24:16 372

原创 分布式锁实现

分布式锁实现1,数据库实现 原理 数据库的行级X锁。 优点 不需要引入第三方应用。 缺点 死锁 对数据库性能影响,可能较长时间占用数据库连接资源 如果业务是分库分表的,可能支持不了 示例代码2,缓存实现 原理 通过SETNX是否成功。 当且仅当 key 不存在,将 key 的值设为 value ,并返回1

2017-06-09 11:40:27 517

原创 NIO基础

buffer使用 Buffer 读写数据一般遵循以下四个步骤:写入数据到 Buffer;调用 flip() 方法;从 Buffer 中读取数据;调用 clear() 方法或者 compact() 方法。当向 Buffer 写入数据时,Buffer 会记录下写了多少数据。一旦要读取数据,需要通过 flip() 方法将 Buffer 从写模式切换到读模式。在读模式下,可以读取之前写入到 Buf

2017-06-07 15:15:11 250

原创 reactor模式

reactor模式为了处理web request请求,有两种web架构:基于线程模型的架构和基于事件驱动的架构。基于线程模型线程模型的好处是扩展性比较好,通过加server机器提供更多的线程。 但是缺点就比较多了, 因为是采用一个连接对应一个处理线程的方式。 这就需要大量的处理线程,占用大量内存,大量线程调度开销。 尤其是大量连接到来时,线程用光,导致请求被丢弃。尤其是遇到keep-aliv

2017-06-07 15:13:02 331

原创 RocketMQ

RocketMQ顺序性与重复性消息系统绕不开的两个问题:如何保证消息的顺序?如何保证消息不重复? 对于第一个问题,RocketMQ的策略是,你可以自己实现selector方法,保证同一个id的消息放到同一个队列中。 对于第二个问题,答案是RocketMQ不保证消息不重复。 需要消费端自己保证幂等。可以使用去重表,消息重复的问题应当是比较少的。 事务消息RocketMQ除了支持普通消息,顺序消

2017-06-07 15:09:36 960

原创 单元测试

单元测试单测定义单元测试(Unit Testing)又称为模块测试, 是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作,程序模块在面向对象编程中一般是指方法。单元测试一般由开发人员来编写,用来保证程序及功能的正确性。为什么需要单测编写单元测试代码并不是一件容易的事情,那为什么还需要去话费时间和精力来编写单元测试呢?减少Bug:如今的项目大多都是多人分模块协同开发,当各个模块集成时再去

2017-06-06 11:40:08 4964 1

原创 dubbo源码分析

SPIDubbo采用微内核+插件体系。设计优雅,可扩展性强。 微内核+插件体系的实现是基于SPI机制。(service provider interface) 框架定义服务标准接口,使用者可以自己扩展服务实现。 1, Dubbo定义了@SPI注解 对于打了@spi注解的接口,dubbo会从以下目录依次查找实现。 META-INF/dubbo/internal/ //dubbo 内部实现的各

2017-06-06 11:34:09 1339

原创 常用的JVM参数

常用的JVM参数(jdk7)堆设置-Xms:初始堆大小-Xmx:最大堆大小-XX:NewSize=n:设置年轻代大小-XX:NewRatio=n:设置年轻代和年老代的比值。如:为3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4-XX:SurvivorRatio=n:年轻代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如:3,表示Eden:Surviv

2017-06-06 11:26:40 1041

原创 JVM优化

JVM优化java性能优化,首先要做的一点是判断性能瓶颈在哪? 一般我们会对系统进行压测,以找到性能瓶颈。 这里只谈java系统优化。 一般来讲,默认的jvm可以工作的挺好,但是经过特定优化的jvm才可以发挥最大的性能。 调优希望达到的目标是: 尽量少的GC次数尽量短的GC时间(每次)尽量长的GC间隔时间所以,要达到1应该是设置一个尽量大的堆,但是要达到目标2应该是设置小一点的堆。这

2017-06-05 17:39:24 433

原创 JavaScript笔记(三)

JavaScript笔记(三)函数理解函数Javascript函数的参数与大多数其他语言中的函数的参数不同。Javascript函数不介意传递进来多少个参数,也不介意传递进来的参数是什么数据类型。 之所以会这样,原因是Javascript中的参数在内部是用一个数组来表示的。函数接收到的始终是这个数组,而不关心这个数组包含多少参数。 实际上,在函数体内可以通过arguments对象来访问这个参数数

2016-11-28 14:49:53 423

原创 CSS长度

长度值CSS 的类型表示距离测度。它是一个 后紧随一个长度单位(px,em,px,in,mm,…)。和任何 CSS 尺寸一样,数字和单位之间没有空格。 0之后的长度单位是可选的。 许多CSS属性使用值,比如width、margin、padding、font-size、border-width、text-shadow…相对长度单位em 相对长度单位,这个单位表示元素的font-size的计算值。如

2016-11-24 10:15:30 561

原创 分布式锁的多种实现

目前几乎所有的大型web应用全都是分布式部署的,分布式场景中的数据一致性问题一直是一个比较重要的话题。分布式应用中的CAP理论告诉我们: 任何一个分布式系统都无法同时满足一致性(Consistency)、可用性(Availability)、分区容错性(Partation tolerance)。最多只能同时满足其中两项。所以在设计之初,就需要对三者做出取舍。一般在互联网场景中,都会选择牺牲强一致

2016-11-12 10:09:04 4334 1

空空如也

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

TA关注的人

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