自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

木卯的专栏

低调做人,高调做事。

  • 博客(109)
  • 收藏
  • 关注

原创 基于Java-VUE-SpringBoot-MySQL的体检预约系统-毕业设计

该项目采用市面上比较流程的前后端分离架构,以SpringBoot技术栈为后端,以VUE为前端,采用优雅简洁漂亮的UI框架。系统采用前端发起请求,后端处理业务的方式进行交互,相对于传统的JSP,freemarker等技术有较大区别以及先进性。同时在权限控制方面有独到的创新,实现了VUE自定义指令,以控制系统权限到每一个系统按钮。部署方便,作者编写了一键启动的脚本,可以让Java后端完美运行在主流服务器上。清晰的注释,每个方法,类,字段,都具备中文注释。代码符合行业规范,变量,类,命名简洁优雅。

2024-06-16 18:30:32 766

原创 深度解析Spring事务管理:从源码到实际应用

一个Bean在执行Bean的创建生命周期时,会经过InfrastructureAdvisorAutoProxyCreator的初始化后的方法,会判断当前当前Bean对象是否和BeanFactoryTransactionAttributeSourceAdvisor匹配,匹配逻辑为判断该Bean的类上是否存在@Transactional注解,或者类中的某个方法上是否存在@Transactional注解,如果存在则表示该Bean需要进行动态代理产生一个代理对象作为Bean对象。

2024-06-16 18:16:20 978

原创 基于Java-VUE-SpringBoot-MySQL的毕业设计-视频管理系统

该项目采用市面上比较流程的前后端分离架构,以SpringBoot技术栈为后端,以VUE为前端,采用优雅简洁漂亮的UI框架。系统采用前端发起请求,后端处理业务的方式进行交互,相对于传统的JSP,freemarker等技术有较大区别以及先进性。同时在权限控制方面有独到的创新,实现了VUE自定义指令,以控制系统权限到每一个系统按钮。部署方便,作者编写了一键启动的脚本,可以让Java后端完美运行在主流服务器上。清晰的注释,每个方法,类,字段,都具备中文注释。代码符合行业规范,变量,类,命名简洁优雅。

2024-06-15 17:10:23 973

原创 Spring 整合 MyBatis 底层源码解析

在Spring整合Mybatis后,如果执行某个方法时,该方法上没有加@Transactional注解,也就是没有开启Spring事务,那么后面在执行具体sql时,每执行一个sql时都会新生成一个SqlSession对象来执行该sql,这就是我们说的一级缓存失效(也就是没有使用同一个SqlSession对象),而如果开启了Spring事务,那么该Spring事务中的多个sql,在执行时会使用同一个SqlSession对象,从而一级缓存生效。大家好,我是柳岸花开。

2024-06-15 16:41:34 873

原创 流浪动物救助系统后台及微信小程序-宠物驿站项目-毕设选题-源代码

该项目采用市面上比较流程的前后端分离架构,以SpringBoot技术栈为后端,以VUE为前端,采用优雅简洁漂亮的UI框架。系统采用前端发起请求,后端处理业务的方式进行交互,相对于传统的JSP,freemarker等技术有较大区别以及先进性。同时在权限控制方面有独到的创新,实现了VUE自定义指令,以控制系统权限到每一个系统按钮。部署方便,作者编写了一键启动的脚本,可以让Java后端完美运行在主流服务器上。清晰的注释,每个方法,类,字段,都具备中文注释。代码符合行业规范,变量,类,命名简洁优雅。

2024-06-10 19:09:41 898

原创 基于Java-SpringBoot-VUE-MySQL的高校数字化迎新管理系统

该项目采用市面上比较流程的前后端分离架构,以SpringBoot技术栈为后端,以VUE为前端,采用优雅简洁漂亮的UI框架。系统采用前端发起请求,后端处理业务的方式进行交互,相对于传统的JSP,freemarker等技术有较大区别以及先进性。同时在权限控制方面有独到的创新,实现了VUE自定义指令,以控制系统权限到每一个系统按钮。部署方便,作者编写了一键启动的脚本,可以让Java后端完美运行在主流服务器上。清晰的注释,每个方法,类,字段,都具备中文注释。代码符合行业规范,变量,类,命名简洁优雅。

2024-06-10 19:08:48 769

原创 基于Java-SpringBoot-VUE-MySQL的企业财务报销系统

