自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

爱琴孩的博客

路漫漫,愿与君共求索529947128

  • 博客(560)
  • 资源 (1)
  • 问答 (4)
  • 收藏
  • 关注

转载 java实现锁的几种方式

在 Java 中,除了对象锁,还有显示的加锁的方式,比如 Lock 接口,用得比较多的就是 ReentrantLock。它的特性如下:下面我们再来对比看下 ReentrantLock 和 synchronized 的区别从这些对比就能看出 ReentrantLock 使用更加的灵活,特性更加丰富。ReentrantLock 是一个悲观锁,即是同一个时刻,只允许一个线程访问代码块,这一点 synchronized 其实也一样。

2024-09-21 19:14:38 19

转载 一文看懂 Kubernetes 弹性伸缩

综上所述,我们认识了什么是HPA,HPA如何工作,但是在实际的业务场景中,Pods缩容期间是否会对业务带来影响呢?该如何解决?

2024-09-08 10:15:52 92

转载 RocketMQ为何会出现消息重复消费

总得来说,RocketMQ中还是存在很多种导致消息重读消费的情况,并且官方也说了,只是在大多数情况下消息不会重复。所以如果你的业务场景中需要保证消息不能重复消费,那么就需要根据业务场景合理的设计幂等技术方案。

2024-09-01 16:54:57 93

转载 @Transactional 注解用法指南

