- 博客(86)
- 资源 (2)
- 收藏
- 关注
原创 fluent-operator在kubesphere中的实战详解
最近收到一个小任务:熟悉kubesphere实现一个日志平台。基于这样的机会,将最近所整理的笔记进行汇总。
2023-05-23 18:49:29 1114 1
原创 使用apisix代理静态文件
最近公司考虑用apisix作为公司网关并且部署到k8s上,我这边收到一个小任务:使用apisix代理静态文件通过了解到它构建于 NGINX + ngx_lua 的技术基础之上,所以按理应该和nginx代理静态资源是一样的。因为是通过docker容器部署的,需要考虑将静态资源路径挂载出来。
2023-05-16 11:10:11 2731
原创 java.lang.IllegalStateException: Context has been already given a name报错分析解决
将dubbo的注册中心从zk切换到nacos后,在kubesphere中启动应用时发现如下报错。根据报错进行本地复现并分析出原因。
2023-04-25 11:13:09 1989
原创 docker容器内的应用利用k8s configmap做配置中心
传统的应用服务都有自己的配置文件,各自配置文件存储在服务所在节点。如果配置出现变更,就需要对应节点的配置文件。Kubernetes 利用了 Volume 功能,完整设计了一套配置中心,其核心对象就是ConfigMap,使用过程不用修改任何原有设计,即可无缝对 ConfigMap。
2023-04-23 16:05:50 893
原创 KubeSphere第三方登录流程源码分析
最近开始接触KubeSphere,借助了两个小需求来实战一下kubesphere的源码浅析。1. 第三方登录后跳转到kubesphere指定页面;2. 打通发布平台用户和kubesphere的用户体系。
2023-04-06 15:56:42 1000
原创 Okhttp连接泄漏警告问题分析
搜索代码,将所有没有关闭资源的地方都进行关闭。后续发现再也没有相关警告日志出现了,成功解决问题规范代码,调用请求和获取响应作为整体不进行拆分,然后将响应进行类型转换。
2022-11-21 10:39:00 1350
原创 线程状态场景模拟以及问题定位
在看skywalking-agent源码时发现agent会采集线程的状态,但这些状态是什么场景触发的呢?当线程数超过阈值后,我们怎样去更快地定位问题呢?带上这样的疑问进行下面的分析。
2022-09-16 13:58:42 286
原创 HttpClient遭遇Connection Reset异常分析(浅析部分源码)
前段时间测试反馈页面会偶先错误提示,刷新后就没有了。根据测试反馈的时间点查看kibana日志,发现有异常。下面通过分析客户端和服务端相关源码进行分析根本原因,给出解决方案。
2022-09-08 23:32:58 2017
原创 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 416
原创 Skywalking系列学习之Trace Profiling源码分析
在中有提到,那skywalking怎样利用方法栈快照进行代码级性能剖析的,出于好奇心,一起来debug看看其中的奥妙。
2022-08-08 11:01:10 1911 5
原创 Selenium + Python自动化测试入门
Selenium 是支持web浏览器自动化的一系列工具和库的综合项目,,这是一个编写指令集的接口,可以在许多浏览器中互换运行。
2022-08-05 10:18:13 408
原创 跨域问题的分析
在发布数据埋点工程后,前端访问时发生了跨域错误。经过问题分析排查发现,Kong网关里没有允许OPTIONS请求导致跨域错误。通过这个问题再对CORS原理梳理一下,知其所以然。在某些情况下,仅Access-Control-Allow-Origin 响应头是不够的,对服务器有特殊要求的请求的非简单请求(比如PUT或DELETE方法,或者Content-Type字段的类型是application/json),需要在正式请求前增加一次预检请求同时满足以下两个条件,就是简单请求(否则为非简单请求)2.1 请求方
2022-08-01 17:51:03 266
原创 Skywalking系列学习之告警通知源码分析
前面的文章,我们已经知道了skywalking可以采集链路数据,但如果链路里有异常应该怎样通知呢?本篇文章以响应时间超时为例源码分析一下skywalking的告警流程。
2022-07-24 12:34:36 680
原创 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 891
原创 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 395
原创 resilience4j 重试源码分析以及重试指标采集
为了防止网络抖动问题,需要进行重试处理,重试达到阈值后进行告警通知,做到问题及时响应基于以上方案的对比,选择了使用resilience4j-retry,主要基于以下两点:
2022-06-23 23:40:31 419 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 1083 1
原创 源码学习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 1930
原创 源码学习dubbo3.x的运行期流量调度
前言从dubbo官网可知Dubbo提供了六大核心能力,运行期流量调度就是其中一种。运行期流量调度:内置条件、脚本等路由策略,通过配置不同的路由规则,轻松实现灰度发布,同机房优先等功能。下面我们通过源码调式探索,运行期流量调度是怎样实现的?Dubbo如何触发路由规则通过前面描述可知,运行期流量调度时通过配置路由规则实现的具体如何配置路由规则,参照官网《路由规则》说明2.1 路由规则包括入站流量的规则(VirtualService)和目标地址规则(DestinationRule)2.2 下
2022-01-20 10:51:57 807 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 1184
原创 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 2775
原创 跟着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 930
原创 Synchronized锁优化进阶学习
概述 本篇文章根据《深入理解Java虚拟机(第三版)》的Synchronized理论描述进行测试验证,深入了解其运行机制Synchronized不可中断synchronized关键字经过Javac编译之后,会在同步块的前后分别形成 monitorenter和monitorexit这两个字节码指令1.1 将下方代码编译public class Juc_LockOnThis { public void decrStock(){ //synchronize
2022-01-07 15:07:58 329
原创 理解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 1206
原创 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 1072
原创 线上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 1316 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 891
原创 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 1337
原创 探索@Scheduled定时任务注解的实现机制
背景 在《定时任务迁移到SnailJob的优化历程》文章中有针对基于xml文件配置定时任务迁移到SnailJob优化。但在今天对接另外一个系统,针对@Scheduled注解的定时任务迁移发现之前那种处理方式不可取,那@Scheduled运行机制到底是怎样的?注册定时任务@EnableScheduling作为入口驱动加载定时任务,核心关注ScheduledAnnotationBeanPostProcessorScheduledAnnotationBeanPostPr
2021-12-17 17:15:13 1050
原创 利用canal解析本地binlog
背景前段时间,发现唯一单号重复,由于时间跨度比较大,排除因为并发问题导致。因为唯一单号生成方法是中通通用方案,其他系统没有出问题,方法有Bug的几率较小。故很有可能是逻辑问题导致,想看一下单号的生成轨迹下载binlog文件到本地应用使用的阿里云RDS,它提供一种查询Binlog日志的接口1.1 需要登录的阿里云账号有权限1.2 点击调试,输入实例ID、查询开始时间、查询结束时间1.3 点击返回的DownloadLink进行下载binlog(每个binlog文件都有记录的开始时间以及结束时间)
2021-12-13 09:48:07 2931
原创 Wireshark抓包分析TCP,发现居然只有三次挥手
背景本人一直不喜欢背八股文,喜欢源码调式和测试,相信自己看到的,所以一直苦于怎样去学习网络协议。昨天看了一篇文章《简单的 HTTP 调用,为什么时延这么大?》,里面有用到Wireshark抓包工具分析了耗时原因。趋于好奇心,网上了解一下Wireshark怎样使用,发现一篇好文《(图文并茂,权威最详细)Wireshark抓包分析 TCP三次握手/四次挥手详解》,自己动手安装分析一波搭建环境下载Wireshark:https://www.wireshark.org/#download(版本为3.6.0)
2021-12-09 10:02:02 4773 2
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人