该项目采用市面上比较流程的前后端分离架构,以SpringBoot技术栈为后端,以VUE为前端,采用优雅简洁漂亮的UI框架。系统采用前端发起请求,后端处理业务的方式进行交互,相对于传统的JSP,freemarker等技术有较大区别以及先进性。同时在权限控制方面有独到的创新,实现了VUE自定义指令,以控制系统权限到每一个系统按钮。部署方便,作者编写了一键启动的脚本,可以让Java后端完美运行在主流服务器上。清晰的注释,每个方法,类,字段,都具备中文注释。代码符合行业规范,变量,类,命名简洁优雅。

2024-06-10 19:08:11 907

原创 面试官:Spring如何解析配置类

如果配置类上存在@ComponentScan注解,那么则解析该注解,进行扫描,扫描得到一系列的BeanDefinition对象,然后判断这些BeanDefinition是不是也是配置类BeanDefinition(只要存在@Component注解就是配置类,所以基本上扫描出来的都是配置类),如果是则继续解析该配置类,如果ConfigurationClass中存在一些BeanMethod,也就是定义了一些@Bean,那么则解析这些@Bean,并生成对应的BeanDefinition,并注册。

2024-06-10 18:20:26 814

原创 Spring Boot 应用打 WAR 包后无法注册到 Nacos怎么办

在开发过程中,通常使用 JAR 包运行 Spring Boot 应用,这种方式下,服务注册到 Nacos 通常没有问题。然而,在将 Spring Boot 应用打包成 WAR 部署到外部服务器时,可能会遇到服务无法注册到 Nacos 的问题。同时,结合 Nacos 的服务注册与发现功能,可以更加灵活地管理微服务架构中的各个服务。为了在 WAR 包部署时正确地注册服务到 Nacos,我们需要动态地获取实际使用的服务器端口,并将其设置到 Nacos 的服务注册中。把路上的问题记录下来,帮助那些和我一样的人。

2024-06-05 16:58:04 385

原创 Spring Boot既打jar包又打war包如何做

通过Maven Profiles,我们可以非常灵活地控制Spring Boot项目的打包过程。Maven Profiles是Maven提供的一种功能,允许用户根据不同的需求定义不同的构建配置。结合Maven Profiles,我们可以定义两种不同的打包方式:jar和war。以下是示例项目的Maven配置,展示了如何根据不同的Profiles来打包Spring Boot应用。这里使用了Maven的属性替换功能,根据激活的Profile动态设置打包类型。这个Profile是默认激活的,用于打包成jar格式。

2024-06-04 16:17:51 579

原创 面试官:说一下Spring的启动过程

可以看到BeanDefinitionRegistryPostProcessor继承了BeanFactoryPostProcessor接口,并新增了一个方法,注意方法的参数为BeanDefinitionRegistry,所以如果提供一个类来实现BeanDefinitionRegistryPostProcessor,那么在postProcessBeanDefinitionRegistry()方法中就可以注册BeanDefinition了。

2024-06-03 06:30:47 657

原创 深入剖析Spring框架:推断构造方法与@Bean注解的内部机制

并且后续在根据BeanDefinition创建Bean时,会根据isFactoryMethodUnique来操作,如果为true,那就表示当前BeanDefinition只对应了一个方法,那也就是只能用这个方法来创建Bean了,但是如果isFactoryMethodUnique为false,那就表示当前BeanDefition对应了多个方法,需要和推断构造方法的逻辑一样,去选择用哪个方法来创建Bean。,Spring将寻找所有匹配的方法,并根据参数类型和数量进行排序,选择最合适的方法来创建Bean。

2024-05-07 21:42:48 693

原创 什么?你用service调controller,那参数校验怎么办?

总之,通过使用Spring AOP和Bean Validation实现统一的参数验证方法,我们提高了API的可靠性和健壮性。然而,通过集中验证逻辑,我们可以简化流程,并确保应用程序的统一性。为了执行参数验证,我们利用Bean Validation,这是一个标准的Java EE规范,提供了一种声明性的验证Java对象的方式。通过使用验证约束,如。在拦截方法调用时,我们遍历方法参数,针对每个参数进行验证,并根据定义的约束检查是否违反。,我们确保验证仅在特定的部署环境下生效,例如我们的情况下的“合并”模式。

2024-05-04 21:07:57 490

原创 SpringBoot这29个注解你都用到过么

