自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(86)
  • 资源 (2)
  • 收藏
  • 关注

原创 shardingsphere的IN查询导致数据库CPU打满

通过5个并发用户进行线上压测(效果见下图),优化后对数据库CPU的损耗减少。

2024-02-28 16:04:42 1397 2

原创 mybatis多数据源的SQL兼容

最近公司要求支持国产数据库达梦,但达梦与PostgreSQL的语法有一些差异,需要做一些兼容操作。

2023-06-08 10:48:38 1770

原创 fluent-operator在kubesphere中的实战详解

最近收到一个小任务:熟悉kubesphere实现一个日志平台。基于这样的机会,将最近所整理的笔记进行汇总。

2023-05-23 18:49:29 1072 1

原创 使用apisix代理静态文件

最近公司考虑用apisix作为公司网关并且部署到k8s上,我这边收到一个小任务:使用apisix代理静态文件通过了解到它构建于 NGINX + ngx_lua 的技术基础之上,所以按理应该和nginx代理静态资源是一样的。因为是通过docker容器部署的,需要考虑将静态资源路径挂载出来。

2023-05-16 11:10:11 2564

原创 项目中常见的几种策略模式实现方式

本篇文章主要介绍本人在自己项目中和开源项目中策略模式的实现方式。

2023-05-06 16:43:57 1000 1

原创 java.lang.IllegalStateException: Context has been already given a name报错分析解决

将dubbo的注册中心从zk切换到nacos后,在kubesphere中启动应用时发现如下报错。根据报错进行本地复现并分析出原因。

2023-04-25 11:13:09 1889

原创 docker容器内的应用利用k8s configmap做配置中心

传统的应用服务都有自己的配置文件,各自配置文件存储在服务所在节点。如果配置出现变更,就需要对应节点的配置文件。Kubernetes 利用了 Volume 功能,完整设计了一套配置中心,其核心对象就是ConfigMap,使用过程不用修改任何原有设计,即可无缝对 ConfigMap。

2023-04-23 16:05:50 867

原创 KubeSphere第三方登录流程源码分析

最近开始接触KubeSphere,借助了两个小需求来实战一下kubesphere的源码浅析。1. 第三方登录后跳转到kubesphere指定页面;2. 打通发布平台用户和kubesphere的用户体系。

2023-04-06 15:56:42 970

原创 Okhttp连接泄漏警告问题分析

搜索代码,将所有没有关闭资源的地方都进行关闭。后续发现再也没有相关警告日志出现了,成功解决问题规范代码,调用请求和获取响应作为整体不进行拆分,然后将响应进行类型转换。

2022-11-21 10:39:00 1303

原创 线程状态场景模拟以及问题定位

在看skywalking-agent源码时发现agent会采集线程的状态,但这些状态是什么场景触发的呢?当线程数超过阈值后,我们怎样去更快地定位问题呢?带上这样的疑问进行下面的分析。

2022-09-16 13:58:42 276

原创 HttpClient遭遇Connection Reset异常分析(浅析部分源码)

前段时间测试反馈页面会偶先错误提示,刷新后就没有了。根据测试反馈的时间点查看kibana日志,发现有异常。下面通过分析客户端和服务端相关源码进行分析根本原因,给出解决方案。

2022-09-08 23:32:58 1912

原创 JVM资料阅读笔记总结-1

java先编译成二进制形式的java字节码放在Class文件中通过插件查看class文件基本格式2.1 Class类文件的结构(参考《Java虚拟机规范》)(1)魔数与Class文件的版本(2)常量池(3)访问标志(4)类索引、父类索引与接口索引集合 // 继承关系(5)字段表集合(6)方法表集合(7)属性表集合当运行过程中需要这个类时进行类加载3.1 配置-XX:+TraceClassLoading JVM参数监控类的加载。...

2022-08-31 09:48:33 407

原创 Skywalking系列学习之Trace Profiling源码分析

在中有提到,那skywalking怎样利用方法栈快照进行代码级性能剖析的,出于好奇心,一起来debug看看其中的奥妙。

2022-08-08 11:01:10 1867 5

原创 Selenium + Python自动化测试入门