针对不同业务定制异常类型是比较常见的做法,@Transactional 注解的 rollbackFor 参数支持自定义的异常,但我们往往习惯于将这些自定义异常继承自 RuntimeException。那么这就出现和上边同样的问题,事务的范围不足,许多异常类型仍然无法触发事务回滚。try {想要解决这个问题,可以在 catch 中主动抛出我们自定义的异常。try {上面的关于 @Transactional 注解的使用注意事项是我在代码审查和搜集网络观点后整理出的。

2024-09-01 08:14:35 95

转载 精通微服务,没听过SkyWalking?

上一篇文章介绍了分布式链路追踪的一种方式:Spring Cloud Sleuth+ZipKin,这种方案目前也是有很多企业在用,但是作为程序员要的追逐一些新奇的技术,Skywalking作为后起之秀也是值得大家去学习的。skywalking是一个优秀的国产开源框架,2015年由个人吴晟(华为开发者)开源 , 2017年加入Apache孵化器。

2024-08-29 22:36:04 125

转载 ReadWriteLock提升性能的终极指南

1.1 什么是ReadWriteLock在并发编程中,ReadWriteLock是一个锁,它允许多个线程同时读共享数据,而写操作则是互斥的。这意味着如果没有线程正在对数据进行写入,那么多个线程可以同时进行读取操作,从而提高程序的性能和吞吐量。1.2 ReadWriteLock与其他锁的比较相比于传统的互斥锁,ReadWriteLock在处理读多写少的场景时更加高效,因为它允许多个读操作并发执行,而不是让所有读写操作都串行化,因为缓存的读取操作往往比写入操作要多得多。1.3 使用场景与优势。

2024-08-28 22:32:39 32 1

转载 redis分布式锁八大坑点

在分布式系统中,由于redis分布式锁相对于更简单和高效,成为了分布式锁的首先,被我们用到了很多实际业务场景当中。但不是说用了redis分布式锁,就可以高枕无忧了,如果没有用好或者用对,也会引来一些意想不到的问题。今天我们就一起聊聊redis分布式锁的一些坑,给有需要的朋友一个参考。

2024-08-27 22:32:21 49

转载 MySQL数据实时同步到Elasticsearch

数据传输服务DTS(Data Transmission Service)是阿里云提供的实时数据流服务,支持关系型数据库(RDBMS)、非关系型的数据库(NoSQL)、数据多维分析(OLAP)等数据源间的数据交互,集数据同步、迁移、订阅、集成、加工于一体,助您构建安全、可扩展、高可用的数据架构。在MySQL与ES的同步场景中,其主要目的是将MySQL中的业务数据实时同步到ES中,以便利用ES的高效查询能力来应对复杂的查询需求,同时减轻MySQL的查询压力。Binlog实时同步的原理基于数据库的复制机制。

2024-08-18 16:15:55 76

转载 为什么说RedisCluster中的MGET要慎用

所以Lettuce客户端,执行mget获取跨槽位的数据,是通过槽位分发执行mget,并合并结果实现的。而Lettuce基于Netty的NIO框架实现,发送命令不会阻塞IO,但是处理请求是单连接串行发送命令,这也就意味着,如果我们计算出来的slot个数越多,耗时也就越高。在实际业务场景中,难免会有遇到使用了redis集群架构后要使用mget的场景,那么我们是否可以针对已有的一些redis客户端组件进行代码升级和优化呢?命令一次性获取多个 key 的值,如果这些 key 所在的哈希槽分布在不同的节点上,那么。

2024-08-18 12:47:02 107

转载 高并发系统的艺术:如何在流量洪峰中游刃有余

既然采用了分布式的微服务架构,那么分布式系统的一些常见痛点也是高并发要考虑的,比如熔断,降级,限流,超时等设计,这些本身是为了增强分布式系统的鲁棒性,从而简介的增强系统的高并发承载能力。随着互联网业务的不断发展,选择在网上购物的人群不断增加,这种情况下,会衍生出一些促销活动,类似抢购场景或者热销热卖场景,在高峰时段的下单数量会非常大,也意味着对数据库中畅销商品的库存操作十分频繁,需要频繁查库存和更新库存。当然那这样不够,因为MySQL数据库的读写的并发上线能力是有限的,我们还是需要再进一步优化我们的方案。

2024-08-17 17:48:47 33

转载 SkyWalking 和 ELK 实现链路追踪的实践

SkyWalking和 ELK 各自在 APM 与日志管理领域发挥着重要作用,尽管原生 ELK 不直接支持链路追踪,但通过与 SkyWalking 的集成,可以互补优势,共同提升微服务架构下的可观测性。

2024-08-11 16:38:29 77

转载 微服务中的日志链路追踪

本篇通过拦截器、MDC 功能,全链路加入了 traceId,然后将 traceId 输出到日志中,就可以通过日志来追踪调用链路。不论是进程内的方法级调用,还是跨进程间的服务调用,都可以进行追踪。另外日志还需要通过 ELK Stack 技术将日志导入到 Elasticsearch 中,然后就可以通过检索 traceId,将整个调用链路检索出来了。

2024-08-11 16:20:25 100

原创 @TransactionalEventListener与@EventListener那点事

最近测试提了个bug,有个交易订单服务,会产生一些交易数据,当时为了便于后续追溯交易订单的来源和状态,在交易中心服务中做了事件溯源功能,利用spring的事件监听功能做了异步事件溯源,将业务代码和事件存储逻辑解耦。同事在编码注册监听器的时候使用了@TransactionalEventListener注解。测试在测试功能的时候发现某一类型事件没有保存到事件溯源的mongoDB中,由于事件溯源功能已经上线快两年了。从现网mongoDB中查询数据,发现此类型事件数据从2023年7月份就没有数据了。

2024-08-08 21:39:18 848

原创 $‘\r‘: 未找到命令

'\r': 未找到命令,这个异常在执行shell脚本的时候经常遇到,一般新手遇到这个问题就不知道咋回事了。我们一般开发环境都是windows环境,在windows上编写的shell脚本里面如果存在换行符\r。如果我们直接在linux服务器上执行windows上编辑的shell脚本就会报前面的异常,那么我们可以将Windows格式的sh文件转换为Unix格式。

2024-07-27 16:53:14 488

转载 五年经验,还在面试前背双亲委派机制?

双亲委派机制的基本思想是:当一个类加载器试图加载某个类时,它会先委托给其父类加载器,如果父类加载器无法加载,再由当前类加载器自己进行加载。这种层层委派的方式有助于保障类的唯一性,避免类的重复加载,并提高系统的安全性和稳定性。启动类加载器(Bootstrap Class Loader):负责加载 %JAVA_HOME%/jre/lib 目录下的核心Java类库,比如:rt.jar、charsets.jar等。它是最顶层的类加载器,通常由C++编写。扩展类加载器。

2024-06-30 12:11:43 72

原创 Hibernate多事务同时调用update(T t) ,字段被覆盖问题

今天现网有个订单卡单了,经过排查发现没有任何异常日志,根据日志定位发现本应该更新的一个状态,也sql肯定执行了(使用了Hibernate的ORM框架),但是数据库里面的状态没有更新。大概逻辑如下根据日志能确认,此段代码肯定是被执行了,但是数据库表的Status依旧是processing。

2024-04-10 22:36:52 735 3

原创 五年经验,还不懂小表驱动大表

而如果sql语句中包含了exists关键字,它优先执行exists左边的语句(即主查询语句)。如果匹配上,则可以查询出数据。这个需求中,order表有10000条数据,而user表有100条数据。小表驱动大表,也就是说用小表的数据集驱动大表的数据集。假如有order和user两张表,其中order表有10000条数据,而user表有100条数据。前面提到的这种业务场景,使用in关键字去实现业务需求,更加合适。,然后再执行in外面的语句。不管是用in,还是exists关键字,其核心思想都是用小表驱动大表。

2024-04-08 22:29:37 426

原创 五年经验,连个文件下载方法都写不好

在java web开发中,我们经常遇到浏览器文件下载的功能,看似很简单的功能,有些几年经验的老鸟,都写不好,大家遇到这种功能,都是直接Ctrl+C一下代码,具体代码估计都没看。下面有两种写法对比,很多初学者都没注意,甚至有几年开发的经验的老鸟也时候也会犯错。

2024-03-31 13:41:33 299

转载 五年经验,应用分层还没搞懂?

总的来说业务分层对于代码规范是比较重要,决定着以后的代码是否可复用,是否职责清晰,边界清晰。当然这种分层其实见仁见智,团队中的所有人的分层习惯也不同,所以很难权衡出一个标准的准则,总的来说只要满足职责逻辑清晰,后续维护容易,就是好的分层。

2024-03-29 21:23:24 51 1

原创 利用Cas中service重定向钓鱼网站问题

今天运维反馈现网有个系统service=存在重定向钓鱼网站的安全漏洞。熟悉Cas实现单点登录的都知道,通过service参数,在Cas认证中心登录认证之后重定向到service对应的业务系统。但是Cas本身没有对service进行校验,所以就有别有用心之人,通过在service后面配置一些钓鱼网站。这样就会实现,从你的网站跳转到钓鱼网站。

2024-03-27 22:46:36 325

转载 彻底理解IO模型

IO,英文全称是Input/Output,翻译过来就是输入/输出。平时我们听得挺多,就是什么磁盘IO,网络IO。那IO到底是什么呢?是不是有种懵懵懂懂的感觉呀,好像大概知道它是什么,又好像说不清楚。IO,即输入/输出,到底谁是输入?谁是输出呢?IO如果脱离了主体,就会让人疑惑。

2024-03-26 22:40:31 44 1

转载 Redis最佳实践

在当今互联网项目中,几乎80%的的项目都有使用redis。但在其应用过程中,总是或多或少遇到过一些问题。redis内存为什么会增长这么快?redis为什么读取操作越来越慢?怎么样降低redis故障的频率?redis的运维需要注意些什么?redis部署时,如何做好资源使用的规划?对redis的监控应该要注意哪些指标?特别是当你的应用对redis非常依赖的前提下,那么这些问题就显得尤为突出。那么这个时候,这时候需要对redis的使用有一份最佳实践文档来助你轻松管理redis。

2024-03-25 21:46:10 48

转载 微服务鉴权的几种实现方案

但需要注意的是应该将Web项目的容器换成Undertow,因为Tomcat是阻塞式的容器,不换也不是不行,但吞吐量可能会少一下,Undertow是非阻塞式的容器,可以与Gateway到达相同的效果。根据需求积分服务提供了一个给用户添加积分的API,如果你的API是通过获取的当前登录用户ID增加的积分,那么面对场景二时你需要重新编写一个给用户添加积分的API,因为当前登录的是后台管理员而不是用户(代码复用率较低)。各位服务都有自己的鉴权方式,当然也可以通过jar包的方式统一各服务的鉴权方式。

2024-03-23 21:06:06 273 1

转载 Kafka架构设计剖析

架构Kafka 将 Topic 进行分区,分区可以并发读写。

2024-03-17 22:25:53 43

转载 五年经验,还只会用in和not in?

在MySQL中,IN和EXISTS都是用来实现子查询的关键字,但它们在使用方式、查询效率以及索引利用上有所区别。使用方式IN用于判断某个字段的值是否在子查询返回的结果集中。它通常与一个值列表或子查询一起使用,可以看作是多个OR条件的组合。而EXISTS用于检查子查询是否至少返回一行数据,它不关心子查询返回的具体值是什么。查询效率:在某些情况下,EXISTS可能比IN更高效,尤其是当子查询返回大量数据时。因为EXISTS只需要知道是否至少有一行数据满足条件,而IN。

2024-03-12 22:27:08 41

转载 nginx-keepalived的高可用方案

处于同一个VRRP组中的路由器具有两种互斥的角色:主控路由器和备份路由器一个VRRP组中有且只有一台处于主控角色的路由器,可以有一个或者多个处于备份角色的路由器VRRP协议从路由器组中选出一台作为主控路由器,负责ARP解析和转发IP数据包,组中的其他路由器作为备份的角色并处于待命状态。主机将虚拟路由器当作默认网关。主机之间的通信都是通过配置静态路由或者(默认网关)来完成的,而主机之间的路由器一旦发生故障,通信就会失效,因此这种通信模式当中,路由器就成了一个单点瓶颈,为了解决这个问题,就引入了VRRP协议。

2024-03-10 23:09:26 39

原创 深入了解Kafka的文件存储原理

Kafka最初由Linkedin公司开发的分布式、分区的、多副本的、多订阅者的消息系统。它提供了类似于JMS的特性,但是在设计实现上完全不同,此外它并不是JMS规范的实现。kafka对消息保存是根据Topic进行归类,发送消息者称为Producer;消息接受者称为Consumer;此外kafka集群有多个kafka实例组成,每个实例(server)称为broker。

2024-03-02 22:23:55 1361

转载 Nginx核心架构设计和原理

Nginx 是一个免费的、开源的、高性能 Http 服务器和反向代理。Nginx 的架构设计是为了提供高性能、稳定性和可扩展性。

2024-02-25 15:42:35 111

转载 代理服务器:代理的工作原理

代理服务器充当客户端请求资源和提供该资源的服务器之间的中介。它可以实现多种目的,如为更快的访问缓存资源、匿名请求、强制安全策略以及在多个服务器之间进行负载平衡。基本上,它接收来自客户端的请求,将其转发到相关的服务器,然后将服务器的响应返回给客户端。

2024-02-25 08:48:51 107 1

转载 共享单车通信原理

我们经常骑的共享单车到底是什么通信原理,有人了解过吗?下面就和大家了解下。

2024-02-24 12:36:24 140 1

转载 Sharding-jdbc那点事(二)

简单点理解就是拿到分片策略中配置的分片键等信息,在从SQL解析结果中找到对应分片键字段的值,计算出 SQL该在哪个库的哪个表中执行,SQL路由又根据有无分片健分为。直接路由是直接将SQL路由到指定⾄库、表的一种分⽚方式,而且直接路由可以⽤于分⽚键不在SQL中的场景,还可以执⾏包括⼦查询、⾃定义函数等复杂情况的任意SQL。SQL经过解析、优化、路由后已经明确分片具体的落地执行的位置,接着就要将基于逻辑表开发的SQL改写成可以在真实数据库中可以正确执行的语句。当 SQL分片健的运算符为。

2024-02-05 22:42:33 74

转载 Kafka架构和工作原理

分区是 Kafka 读写数据的最小粒度,比如主题 A 有 15 条消息,有 5 个分区,如果采用顺序轮询的方式,15 条消息会顺序分配给这 5 个分区,后续消费的时候,也是按照分区粒度消费。由于分区可以部署在多个不同的机器上,所以可以通过分区实现 Kafka 的伸缩性,比如主题 A 的 5 个分区,分别部署在 5 台机器上,如果下线一台,分区就变为 4。,比如下图的 2 个消费群组,可以分别消费这 4 个分区的消息,互不影响。消息经过序列化后,通过不同的分区策略,找到对应的分区。

2024-02-03 17:11:59 73

转载 Nginx中upstream动态修改

nginx_http_dyups_module是第三方开源软件,它提供API动态修改upstream的配置,并且支持Nginx的ip_hash、keepalive等与upstream有关的配置。安装nginx_http_dyups_module。

2024-02-02 23:15:29 266

转载 多线程优化的坑

但好景不长,随着流量的增加,接口响应时间也在逐渐变长,p99 超过 5 秒,最后系统抛出大量的。系统恢复后,小艾仔细查看系统监控,CPU使用率并不高,内存也处于正常水位,接口性能居然比优化前还差,真心不知道哪里出了问题。当我们在处理慢接口问题时,经常会使用多线程技术,将能够并行处理的任务拆分到不同的线程中处理,等任务处理完成后,再收集各线程的处理结果,进行后续的处理。上面提到一个小问题,在资源充足情况下,所有任务均有线程池线程完成,主线程一致处于等待状态,存在一定的资源浪费。,从而触发接口异常。

2024-01-27 22:14:13 47

转载 事务脚本与领域模型那点事

在模型中,实体和值对象表示业务中的实际对象,聚合是由多个高内聚实体和值对象形成的组合提,领域服务表示不属于任何一个实体或值对象的操作,工厂则用于创建复杂的对象,比如实体和值对象等。领域驱动设计(Domain-Driven Design,DDD)是应对复杂业务场景的利器,它是对业务领域中的关键概念和业务规则的抽象。领域模型是一个对象模型,它主要描述各领域对象之间的关系和行为。和事务脚本不同,领域模型使用对象来承载业务逻辑,领域模型的设计基于业务领域知识,强调领域专家的参与,以提高软件系统的质量和开发效率。

2024-01-18 23:17:55 100

转载 贫血模型、充血模型的深入解读!

其实它们没有什么特别适用的方向,个人更倾向于总是使用充血模型,因为OOP总是比面向过程编程要有更丰富的语义、更合理的组织、更强的可维护性—当然也更难掌握。另外,实际工程场景中使用充血模型,还会碰到很多很多细节问题,其中最大的难关就是“如何设计充血模型”或者说“如何从复杂的业务中分离出恰到好处且包含语义的逻辑放到VO的行为中”。更糟糕的是,很多人认为这些贫血领域对象是真正的对象,从而彻底误解了面向对象设计的涵义。如今,面向对象的概念已经传播得很广泛了,而要反对这种贫血领域模型的做法,还需要更多论据。

2024-01-18 22:13:13 57

转载 变更数据捕获:概述、原因及最佳实践

变更数据捕获是检测和捕获源系统(通常是数据库)中的变更,并将这些变更以几乎实时的方式传递到目标系统的过程。这些变更可以是插入、删除、更新以及通过DDL进行的数据库结构更改等。

2024-01-13 18:40:26 94

原创 LVS那点事

1、通过在调度器 LB 上修改数据包的目的 MAC 地址实现转发。注意源地址仍然是 CIP,目的地址仍然是 VIP 地址。2、请求的报文经过调度器,而 RS 响应处理后的报文无需经过调度器 LB,因此并发访问量大时使用效率很高(和 NAT 模式比)3、因为 DR 模式是通过 MAC 地址改写机制实现转发,因此所有 RS 节点和调度器 LB 只能在一个局域网里面。4、RS 主机需要绑定 VIP 地址在 LO 接口(掩码 32 位)上,并且需要配置 ARP 抑制。

2023-12-31 22:23:32 884

原创 awk常见用法

awk命令默认使用空格作为字段分隔符,但是可以根据需要自定义分隔符。

2023-12-31 10:23:42 547

原创 正则表达式

(1)介绍正则表达式应用广泛,在绝大多数的编程语言都可以完美应用,在Linux中,也有着极大的用处。使用正则表达式,可以有效的筛选出需要的文本,然后结合相应的支持的工具或语言,完成任务需求。(2)正则表达式类型正则表达式可以使用正则表达式引擎实现,正则表达式引擎是解释正则表达式模式并使用这些模式匹配文本的基础软件。

2023-12-30 14:34:55 537

微服务架构讲解高清原图

微服务架构讲解高清原图

2024-06-13

Java+内存分析工具+MAT

MAT是Memory Analyzer的简称,它是一款功能强大的Java堆内存分析器。可以用于查找内存泄露以及查看内存消耗情况。MAT是基于Eclipse开发的,是一款免费的性能分析工具。

2023-08-19

websocket实现聊天小demo

WebSocket协议是基于TCP的一种网络协议,它实现了浏览器与服务器全双工(Full-duplex)通信。它允许服务端主动向客户端推送数据,这使得客户端和服务器之间的数据交换变得更加简单高效。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接,并进行双向数据传输。WebSocket 在握手之后便直接基于 TCP 进行消息通信,只是 TCP的基础上的一层非常轻的封装,它只是将TCP的字节流转换成消息流(文本或二进制),至于怎么解析这些消息的内容完全依赖于应用本身。

2023-05-12

aspose导出pdf乱码,配置字体库

解决aspose在linux环境下导出pdf乱码,在linux服务器上配置改字体库,代码中读取该字体库,即可解决aspose在linux环境下导出pdf乱码问题。

2023-02-25

windows 2008 R2解决socket连接不释放补丁包

Windows Server 2008 R2系统BUG导致windows缓冲区已满(no buffer space),Windows核心套接字泄露问题导致操作系统套接字资源被耗尽,导致服务器与数据库无法正常对接。

2019-01-17

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

TA关注的人

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