Innodb间隙锁实战

2021-08-23
阅读 8 分钟
1.7k
锁概念InnoDB存储引擎包含了三种行锁的算法,分别如下所示:Record Lock:行锁,针对的是单行记录;Gap Lock:间隙锁,锁定的是一个范围,但是不包含记录本身;Next-Key Lock:其实就是行锁+间隙锁,包含了记录本身和范围;为什么需要间隙锁数据库一般都有四种隔离级别,其中最常用的就是:已提交读(Read committed)和可...

一次被木马攻击的记录

2021-07-29
阅读 4 分钟
2.2k
我一看发现这不就是一个木马后门文件吗,只需要通过参数ejiaogl传入一个经过base64编码的Class文件,这样就可以解码然后被类加载器加载,而我们知道类被加载的时候是可以执行static代码块的,而这个代码块可以任由攻击者来指定要执行的代码,是非常危险的,为了更加形象我特意做了一个模拟攻击。

Redis实现分布式锁十连问

2021-07-22
阅读 4 分钟
2.5k
分布式锁就是在多个进程之间达到互斥的目的,常见的方案包括:基于DB的唯一索引、Zookeeper的临时有序节点、Redis的SETNX来实现;Redis因为其高性能被广泛使用,本文通过一问一答的方式来了解Redis如何去实现分布式锁的。

字节码增强概述

2021-06-23
阅读 5 分钟
4k
字节码我们都知道是java文件经过编译之后的class文件,每一个字节码文件都要由10部分按照固定的顺序组成;增强其实就是对字节码文件进行改造生成一个新的文件,已达到我们的目的,比如动态代理,AOP等;当然增强完需要能被使用,所以涉及到到加载的问题;在介绍之前我们先来看看都有哪些字节码增强技术。

ASM在FastJson中的应用

2021-06-17
阅读 12 分钟
6.4k
上文ASM入门篇中除了对ASM的使用做了介绍,同时也提到ASM被使用的一些场景,其中有一项就是ASM被用来代替Java反射;FastJson作为序列化工具,就使用了ASM来代替反射的使用,提高整体的性能。

ASM入门篇

2021-06-11
阅读 11 分钟
10.8k
ASM是一个通用的Java字节码操作和分析框架,它可以用来修改现有的类或直接以二进制形式动态生成类。ASM提供了一些常见的字节码转换和分析算法,从中可以构建定制的复杂转换和代码分析工具。ASM提供了与其他Java字节码框架类似的功能,但侧重于性能。因为它的设计和实现都尽可能小和快,所以它非常适合在动态系统中使用(...

对高可用系统的一点理解

2021-06-01
阅读 3 分钟
1.5k
简单来讲就是我们系统如何提高对外的服务时间,想要系统达到100%可用基本是不太可能的,也内有一个专门的衡量标准SLA(全称:Service Level Agreement),也就是有几个9的高可用性:

超时与重试浅析

2021-05-24
阅读 10 分钟
7.1k
超时可以说是除了空指针我们最熟悉的异常了,从系统的接入层,到服务层,再到数据库层等等都能看到超时的身影;超时很多情况下同时伴随着重试,因为某些情况下比如网络抖动问题等,重试是可以成功的;当然重试往往也会指定重试次数上限,因为如果程序确实存在问题,重试多少次都无济于事,那其实也是对资源的浪费。

ShardingSphere-JDBC分片改写引擎

2021-05-18
阅读 19 分钟
3.6k
上文ShardingSphere-JDBC分片路由引擎中介绍了分片流程中的路由引擎,最终获取了路由结果;本文要介绍的改写引擎需要使用路由结果来对SQL进行改写,改写成可以被正确的分库分表能够执行的SQL;这里面涉及对各种SQL改写的情况众多,接下来本文会进行一一分析。

一次GSON时间问题的排查

2021-05-15
阅读 4 分钟
6.2k
因为此系统数据量比较大,所有会将半年前的数据归档到Hbase中,归档的时候会将数据库中的数据序列化为json格式,然后保存到Hbase中;如果是近期半年的数据会直接查询数据库,如果是很早的数据才会查询Hbase,所以出现的概率比较低;

ShardingSphere-JDBC分片路由引擎

2021-04-28
阅读 15 分钟
2.6k
上文ShardingSphere-JDBC分片解析引擎中介绍了分片流程中的解析引擎,重点介绍了解析引擎的核心组件ANTLR;本文继续介绍分片流程中的路由引擎,路由引擎可以说是整个分片流程的核心模块,用户自定义的分片算法都在路由引擎中执行;

ShardingSphere-JDBC分片解析引擎

2021-04-23
阅读 11 分钟
2.9k
上文ShardingSphere-JDBC入门实战中对ShardingSphere-JDBC如何使用做了简单介绍,接下来打算从源码层面对数据分片做更加详细的介绍,整个数据分片会经过一个复杂的流程包括:解析、路由、改写、执行、归并这几个子流程,每个子流程都有对应的引擎来处理,本文重点分析子流程中的解析引擎。

ShardingSphere-JDBC入门实战

2021-04-20
阅读 15 分钟
6.8k
Apache ShardingSphere 是一套开源的分布式数据库解决方案组成的生态圈,它由 JDBC、Proxy 和 Sidecar(规划中)这 3 款既能够独立部署,又支持混合部署配合使用的产品组成;接下来的几篇文章将重点分析ShardingSphere-JDBC,从数据分片,分布式主键,分布式事务,读写分离,弹性伸缩等几个方面来介绍。

Jackson-databind引发的漏洞问题分析

2021-03-25
阅读 6 分钟
7.5k
最近公司内部提供了一份应用高危漏洞的清单,其中提到了fastjson和jackson,因为之前对fastjson因为多态问题引发的反序列化问题有过了解,所以打算也做一个简单的分析。

分布式事务浅析

2021-03-16
阅读 16 分钟
2.6k
分布式事务拆开来其实就是分布式、事务两个概念,分布式简单讲就是不同进程间的系统进行通信;事务狭义上我们经常把它看作是数据库的事务,事务具有ACID特性即:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability),通俗来说就是同一个事务中对于数据库的更新操作来说要么都成功,...