Selenium 是支持web浏览器自动化的一系列工具和库的综合项目,,这是一个编写指令集的接口,可以在许多浏览器中互换运行。

2022-08-05 10:18:13 391

原创 跨域问题的分析

在发布数据埋点工程后,前端访问时发生了跨域错误。经过问题分析排查发现,Kong网关里没有允许OPTIONS请求导致跨域错误。通过这个问题再对CORS原理梳理一下,知其所以然。在某些情况下,仅Access-Control-Allow-Origin 响应头是不够的,对服务器有特殊要求的请求的非简单请求(比如PUT或DELETE方法,或者Content-Type字段的类型是application/json),需要在正式请求前增加一次预检请求同时满足以下两个条件,就是简单请求(否则为非简单请求)2.1 请求方

2022-08-01 17:51:03 248

原创 Skywalking系列学习之告警通知源码分析

前面的文章,我们已经知道了skywalking可以采集链路数据,但如果链路里有异常应该怎样通知呢?本篇文章以响应时间超时为例源码分析一下skywalking的告警流程。

2022-07-24 12:34:36 661

原创 Skywalking系列学习之agent收集trace数据

在上篇文章《SkyWalking系列学习之环境搭建以及分析如何类增强》中已经知道业务系统通过-javaagent引入代理,通过ByteBuddy对指定的类做增强处理。下面介绍Skywalking-Java怎样收集trace数据在执行业务方法前,1.1 创建TracingContext,并初始化segment属性1.2 创建EntrySpan,放入activeSpanStack有序队列中。业务方法内执行http远程请求前,创建ExitSpan,放入activeSpanStack有序队列中。执行完后从

2022-07-11 17:06:13 862

原创 SkyWalking系列学习之环境搭建以及分析如何类增强

据了解公司使用SkyWalking做链路日志指标记录,并且由devlops团队配置,对业务开发无感。但处于好奇心,那必须拉下源码debug调试一番。从github拉取skyWalking服务端的源码,切到最新分支v9.1.0,分别启动OAPServerBootstrap(链路指标上报服务)和ApplicationStartUp(UI)1.1 如果出现编译错误则设置 gRPC 的自动生成的代码目录,为源码目录1.2 访问localhost:8080,进入以下页面表示服务端已经启动成功从github拉取s

2022-07-10 11:37:32 374

原创 resilience4j 重试源码分析以及重试指标采集

为了防止网络抖动问题,需要进行重试处理,重试达到阈值后进行告警通知,做到问题及时响应基于以上方案的对比,选择了使用resilience4j-retry,主要基于以下两点:

2022-06-23 23:40:31 398 1

原创 2022年Sharding-JDBC源码学习(一):梳理流程以及分析如何扩展服务

前言怎样在Java的JDBC层提供额外的服务,源码是怎样实现的?本篇文章首先梳理整个注册以及执行流程,发现Sharding-JDBC按照如下步骤提供服务2.1 Sharding-JDBC根据配置生成数据源ShardingSphereDataSource2.2 根据数据源获取连接ShardingSphereConnection2.3 通过连接将sql封装成ShardingSpherePreparedStatement2.4 委托ShardingSpherePreparedStatement执行u

2022-03-11 00:58:31 1036 1

原创 Dubbo客户端实现整体逻辑梳理

dubbo客户端实现原理,dubbo如何使用反射、动态代理以及利用CompletableFuture异步编程

2022-02-25 23:00:57 634

原创 2022年MYSQL知识积累(一):索引失效案例分析以及MYSQL事务

模糊查询索引失效分析、MVCC实现原理

2022-02-10 22:32:26 687

原创 Dubbo消费端线程池模型源码分析

Dubbo消费端线程池模型源码分析

2022-02-08 22:56:35 1079

原创 源码学习Dubbo的线程模型