注解用于绑定HTTP请求中的Cookie值到方法参数,可以用在方法参数上。注解用于将方法返回值放入缓存,并且总是执行方法,可以用在方法上。这些注解用于定义在特定Bean存在或不存在时的条件配置,可以用在。这些注解用于定义在特定类存在或不存在时的条件配置,可以用在。注解用于定义在特定属性存在或满足条件时的条件配置,可以用在。注解用于将方法的返回值添加到模型中,可以用在方法上。注解用于定义在特定资源存在时的条件配置,可以用在。注解用于定义异步执行的方法,可以用在方法上。

2024-04-27 09:06:11 544

原创 深入剖析Spring框架:循环依赖的解决机制

如果当前Bean没有出现循环依赖,那么这个Lambda表达式没用,当前bean按照自己的生命周期正常执行,执行完后直接把当前bean放入singletonObjects中,如果当前bean在依赖注入时发现出现了循环依赖(当前正在创建的bean被其他bean依赖了),则从三级缓存中拿到Lambda表达式,并执行Lambda表达式得到一个对象,并把得到的对象放入二级缓存((如果当前Bean需要AOP,那么执行lambda表达式,得到就是对应的代理对象,如果无需AOP,则直接得到一个原始对象))。

2024-04-21 21:01:29 691

原创 Spring之底层架构核心概念解析

在Spring的源码实现中,当我们new一个ApplicationContext时,其底层会new一个BeanFactory出来,当使用ApplicationContext的某些方法时,比如getBean(),底层调用的是BeanFactory的getBean()方法。和申明式事务、编程式事务类似,通过< bean/>,@Bean,@Component等申明式方式所定义的Bean,最终都会被Spring解析为对应的BeanDefinition对象,并放入Spring容器中。

2024-04-08 07:00:45 1059

原创 Spring注入方式解析与实践

2.如果是Collection,则会调用方法findAutowireCandidates(beanName, type, descriptor),该方法返回一个Map,表示会根据type去找bean,Map的key为beanName,Map的value为对象(注意可能是bean对象,也可能是某个bean的class对象,因为该方法只负责根据类型找到对应的bean,如果该bean还没有实例化,那么该方法不负责去实例化,只返回该Bean对应的Class对象,表示这个Bean也是结果之一)

2024-04-04 20:34:18 899

原创 基于Java-SpringBoot-VUE的前后端分离的养老驿站管理系统-毕业设计-源代码

该项目采用市面上比较流程的前后端分离架构,以SpringBoot技术栈为后端,以VUE为前端,采用优雅简洁漂亮的UI框架。系统采用前端发起请求,后端处理业务的方式进行交互,相对于传统的JSP,freemarker等技术有较大区别以及先进性。同时在权限控制方面有独到的创新,实现了VUE自定义指令,以控制系统权限到每一个系统按钮。毕业设计、开题报告、论文、论文写作、论文答辩、简历项目、接单统统搞定!清晰的注释,每个方法,类,字段,都具备中文注释。代码符合行业规范,变量,类,命名简洁优雅。

2024-03-25 21:01:23 926

原创 深入探究Spring中Bean的生命周期

在Spring源码中,AutowiredAnnotationBeanPostProcessor就是一个MergedBeanDefinitionPostProcessor,它的postProcessMergedBeanDefinition()中会去查找注入点,并缓存在AutowiredAnnotationBeanPostProcessor对象的一个Map中(injectionMetadataCache)。本文将深入探讨Bean的生命周期,从Bean的生成到销毁,逐步解析Spring框架中的关键步骤。

2024-03-22 20:57:38 979

原创 到底什么时候该使用MongoDB

MySql是关系型数据库,数据的关联性是非常强的,区间访问是常见的一种情况,底层索引组织数据使用B+树,B+树由于数据全部存储在叶子节点,并且通过指针串在一起,这样就很容易的进行区间遍历甚至全部遍历。在复制集架构中,主节点与备节点之间是通过 oplog 来同步数据的,这里的 oplog 是一个特殊的固定集合,当主节点上的一个写操作完成后,会向 oplog 集合写入一条对应的日志,而备节点则通过这个 oplog 不断拉取到新的日志,在本地进行回放以达到数据同步的目的。其结果是,垂直扩展有一个实际的最大值。

2024-03-18 20:44:22 1398

原创 Spring的简单使用及内部实现原理

在这个示例中,我们使用了AnnotationConfigApplicationContext来加载应用程序的配置类AppConfig,并通过context.getBean()方法获取了一个名为userService的Bean,最后调用了其test()方法。它通过注解的方式告诉Spring在哪里扫描需要管理的Bean,并通过@Bean注解来声明Bean。Spring使用cglib进行AOP时,会生成一个代理类,并在代理类中重写被代理类的方法,在执行代理方法时,会先执行切面逻辑,然后再调用被代理方法。