负载均衡浅析

2021-01-07
阅读 5 分钟
1.7k
负载均衡这个概念在我们工作中经常被提及到,因为纵观我们系统的整个链路层,每层都会用到负载均衡,从接入层,服务层,到最后的数据层,当然还有MQ,分布式缓存等等都会存在一些负载均衡的思路在里面;给负载均衡做一个简短的定义:就是将请求分摊到多个操作单元上进行执行;其实就是一种分而治之的思想,面对高并发的...

如何自定义协议

2020-12-28
阅读 3 分钟
4.7k
何为自定义协议,其实是相对标准协议来说的,这里主要针对的是应用层协议;常见的标准的应用层协议如http、ftp、smtp等,如果我们在网络通信的过程中不去使用这些标准协议,那就需要自定义协议,比如我们常用的RPC框架(dubbo,thrift),分布式缓存(redis,memcached)等都是自定义协议;本文就来讲讲如何去自定义私有协议...

对序列化中反射的一点思考

2020-12-21
阅读 4 分钟
3.7k
序列化大家都不陌生,说白了就是把当前类对象的状态保存为二进制,然后被用来持久化或者网络传输;常用的RPC框架在数据传输前都会进行序列化操作,主流的RPC框架包含了多种序列化方式比如protobuf,fastjson,kryo,hessian,java内置序列化等等,大致可以分为二进制和字符串(json字符串)。

如何动态改变日志级别

2020-12-17
阅读 5 分钟
7.9k
关于日志级别,大部分项目可能都设置为info级别,当然也可能有一些追求性能或者说包含很多敏感信息的项目直接将级别设置为warn或者error;这时候如果项目中出现一些未知异常,需要用到很详细的日志信息,此时如果项目中没有动态改变日志级别的机制,排查问题将很棘手。

记一次ThreadLocal引发的内存泄露

2020-12-16
阅读 3 分钟
1.7k
​首先解释下内存溢出和内存泄露的概念。内存溢出一般指的是out of memory,也就是我们经常说的OOM,常发生在堆,方法区和方法栈。内存泄露指的是一段程序在申请内存空间后,无法释放已经申请的内存空间,导致该内存地址不可达,后续程序里这块内存空间永远被占用。就好像商场的物品柜设计了10个抽屉,每个人使用后都会归...

