自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 完蛋了,线程池死锁,生产出bug了

因为父任务过多,一小子就把5个核心线程全部占有了,其他父任务和子任务只能到队列中等候,只有队列塞满了,才会另外起工作线程。这时候所有核心线程因为要等待子任务完成才能结束,而子任务又切好躺在队列中无法执行,所以就造成了循环依赖,也就是死锁,线程池被阻塞,无法工作了。排查了半天日志,原来是因为父子任务共用同个线程池,造成循环依赖,直接堵死了导出请求。生产环境系统excel报表导不出,挨客户投诉,内心慌得一批,赶紧查看日志,结果发现是线程池死锁,这锅真是湿手捏干面,不背也得背了。写个单元测试复现一下。

2024-01-02 20:28:20 389 1

转载 redis缓存设计规范

非字符串的bigkey,不要使用del删除,使用hscan、sscan、zscan方式渐进式删除,同时要注意防止bigkey过期时间自动删除问题(例如一个200万的zset设置1小时过期,会触发del操作,造成阻塞,而且该操作会出现在慢查询中(latency可查))默认策略是volatile-lru,即超过最大内存后,在过期键中使用lru算法进行key的剔除,保证不过期数据不被删除,但是可能会出现OOM问题。allkeys-lru:根据LRU算法删除键,不管数据有没有设置超时属性,直到腾出足够空间为止。

2023-12-27 22:45:35 59 1

原创 实现Cacheable注解

在之前的spring cache解析//...而自己设计的@CacheableTtl注解并不能支持,需要继续优化,下面开整!创建Aspect基类,提供基本的操作,原先的监听@CacheableTtl的拦截器CacheableAspect继承该基类/*** 根据指定注解方法获取拦截方法中的注解及参数值*/int i = 0;i++;// 解析上下文。

2023-11-14 08:15:00 66 1

原创 Spring Cache解析

spring cache解析

2023-11-13 08:00:00 52

原创 手写RPC框架

手敲rpc框架

2023-11-12 22:33:34 228 1

原创 Jmeter使用指南

如果线程数为 200 ,循环次数为 10 ,那么每个线程发送 10 次请求。开发过程中往往需求进行接口性能压测,这时候就需要用到jmeter,该工具体积小,上手快,并且是免安装的,使用非常方便。如果线程数为 200 ,准备时长为 10 ,那么需要 1 秒钟启动 20 个线程。下载完成后解压,双击 Jmeter 解压路径(apache-jmeter-5.4.1\bin)的 bin 下面的 jmeter.bat,出现如下界面则表示启动成功。Median:中位数,单位毫秒,也就是 50% 用户的响应时间。

2023-10-28 12:18:12 114 1

原创 一文吃透缓存的击穿、穿透和雪崩

从问题成因来看,缓存雪崩和击穿主要是因为数据不在缓存中了,而缓存穿透则是因为数据既不在缓存中,也不在数据库中。所以,缓存雪崩或击穿时,一旦数据库中的数据被再次写入到缓存后,应用又可以在缓存中快速访问数据了,数据库的压力也会相应地降低下来,而缓存穿透发生时,Redis 缓存和数据库会同时持续承受请求压力。对于缓存的击穿、雪崩、穿透,看似很平常简单的问题,重要的,不是死记硬背八股文式的答案,而是能够从系统和架构的角度,去理清设计原由和解决思路。

2023-10-24 00:06:37 301

原创 强一致性和弱一致性

弱一致性是指当一个数据被更新后,不保证任何时刻任何节点的读取操作都能得到最新的值。这种一致性可以提高系统的性能和可用性,但是也会导致数据的不确定性和不一致性。弱一致性有很多不同的形式,比如最终一致性(Eventual Consistency),它要求在没有新的更新操作发生后,所有节点最终会达到一致状态。在分布式系统中,强一致性是指当一个数据被更新后,任何时刻任何节点的读取操作都能得到最新的值。弱一致性适用于对数据实时性要求不高,或者可以容忍数据不一致的业务场景,比如社交网络、搜索引擎、缓存服务等。

2023-10-23 23:54:28 315

原创 Hystrix熔断限流

4、如果run()方法在指定的超时时间内没有返回结果,或者抛出了异常,那么Hystrix Command对象会执行fallback()方法,表示异常或超时时的备选逻辑,该结果返回给服务,并释放线程资源,同时向Hystrix Circuit Breaker对象报告失败信息。3、如果run()方法在指定的超时时间内返回了正常的结果,那么Hystrix Command对象会将该结果返回给服务,并释放线程资源,并向Hystrix Circuit Breaker对象报告成功信息。

2023-10-23 23:41:25 78

原创 Eureka注册中心

Eureka Client也可以从Eureka Server获取其他服务的信息,并根据负载均衡算法来选择合适的服务进行调用,还可以通过缓存(cache)机制来本地存储服务信息,减少对Eureka Server的依赖,提高查询效率和容错能力。Eureka Server是一个集中式的服务注册中心,它可以存储和提供服务的信息,比如服务的名称、地址、状态等。自我保护机制是eureka的一种特殊的功能,它可以让eureka在遇到网络异常或服务故障时,保护自己的数据不被误删,从而提高服务的可用性和稳定性。

2023-10-23 23:40:46 24

原创 ETCD的注册中心实现

etcd是一个分布式的键值存储,它可以用于服务的注册和发现,以及配置的共享和同步。• 服务提供者在启动时,在etcd中创建一个以服务名为路径的目录,并在该目录下创建一个以自己的地址为键的子目录或键,并设置TTL为一定时间间隔(例如30秒)。• 服务消费者在启动时,在etcd中创建一个watcher,监听服务名对应的目录,并获取该目录下所有子目录或键的数据,作为可用的服务列表。• 服务提供者在运行时,定期向etcd发送心跳请求,更新自己的子目录或键的TTL,以维持自己在etcd中的存活状态。

2023-09-14 22:02:24 503 2

空空如也

空空如也

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

TA关注的人

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