2024-02-29 21:33:11 988 1

原创 9个接口性能优化方案,RT从9000ms到180ms

总的来说,接口性能优化是一个不断迭代的过程,我将继续努力,不断提升系统的性能,为用户提供更加流畅、高效的使用体验。我用的阿里的 Arthas,下载地址:https://arthas.aliyun.com/doc/download.html。不要在循环中查库,可以把符合条件的数据查出来放 map 中,以空间换时间。经过不断的优化,将接口从 9000ms 优化到 180ms,先看结果。减少不必要的 RPC 调用,如果必须查,通过一组条件查,加缓存。使用连接池,重用连接,避免重复创建的性能损耗。

2024-02-28 21:38:32 892

原创 你遇到过缓存雪崩、缓存穿透、缓存击穿么

​缓存雪崩对于系统 A,假设每天高峰期每秒 5000 个请求,本来缓存在高峰期可以扛住每秒 4000 个请求,但是缓存机器意外发生了全盘宕机。缓存挂了,此时 1 秒 5000 个请求全部落数据库,数据库必然扛不住,它会报一下警,然后就挂了。此时,如果没有采用什么特别的方案来处理这个故障,重启数据库,但是数据库立马又被新的流量给打死了。缓存雪崩的事前事中事后的解决方案如下:事前:Redis 高可用,主从+哨兵,Redis cluster,避免全盘崩溃。事中:本地 ehcache 缓存 + hystri

2021-07-14 21:17:44 208 1

原创 如何设置线程池大小

如何设置线程池大小线程池的线程数量设置过多会导致线程竞争激烈,如果线程数量设置过少的话,还会导致系统无法充分利用计算机资源。那么如何设置才不会影响系统性能呢?线程池原理在 HotSpot VM 的线程模型中,Java 线程被一对一映射为内核线程。Java 在使用线程执行程序时,需要创建一个内核线程;当该 Java 线程被终止时,这个内核线程也会被回收。因此 Java 线程的创建与销毁将会消耗一定的计算机资源,从而增加系统的性能开销。除此之外,大量创建线程同样会给系统带来性能问题,因为内存和 CPU

2021-07-02 09:08:55 833

原创 为什么要用缓存

用缓存,主要有两个用途:高性能、高并发。高性能一个请求过来,操作 mysql,查出一个结果,耗时 600ms。但是这个结果可能接下来几个小时都不会变了,或者变了也可以不用立即反馈给用户。600ms 查出来的结果,放缓存里,一个 key 对应一个 value,下次再查,直接从缓存里,通过一个 key 查出来一个 value,2ms。性能提升 300 倍。就是说对于一些需要复杂操作耗时查出来的结果,且确定后面不怎么变化,但是有很多读请求,那么直接将查询出来的结果放在缓存中,后面直接读缓存就好。高并发

2021-07-01 20:56:07 472

原创 并发容器的使用:识别不同场景下最优容器

并发容器的使用:识别不同场景下最优容器并发场景下的 Map 容器假设我们现在要给一个电商系统设计一个简单的统计商品销量 TOP 10 的功能。常规情况下,我们是用一个哈希表来存储商品和销量键值对,然后使用排序获得销量前十的商品。在这里,哈希表是实现该功能的关键。那么请思考一下,如果要你设计这个功能,你会使用哪个容器呢?切忌在并发场景下使用 HashMap。因为在 JDK1.7 之前,在并发场景下使用 HashMap 会出现死循环,从而导致 CPU 使用率居高不下,而扩容是导致死循环的主要原因。虽然 J

2021-06-22 23:50:44 138

原创 如何优化多线程上下文切换?

如果是单个线程,在CPU 调用之后,那么它基本上是不会被调度出去的。如果可运行的线程数远大于 CPU 数量,那么操作系统最终会将某个正在运行的线程调度出来,从而使其它线程能够使用 CPU,这就会导致上下文切换。在多线程中如果使用了竞争锁,当线程由于等待竞争锁而被阻塞时,JVM 通常会将这个锁挂起,并允许它被交换出去。如果频繁地发生阻塞,CPU 密集型的程序就会发生更多的上下文切换。在某些场景下使用多线程是非常必要的,但多线程编程给系统带来了上下文切换,从而增加的性能开销也是实打实存在的。那么我们该如何

2021-06-07 09:08:32 368