Dubbo线程模型介绍如果事件处理的逻辑能迅速完成,并且不会发起新的IO请求,则直接在IO线程上处理更快但如果事件处理逻辑较慢,或者需要发起新的 IO 请求,则必须派发到线程池暴露服务监听到Spring启动事件ContextRefreshedEvent后,暴露服务遍历所有服务进行暴露2.1 暴露服务会同时暴露本地和远程服务(ServiceConfig#exportUrl)(1)本地服务会将url的host改为127.0.0.1,port改为0,protocol改为injvm(2)

2022-02-03 09:37:25 1916

原创 通过Dubbo3.x标签路由进行流量隔离

dubbo标签路由进行流量隔离

2022-01-28 16:50:48 2897

原创 2022年GO入门(一):开始使用Go

Go入门学习笔记,跟着官网进行一步一步深入学习

2022-01-25 13:28:53 603

原创 源码学习dubbo3.x的运行期流量调度

前言从dubbo官网可知Dubbo提供了六大核心能力,运行期流量调度就是其中一种。运行期流量调度:内置条件、脚本等路由策略,通过配置不同的路由规则,轻松实现灰度发布,同机房优先等功能。下面我们通过源码调式探索,运行期流量调度是怎样实现的?Dubbo如何触发路由规则通过前面描述可知,运行期流量调度时通过配置路由规则实现的具体如何配置路由规则,参照官网《路由规则》说明2.1 路由规则包括入站流量的规则(VirtualService)和目标地址规则(DestinationRule)2.2 下

2022-01-20 10:51:57 796 2

原创 跟着dubbo3.x学习HTTP/2用JAVA如何实现

HTTP/2介绍  下面关于HTTP/2的理论参考摘抄于《HTTP/2 协议抓包实战》HTTP/1.1的问题没有充分利用TCP连接资源1.1 TCP协议是一个全双工协议,但在HTTP/1.1为一问一答的半双工形式(1)HTTP/1.1使用TCP协议中的Keep Alive属性复用现有TCP连接(一问一答)(2)HTTP/1.0每次请求都断开TCP连接1.2 如果页面需要多个资源,而浏览器限制同域名下的请求并发度,所以通过多线程提高并发不可取 头部与公参数据所占用的

2022-01-18 13:36:41 1174

原创 RocketMQ事务消息的源码摸索

RocketMQ事务消息

2022-01-15 18:26:39 772

原创 dubbo3.x消费端源码浅析以及Triple协议的实现

前言本篇文章以dubbo最新版本dubbo-3.0.5进行分析Dubbo整体介绍运行demo工程,观察是否运行正常1.1 本地启动zookeeper(充当注册中心、配置中心、元数据中心)1.2 启动服务端ProviderApplication,暴露DemoService服务(@DubboService)1.3 启动消费端ConsumerApplication,调用DemoService服务(@DubboReference)下面展示Dubbo的部署架构2.1 注册中心:服务注册和服务发

2022-01-10 21:25:36 2752

原创 跟着Quartz源码分析调度原理

基本概念Quartz任务调度的核心元素:Scheduler(任务调度器)、Trigger(触发器)、Job(任务)1.1 Trigger:定义调度时间的元素,即按照什么时间规则去执行任务1.2 Job:标识被调度的任务Quartz内部提供的调度类是QuartzScheduler2.1 QuartzScheduler委托QuartzSchedulerThread去实时调度2.2 调度完需要去执行job时,交给ThreadPool去执行JobQuartzScheduler分析QuartzSc

2022-01-08 21:00:19 917

原创 Synchronized锁优化进阶学习

概述   本篇文章根据《深入理解Java虚拟机(第三版)》的Synchronized理论描述进行测试验证,深入了解其运行机制Synchronized不可中断synchronized关键字经过Javac编译之后,会在同步块的前后分别形成 monitorenter和monitorexit这两个字节码指令1.1 将下方代码编译public class Juc_LockOnThis { public void decrStock(){ //synchronize

2022-01-07 15:07:58 318

原创 理解InnoDB是如何存储数据

idb文件查看mysql查看数据库存储位置show global variables like '%datadir%';idb文件一般存放在mysql/data/databasename下InnoDB的内部结构页的文件布局(如下图)1.1 每个空间被分成页面,通常每个页面 16 KiB1.2 每个页面都有一个 38 字节的FIL头和 8 字节的FIL 尾(FIL是“文件”的缩写形式)FIL头部和尾部的结构布局2.1 FIL头部读取的代码对应于FilHeader#fromSlic

2022-01-04 15:06:33 1191

原创 GC参数分析以及模拟元空间内存不足分析GC日志

JVM参数分析下面是线上配置的web类型的JVM模板 -Denv=pro -Dspring.profiles.active=pro -Duser.timezone=GMT+08 -Dapp.id=ZTO_INTL_EXPRESS_EXP_ADMIN_WEB -Ddubbo.protocol.telnet=-ls // xms初始化堆和xmx最大堆大小设为2048M -Xmn年轻代大小为1024M -Xmx2048M -Xms2048M -Xmn1024M // Metaspace 最大值

2021-12-31 11:23:52 1049

原创 线上redis分布式锁使用不当导致单号重复问题分析

背景   前天,同事反馈说之前redis分布式锁有问题导致单号重复了,后面换成redission后就一切正常。基于这样的现象,对此进行分析问题驱动下面的代码经分析,发现了三个问题1.1 过期处理1.2 不可重入1.3 应用宕机处理@Aspect@Component("redisLockAspect")public class RedisLockAspectBack { //获取P4jSyn注解 P4jSyn lockInfo = getLockInf

2021-12-30 09:23:35 1288 2

原创 RocketMQ消费端拉取消息流程源码分析

客户端发送拉取消息请求消费端向broker发送请求:RemotingCommand1.1 请求code在RequestCode中定义,11代表拉取消息(PULL_MESSAGE)1.2 在broker解码后发现,customHeader属性为空,点进去后发现被transient修饰,不会被序列化1.3 请求ID:opaque --> 响应与请求相同(在源码调试时很有用)Broker处理拉取消息请求入口在NettyRemotingServer#start方法,标准的Netty服务端

2021-12-24 14:51:40 875

原创 jedis泄露导致系统不可用排查

Redisredis在配置文件redis.conf中通过logfile指定日志文件位置,默认为空,输出在控制台1.1 查看运行中redis的安装位置: 获取当前redis的最大客户端连接获取redis当前客户连接数Jedis(2.9.3)参考资料Jedis常见异常汇总异常描述异常 JedisConnectionException: Could not get a resource from the pool redis.clients.jedis.exceptions.Jed

2021-12-23 16:24:42 1314

原创 探索@Scheduled定时任务注解的实现机制

背景   在《定时任务迁移到SnailJob的优化历程》文章中有针对基于xml文件配置定时任务迁移到SnailJob优化。但在今天对接另外一个系统,针对@Scheduled注解的定时任务迁移发现之前那种处理方式不可取,那@Scheduled运行机制到底是怎样的?注册定时任务@EnableScheduling作为入口驱动加载定时任务,核心关注ScheduledAnnotationBeanPostProcessorScheduledAnnotationBeanPostPr

2021-12-17 17:15:13 1033

原创 利用canal解析本地binlog

背景前段时间,发现唯一单号重复,由于时间跨度比较大,排除因为并发问题导致。因为唯一单号生成方法是中通通用方案,其他系统没有出问题,方法有Bug的几率较小。故很有可能是逻辑问题导致,想看一下单号的生成轨迹下载binlog文件到本地应用使用的阿里云RDS,它提供一种查询Binlog日志的接口1.1 需要登录的阿里云账号有权限1.2 点击调试,输入实例ID、查询开始时间、查询结束时间1.3 点击返回的DownloadLink进行下载binlog(每个binlog文件都有记录的开始时间以及结束时间)

2021-12-13 09:48:07 2894

原创 Wireshark抓包分析TCP,发现居然只有三次挥手

背景本人一直不喜欢背八股文,喜欢源码调式和测试,相信自己看到的,所以一直苦于怎样去学习网络协议。昨天看了一篇文章《简单的 HTTP 调用,为什么时延这么大?》,里面有用到Wireshark抓包工具分析了耗时原因。趋于好奇心,网上了解一下Wireshark怎样使用,发现一篇好文《(图文并茂,权威最详细)Wireshark抓包分析 TCP三次握手/四次挥手详解》,自己动手安装分析一波搭建环境下载Wireshark:https://www.wireshark.org/#download(版本为3.6.0)

2021-12-09 10:02:02 4677 2

nio+Future.rar

nio+Future.rar

2021-07-05

nioStudy.rar

nioStudy.rar

2021-07-04

空空如也

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

TA关注的人

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