自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 mysql锁表问题

例如一张表有age字段,值为10、26、36、46、56的五行数据,age字段为普通索引,这五行数据存在如下范围的临键锁:范围为[负无穷,100)、范围为[10,26)查看锁住的SQL,检查被锁表结构是否包含索引,由于行锁需要走索引,如果表不包含索引,将会走表锁,也就是说如果某个事务对表执行删除、更新、新增操作将锁住整张表,如果这时有另一个事务要执行删除、更新、新增操作将会被阻塞。通常建议将事务的粒度做的尽量小,避免长事务,这样系统的并发度、处理效率都会高很多,而且锁超时的现象也会少很多。

2024-04-02 22:16:02 983

原创 springboot + mybatis支持多数据库

当在业务服务中需要支持多数据库时,虽然尽量使用标准sql,但还是难免出现多数据库不兼容的情况。例如对于达梦数据库在like时对于匹配字符串中的如果有通配符_或%需要转义改写为\_或\%,这在mysql、oracle、sql server都是没有问题的,但在达梦数据库中需要在之后加ESCAPE '\'才行。这时就需要能够知道当前连接的数据库是那种,如果是达梦数据库需要使用这种模式like #{var1} ESCAPE ‘\’

2024-04-02 21:45:24 305

原创 监听Helm release资源

基于helm做部署管理工具时,可能想要管理用户已有环境,这时需要将已有环境中的release信息上报到业务系统中。当用户在环境中部署新的release时,也需要实时监听并上报回来。下面将讲解如何去监听release资源。

2023-09-07 19:25:27 297

原创 客户端发现pod并与之通信

Kubernetes服务是一种为一组功能相同的pod提供单一不变接入点的资源。K8s会通过网络插件为服务分配IP和端口,并且IP和端口不会发生变化。可以通过访问服务的IP或者服务名连接到提供服务的pod,这样提供服务的pod可以根据需要移动或删除,而不会影响外部客户端访问。

2023-09-04 19:30:54 274

原创 删除命名空间一直处于Terminating

当处理好端口占用问题后,k8s_lb-nginx_lb-nginx容器正常运行,节点重新加入集群,处于Terminating状态资源正常删除。导致资源删除一直Terminating的原因多种多样,需要结合显现大胆猜想,小心求证。如果节点组件问题导致,可以查看https://gitee.com/open-hand/kubeadm-ha/blob/release-1.21/docs/00-%E5%AE%89%E8%A3%85%E9%A1%BB%E7%9F%A5.md给出的组件是否正常运行,是否有端口占用。

2023-08-28 16:15:55 421

原创 副本机制和其他控制器

Kubernetes通过Job资源提供了对可完成任务的支持。Job资源允许你运行一种pod,该pod在内部进程成功结束时,不重启容器,一旦任务完成,pod就被认为处于完成状态。如果节点发生故障,Job管理的pod将按照ReplicaSet的pod方式重新安排在其他节点上,如果该进程本身异常退出,可以将pod配置为重新启动容器。

2023-07-24 19:26:44 183

原创 docker in docker

在做CI流水线时,需要在流水线中使用docker完成应用镜像打包。无论你的CI流水线是在jenkins中运行,还是在gitlab runner中运行,只要你的jenkins或gitlab runner是通过docker容器运行,都面临着docker in docker问题没有办法在一个docker运行的容器中再安装一个docker。但官方提供了docker:dind镜像,提供docker daemon服务。docker:1.12.6镜像则提供了docker客户端。

2023-06-28 23:43:20 806

原创 helm部署Seata服务

通过挂载主机文件的方式有个问题就是必须在每个节点上都需要有这个配置文件,因为如果seata服务的pod调度到没有配置文件的节点将会拿不到文件无法启动。官方提供的chart包不能直接通过环境参数指定注册中心、连接数据库等信息,只能通过挂载文件的方式配置。配置数据库的原因是Seata服务需要一些表来记录分布式事务的信息,以便进行分布式事务控制。将部署节点上/root/work/seata/seata-config/file目录挂载到/root/seata-config。配置注册中心及配置中心的信息。

2023-06-28 23:27:32 273

原创 NFS服务器安装及NFS制备程序安装

NFS是一种分布式文件系统协议,由sun公司开发,旨在允许客户端主机可以像访问本地存储一样通过网络访问服务端文件。

2023-06-13 23:03:14 1716

原创 Kubernetes集群添加新集群节点

参考文档https://gitee.com/open-hand/kubeadm-ha/blob/release-1.21/docs/02/%E6%B7%BB%E5%8A%A0%20worker%20%E8%8A%82%E7%82%B9.md添加工作节点与集群安装时初始化工作节点一样,可以在主节点上执行,也可以在要加入的节点执行,只要执行主机安装ansible,并且可以访问主节点及要加入的新节点即可。