原创 ES在数据量很大的情况下(数十亿级别)如何提高查询效率

​ES 性能优化没有什么银弹,不要期待调一个参数,可以应对所有的性能慢的场景。ES性能优化的杀手锏——filesystem cache向 es 里写的数据,写到磁盘文件里去了,查询的时候,操作系统会将磁盘文件里的数据自动缓存到filesystem cache里面。ES的搜索引擎依赖于底层的filesystem cache,如果给filesystem cache更多的内存,尽量让内存可以容纳所有的idx segment file索引数据文件,那么搜索的时候是走内存的,性...

2021-06-02 09:21:48 1548

原创 哪些操作导致了上下文切换

在并发程序中,并不是启动更多的线程就能让程序最大限度地并发执行。线程数量设置太 小,会导致程序不能充分地利用系统资源;线程数量设置太大,又可能带来资源的过度竞争,导致上下文切换带来额外的系统开销。初识上下文切换其实在单个处理器的时期,操作系统就能处理多线程并发任务。处理器给每个线程分配 CPU 时间片(Time Slice),线程在分配获得的时间片内执行任务。CPU 时间片是 CPU 分配给每个线程执行的时间段,一般为几十毫秒。在这么短的时间内线程互相切换,根本感觉不到,所以看上去就好像是同时进

2021-06-01 09:13:46 734

原创 使用乐观锁优化并行操作

Synchronized 和 Lock 实现的同步锁机制,这两种同步锁都属于悲观锁,是保护线程安全最直观的方式。悲观锁在高并发的场景下,激烈的锁竞争会造成线程阻塞,大量阻塞线程会导致系统的上下文切换,增加系统的性能开销。乐观锁的优化方法,看看怎么使用才能发挥它最大的价值。什么是乐观锁乐观锁,就是说在操作共享资源时,它总是抱着乐观的态度进行,它认为自己可以成功地完成操作。但实际上,当多个线程同时操作一个共享资源时,只有一个线程会成功,那么失败的线程呢?它们不会像悲观锁一样在操作系统中挂起,而仅仅是返回,并

2021-05-10 09:06:11 98

原创 ES 的分布式架构原理

ElasticSearch 设计的理念是分布式搜索引擎,底层其实是基于 lucene 的。核心思想是在多台机器上启动多个 ES 进程实例,组成了一个 ES 集群。ES 中存储数据的基本单位是索引,例如在 ES 中存储一些订单数据,在 ES 中创建一个索引 order_idx ,所有的订单数据写到这个索引里面,一个索引相当于 mysql 里的一张表。index -> type -> mapping -> document -> field。在这里做个类比。但是切记,不要划等号,

2021-05-08 09:30:31 246 2

原创 深入了解Lock同步锁的优化方法

在 JDK1.5 之后,Java 还提供了 Lock 同步锁。那么它有什么优势呢?相对于需要 JVM 隐式获取和释放锁的 Synchronized 同步锁,Lock 同步锁(以下简称 Lock 锁)需要的是显示获取和释放锁,这就为获取和释放锁提供了更多的灵活性。Lock锁的基本操作是通过乐观锁来实现的,但由于 Lock 锁也会在阻塞时被挂起,因此它依然属于悲观锁。从性能方面上来说,在并发量不高、竞争不激烈的情况下, Synchronized 同步锁由于具有分级锁的优势,性能上与 Lock ...

2021-05-07 09:07:12 123

原创 ElasticSearch核心概念

“对内容不感兴趣拉到最后领取今天的外卖红包。”Lucene 和 ES 的前世今生Lucene 是最先进、功能最强大的搜索库。如果直接基于 Lucene 开发,非常复杂,即便写一些简单的功能,也要写大量的 Java 代码,需要深入理解原理。ElasticSearch 基于 Lucene,隐藏了 lucene 的复杂性,提供了简单易用的 RESTful api / Java api 接口(另外还有其他语言的 api 接口)。 分布式的文档存储引擎 分布式的搜索引擎和分析引擎..

2021-05-06 09:10:06 77

原创 深入了解Synchronized同步锁的优化方法

“对内容不感兴趣拉到最后领取今天的外卖红包。”在并发编程中,多个线程访问同一个共享资源时,我们必须考虑如何维护数据的原子性。在JDK1.5 之前,Java 是依靠 Synchronized 关键字实现锁功能来做到这点的。Synchronized 是 JVM 实现的一种内置锁,锁的获取和释放是由 JVM 隐式实现。到了 JDK1.5 版本,并发包中新增了 Lock 接口来实现锁功能,它提供了与 Synchronized 关键字类似的同步功能,只是在使用时需要显示获取和释放锁。Lock ..