RPC设计概要

2020-12-15
阅读 3 分钟
1.8k
RPC全程远程方法调用,已经在各大小公司被广泛使用,种类也是很多比如:Dubbo,Spring cloud那一套,GRPC,Thrift,可能还有很多公司自研的等等;每个公司都可能根据自己的业务需求,场景选择自己合适的RPC框架;但大体的考察维度无非就这么几个:性能,可扩展性,跨平台,功能性,可监控,使用性;所以我们如果要设计一...

线上故障如何排查

2020-12-14
阅读 3 分钟
3k
说起线上故障,程序员应该都经历过,从故障处理恢复过程中我们能快速提高。踩坑多了,慢慢也就成了大牛。这道题也是大厂的面试官们特别喜欢问的问题之一,从候选人对这道题的回答过程中,面试官至少能获取到两个方面的反馈。第一是你平时负责的项目是不是核心项目,如果你说你负责的是后管系统,出了问题重启就OK了,那...

如何做一个防重设计

2020-12-09
阅读 2 分钟
4k
在业务设计中防重设计是一个关键点,以接口设计为例,防重就是防止接口被多次调用而产生脏数据,比如支付订单出现重复支付,所以说防重至关重要,在如何防重之前我们首先看一下是如何出现重复请求的。

灰度发布浅析

2020-12-08
阅读 5 分钟
3k
灰度发布就是已一种平滑过渡的方式来发布,通过切换线上新旧版本之间的路由权重,逐步从旧版本切换到新版本;比如要上线新功能,首先只是更新少量的服务节点,通过路由权重,让少部分用户体验新版本,如果没有什么问题,再更新所有服务节点;这样可以在出现问题把影响面降到最低,保证了系统的稳定性。

限流浅析

2020-12-07
阅读 7 分钟
2.6k
我们每个系统在做压测的时候,都有一个处理峰值,当接近峰值继续接受请求的时候,会导致整个系统响应缓慢;为了保护系统,需要拒绝处理过载的请求,这就是我们下面介绍的限流,通过设定一个峰值阈值,限制请求达到这个峰值,以此来保护系统;我们常见的一些中间件比如tomcat,mysql,redis等等都有类似的限制。

Prometheus监控告警浅析

2020-11-06
阅读 13 分钟
4.7k
最近有个新项目需要搞一套完整的监控告警系统,我们使用了开源监控告警系统Prometheus;其功能强大,可以很方便对其进行扩展,并且可以安装和使用简单;本文首先介绍Prometheus的整个监控流程;然后介绍如何收集监控数据,如何展示监控数据,如何触发告警;最后展示一个业务系统监控的demo。

关于反序列化漏洞的一点认识

2020-08-14
阅读 5 分钟
5.1k
前段时间FastJson被曝高危漏洞,其实之前也被报过类似的漏洞,只是项目中没有使用,所以一直也没怎么关注;这一次刚好有项目用到FastJson,打算对其做一个分析。

SpringBoot使用OpenCV总结

2020-08-09
阅读 3 分钟
5.2k
最近有个项目需要对图片图像进行处理,使用到了开源框架OpenCV全称是Open Source Computer Vision Library,是一个跨平台的计算机视觉库;而现在的项目都是基于SpringBoot,需要把OpenCv整合进去,下面把在使用中遇到的问题进行一个汇总整理。

线程隔离浅析

2020-05-18
阅读 6 分钟
7.3k
随着微服务的流行,单体应用被拆分成一个个独立的微进程,可能一个简单的请求,需要多个微服务共同处理,这样其实是增加了出错的概率,所以如何保证在单个微服务出现问题的时候,对整个系统的负面影响降到最低,这就需要用到我们今天要介绍的线程隔离。

细数那些使用过的定时器

2020-05-11
阅读 5 分钟
4.7k
何为定时器,说白了就是指定一个延迟时间,到期执行,就像我们早上定的闹铃一样,每天定点提醒我们起床;当然在我们各个系统中也是无处不在,比如定时备份数据,定时拉取文件,定时刷新数据等等;定时器工具也是层出不穷比如Timer,ScheduledExecutorService,Spring Scheduler,HashedWheelTimer(时间轮),Quartz,Xxl-...