2023-06-13 14:09:07 3285

原创 Kubernetes之pod

Kubernetes并不会直接管理单个容器。而是以容器组的形式管理,一个pod就是一组紧密相关的容器组。通常情况下一个pod中只会有一个容器,但有些时候我们需要一些辅助容器才能完成需要提供的功能,例如docker in docker方案中我们可以在pod中运行一个官方提供的docker容器,此docker容器中包含docker服务端,我们业务容器可以通过docker客户端连接到同pod中的docker容器制作镜像。

2023-06-07 00:38:44 387

原创 Linux安装docker

【代码】Linux安装docker。

2023-05-26 17:56:11 623

原创 K8S通过Ansible安装集群

介绍K8S集群安装

2023-05-10 00:12:34 1543 1

原创 jenkins共享ci阶段

jenkins共享ci流水线

2023-05-06 23:36:32 517

原创 docker登录harbor、K8s拉取镜像报http: server gave HTTP response to HTTPS client

docker登录harbor、K8s拉取镜像报http: server gave HTTP response to HTTPS client

2023-04-28 17:14:24 2845 1

原创 删除命名空间一直处于Terminating并且自己开发的客户端无法连接K8s集群

命名空间无法删除一直Terminating,通常都是集群有些资源出现问题导致的。需要解决集群的异常才能顺利删除。强制删除并不能根本解决问题。

2023-03-08 17:33:17 449

原创 滚动升级回滚

升级回滚实践

2023-03-05 22:11:02 710

原创 Kubernates简介

Kubernetes是什么?解决什么问题?带来哪些收益?

2023-03-02 23:43:14 338

原创 Spring Cloud Stream绑定器架构解析与开发

Spring Cloud Stream 绑定器源码解析及开发

2022-11-25 17:09:18 1144

原创 拉取私有仓库镜像配置

拉取私有仓库镜像配置当我们制作好一个镜像后,我们可以传到公共镜像仓库,供所有人拉取使用,不需要指定拉取镜像的用户、密码。我们也可以将镜像推送到自己搭建的镜像库,比如harbor镜像仓库中,如果我们在镜像仓库中的项目是公开项目,拉取镜像也是不要用户名、密码的。但如果是私有项目,则需要指定用户名、密码才能拉取。下面将介绍两种方式通过用户名、密码拉取私有镜像制作拉取镜像secret不论是何种姿势拉取私有镜像,都需要先创建拉取镜像的secret。创建拉取镜像secret有两种方式,如下根据config.js

2022-05-29 14:25:24 1554

原创 理解Helm安装升级参数wait、wait-for-jobs、atomic、cleanup-on-fail、timeout

理解Helm安装升级参数wait、wait-for-jobs、atomic、cleanup-on-fail、timeoutHelm执行install、upgrade指令时可以指定–wait、–atomic、–timeout参数,并且upgrade指令还可以指定–cleanup-on-fail参数。此篇文章将从helm源码的角度去理解这几个参数的实现及其意义,并给出如何自己管理chart应用的状态wait、wait-for-jobs参数语义Helm应用在执行升级安装时,其实现逻辑是将values参数及

2022-05-06 23:27:24 4313

原创 Helm安装钩子资源chart包报错

Helm安装钩子资源chart包报错问题描述通过helm go客户端执行redis chart包安装时报no objects visited错误问题背景此处安装报错的redis chart是拿官方的chart包改造的,改造点是将资源添加钩子注释,使redis chart下的所有资源都变成了钩子资源问题分析通过抛错信息结合断点分析抛错位置如下,在perform方法开始就判断infos是否没有值,如果没有值直接返回ErrNoObjectsVisited错误信息,其内容便是no objects vi

2022-03-16 09:36:24 969 1

原创 Java并发机制的底层实现

Java并发机制的底层实现Java代码在编译成字节码后,需要类加载器加载到JVM中,JVM执行字节码,将字节码转化为汇编指令在CPU上执行,Java中所使用的并发机制依赖于JVM的实现和CPU指令volatile的应用在并发编程中synchronized和volatile有着重要作用,volatile是轻量级的synchronized,在多线程编程中它控制共享变量的可见性。即被volatile修饰的共享变量,在一个线程中修改后,在另一个线程中能立即读到修改后的值。恰当的使用volatile变量修饰符,

2022-02-18 14:44:56 592

原创 并发编程挑战

并发编程挑战并发编程目的是让程序运行更快,但并不是启动更多线程就能让程序最大限度的并发执行。并发编程还面临着各种问题的挑战,比如上下文切换、死锁问题,以及受限于硬件和软件的资源限制问题上下文切换在单核处理器上执行多线程代码时,CPU会给每个线程分配CPU时间片来执行这些线程。时间片非常短暂,一般几十毫秒,所以CPU需要不停的切换线程执行,让人感觉这些线程是同时执行的CPU通过时间片分配算法来循环执行任务,当前任务执行完一个时间片后会切换到下一个任务。在切换到下一个任务前会保存当前任务的状态,以便下次