2021-05-04 22:16:52 743 6

原创 消息队列该如何进行架构设计

“对内容不感兴趣拉到最后领取今天的外卖红包。”- 首先这个 mq 支持可伸缩性,需要的时候快速扩容,就可以增加吞吐量和容量,设计个分布式的系统,参照一下 kafka 的设计理念,broker -> topic -> partition,每个 partition 放一个机器,存一部分数据。如果现在资源不够了,给 topic 增加 partition,然后做数据迁移,增加机器。- 其次考虑一下 mq 的数据落地,落磁盘才能保证进程挂了数据不丢。落磁盘的时候顺序写,没有磁盘随机读写的寻..

2021-04-29 08:58:11 187 3

原创 推荐几款常用的性能测试工具

“对内容不感兴趣拉到最后领取今天的外卖红包。”常用的性能测试工具对于开发人员来说,首选是一些开源免费的性能(压力)测试软件,例如 ab(ApacheBench)、JMeter 等;对于专业的测试团队来说,付费版的 LoadRunner 是首选。当然,也有很多公司是自行开发了一套量身定做的性能测试软件,优点是定制化强,缺点则是通用性差。重点介绍 ab 和 JMeter 两款测试工具的特点以及常规的使用方法。1.abab 测试工具是 Apache 提供的一款测试工具,具有简单易...

2021-04-27 08:57:40 9386

原创 深入了解NIO的优化实现原理

对内容不感兴趣拉到最后领取今天的外卖红包。Tomcat 中经常被提到的一个调优就是修改线程的 I/O 模型。Tomcat 8.5 版本之前,默认情况下使用的是 BIO 线程模型,如果在高负载、高并发的场景下,可以通过设置 NIO 线程模型,来提高系统的网络通信性能。Tomcat 在 I/O 读写操作比较多的情况下,使用 NIO 线程模型有明显的优势。Tomcat 中看似一个简单的配置,其中却包含了大量的优化升级知识点。下面我们就从底层的网络 I/O 模型优化出发,再到内存拷贝优化和线程模型.

2021-04-25 09:17:11 273

原创 网络通信优化之通信协议:如何优化RPC网络通信?

RPC 通信是大型服务框架的核心我们经常讨论微服务,首要应该了解的就是微服务的核心到底是什么,这样我们在做技术选型时,才能更准确地把握需求。就我个人理解,我认为微服务的核心是远程通信和服务治理。远程通信提供了服务之间通信的桥梁,服务治理则提供了服务的后勤保障。所以,我们在做技术选型时,更多要考虑的是这两个核心的需求。服务的拆分增加了通信的成本,特别是在一些抢购或者促销的业务场景中,如果服务之间存在方法调用,比如,抢购成功之后需要调用订单系统、支付系统、券包系统等,这种远程通信就很容易成为系统的瓶颈。所

2021-04-23 08:40:27 492

原创 网络通信优化之序列化:避免使用Java序列化

网络通信优化之序列化:避免使用Java序列化两个服务之间要共享一个数据对象,就需要从对象转换成二进制流,通过网络传输,传送到对方服务,再转换回对象,供服务方法调用。这个编码和解码过程我们称之为序列化与反序列化。在大量并发请求的情况下,如果序列化的速度慢,会导致请求响应时间增加;而序列化后的传输数据体积大,会导致网络吞吐量下降。所以一个优秀的序列化框架可以提高系统的整体性能。Java 提供了 RMI 框架可以实现服务与服务之间的接口暴露和调用,RMI 中对数据对象的序列化采用的是 Java 序列化。而目

2021-04-22 08:45:37 276

原创 如何解决消息队列的延时以及过期失效问题

大量消息在 mq 里积压了几个小时没解决几千万条数据在 MQ 里积压了几个个小时。一个消费者一秒是 1000 条,一秒 3 个消费者是 3000 条,一分钟就是 18 万条。所以如果你积压了几百万到上千万的数据,即使消费者恢复了,也需要大概 1 小时的时间才能恢复过来。临时紧急扩容具体操作步骤和思路如下:先修复 consumer 的问题,确保其恢复消费速度,然后将现有 consumer 都停掉。新建一个 topic,partition 是原来的 10 倍,临时建立好原先 10 倍的 queue 数

2021-04-21 09:16:43 1466 1

空空如也

空空如也

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

TA关注的人

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