2021-12-22 15:10:37 727

原创 Kafka producer客户端源码解析

Kafka producer客户端源码解析为分析Kafka producer源码,我们先看一下producer发送消息的示例,通过示例跟踪源码,研究producer在整个发送过程中做了那些操作,以及架构设计发送消息示例构造属性对象属性对象设置必要的Kafka producer端配置信息//创建属性对象Properties properties = new Properties();//设置broker的地址,可以支持多个,这样当某些broker挂掉还可以使用其它broker。必须指定prop

2021-12-22 01:17:38 1136

原创 本地连接远程K8s集群

本地连接远程K8s集群本地连接远程K8s集群首先确保本地已经安装好kubectl工具。具体步骤如下登录到需要连接的K8s集群所在主机,查找主节点kubectl get nodes登录到主节点所在主机,在~/.kube目录下找到名称为config的文件负责其内容在~/.kube目录下创建config文件,并将从远程主机上拷贝的config文件内容复制到这个文件config中的server配置可能是https://127.0.0.1:8443,我们需要把127.0.0.1换成具体

2021-12-21 16:00:00 2835

原创 升级Spring Cloud Stream动态发送消息问题解析

升级Spring Cloud Stream动态发送消息问题解析Spring Cloud Stream从2.0.1升级到3.1.3后,事件服务动态刷新发送消息、消费消息都出现了异常。由于动态发送、消费消息功能,是在源码的基础上做了一些封装和修改,新版本Spring Cloud Stream源码发送了变更导致之前的方式失效或出现异常Unable to register MBean [bean ‘halt-target-test-20’]异常复现步骤此异常复现步骤如下找到一个依赖事件服务客户端,并且

2021-12-19 20:41:10 1842

原创 图基本算法

图算法图的表示图G = (V, E)可以有两种表示方法邻接链表组合邻接矩阵两种表示法都可以表示无向图和有向图。如果表示稀疏图(边的条数|E|远远小于|V|2)通常选择邻接链表,如果是稠密图(|E|接近|V|2的图)通常使用邻接矩阵表示法。如果需要快速判断任意两个节点是否有边相连,也通常选择邻接矩阵表示对于图G =(V,E)来说,邻接链表表示由一个包含|V|条链表的数组Adj所构成,每个节点有一条链表,对于每个节点u ∈ V,邻接链表Adj[u]包含所有与节点u之间有边相连的节点v,即

2021-12-16 14:30:46 715

原创 bean的加载

bean的加载通过前面标签解析,创建BeanFactory之后就可以调用getBean方法获取beanMyTestBean bean = (MyTestBean) beanFactory.getBean("myTestBean");我们大概过一下getBean方法源码// AbstractBeanFactory.java@Overridepublic Object getBean(String name) throws BeansException { return doGetBean

2021-11-20 17:39:55 1244

原创 调优案例分析与实战

调优案例分析与实战案例分析高性能硬件上的程序部署策略在一个15万PV/天左右的在线文档类型网站,硬件条件为4个CPU、16GB物理内存,操作系统为64位CentOS 5.4,Resin作为Web服务器。整个服务器资源都可供给这个访问量不算太大的网站使用。管理员为尽量利用硬件资源选用64位JDK 1.5,并通过-Xmx和-Xms参数将Java堆固定在12GB。使用一段时间后,发现使用效果不理想,网站经常不定期出现长时间失去响应通过监控服务器运行状态发现网站失去响应是由GC停顿导致,虚拟机运行在Serv

2021-11-20 13:35:42 694

原创 虚拟机性能监控与故障处理工具

虚拟机性能监控与故障处理工具概述给一个系统定位问题时,知识、经验是关键基础,数据是依据,工具是运用知识处理数据的手段。这里的数据包括:运行日志、异常堆栈、GC日志、线程快照、堆转储快照等。使用适当的虚拟机监控和分析工具可以加快分析数据、定位解决问题的速度JDK的命令行工具在JDK的bin目录中提供了很多命令行工具,这些命令行工具为用户处理应用程序性能问题、定位故障提供了帮助。下面将介绍其中关于监视虚拟机和故障处理的工具。这些JDK工具都非常小,基本都在27KB左右,大多数都是对jdk/lib/too

2021-11-07 18:39:11 1108

原创 SkyWalking源码编译及构建本地开发环境

SkyWalking源码编译及构建本地开发环境准备SkyWalking环境如何构建SkyWalking源码项目 官方文档有详尽描述获取SkyWalking源码进过验证采用下载源码构建项目比较靠谱,不容易出问题。我这里下载的是SkyWaking8.3.0版本安装JDK8+、Maven 3.6+网上资料很多打包项目解压下载的源码包,在源码包根目录执行如下命令,完成打包./mvnw clean package -Dmaven.test.skip打包后放在那个目录下打包后放在根目录的dist

2021-10-18 18:18:07 1880

原创 ArraList源码分析

ArraList源码分析构造函数ArrayList提供了多个重载构造函数,既可以指定初始容量也可以指定初始集合,或什么都不指定无参构造函数通过ArrayList()构造函数,可以构造一个空的ArrayList,使用DEFAULTCAPACITY_EMPTY_ELEMENTDATA空对象数组初始化属性elementData属性,此属性即用来存储我们add添加进来的元素private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {

2021-10-18 17:40:15 67

原创 B树及应用

B树B树是为磁盘或其他直接存取辅助存储设备而设计的一种平衡搜索树。B树类似于红黑树,但B树在降低I/O操作方面更好。许多数据库系统使用B树或B树的变种来存储信息B树与红黑树的不同在于B树的节点可以有多个孩子,一个B树的子节点可以相当大,通常依赖于所使用的磁盘单元特性。一颗含有n个节点的B树其高度为O(lgn)。一颗B树严格高度可能比一颗红黑树的高度小很多,因为其子节点可以有多个。我们可以使用B树在时间O(lgn)内完成一些动态集合操作如图,B树的内部节点x包含x.n个关键字,那么节点x就有x.n+1

2021-09-13 09:33:15 1642

原创 管理Kafka集群

管理Kafka集群集群管理启动broker启动Kafka服务器需要首先启动ZooKeeper服务器,Kafka使用ZooKeeper作为集群的管理服务。在生产环境中启动Kafka建议使用-daemon参数启动bin/kafka-server-start.sh -damon <path>/server.properties不要使用如下方式启动服务bin/kafka-server-start.sh <path>/server.properties &虽然通过添加

2021-09-11 12:26:16 864

原创 Kafka分享总览

Kafka分享总览背景介绍架构演变垂直应用架构以经典的MVC垂直架构为例mvc架构主要分为三层视图层,交互界面控制层,前端web请求分发应用模型层,主要业务逻辑对于应用规模较小时,还能支撑业务发展。随着系统逐渐增大,会出现很多弊端开发维护成本变高,部署效率逐渐降低团队协作效率差,功能重复开发,代码重复率高系统可靠性差。访问量升高,对网络流量、负载、数据库连接压力变大。某个节点故障,导致分摊到其他节点的流量陡增,引起"雪崩效应"维护定制困难新功

2021-09-07 14:27:39 260

原创 nacos配置文件监听

nacos配置文件监听Java方式配置文件监听添加依赖<dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> <version>1.4.1</version></dependency>添加配置监听代码,按照如下示例添加配置监听代码。用户名、密码为自动生成的当前

2021-09-06 16:51:09 2261

原创 红黑树及JDK中应用

红黑树我们看到二叉搜索树在动态集合操作时,其时间复杂度均为O(h),在搜索树高度较低时,有不错的性能,但如果树的高度较高时,这些集合操作并不比在链表上快。红黑树是平衡搜索树中的一种,可以保证在最坏情况下动态集合操作的时间复杂度为O(lgn)红黑树的性质红黑树是一颗二叉搜锁树,在每个节点上增加一个存储位来表示节点的颜色,可以是RED或BLACK。通过对任何一条从根到叶子的简单路径上各个节点的颜色进行约束,确保没有一条路径会比其它路径长出2倍,近似于平衡树中每个节点包含5个属性:color、key、le

2021-08-07 14:27:09 376 1

原创 取物资问题

取物资在一个二维地图上有很多军营,每个军营的坐标为(x,y)(x,y),现在你要在xx轴上设置一个补给站,补给站不一定要在整点上,现在想让军营到补给站的距离的最大值最小。请问最小的最大距离是多少?兵营的数量小于等于10^4坐标(x,y)保证0 <= |x|, |y| <= 10000分析由题知补给站到军营的距离符合二次函数变化规律。在给定的军营坐标集合中,补给站到军营的最大距离最小的点一定在给定的军营的最小横坐标到最大横坐标之间,并且越往中间最大距离的值越小。符合三分查查找算法

2021-07-18 21:09:15 227

原创 A default binder has been requested

A default binder has been requested在将Spring Cloud Stream升级到3.1.3之后。某些项目启动会报***A default binder has been requested, but there is more than one binder available for ‘org.springframework.cloud.stream.messaging.DirectWithAttributesChannel’ : rocketmq,mqtt,kaf

2021-07-06 17:20:41 3631 3

空空如也

空空如也

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

TA关注的人

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