Java
文章平均质量分 91
职略
这个作者很懒,什么都没留下…
展开
-
如何解决代码循环依赖问题?
合理的系统架构以及持续的重构优化工作能够减轻这种复杂关系,但如何有效识别系统中存在的循环依赖仍然是开发人员面临的一个很大的挑战。所谓循环依赖,简单来说就是一个类A会引用类B中的方法,而反过来类B同样也会引用类A中的方法,从而导致类A和类B之间存在相互引用,从而形成一种循环依赖。组件之间的循环依赖关系的产生原因在于组件1中的类与组件2中的类之间存在依赖关系,从而导致组件与组件之间产生一种循环依赖。对于循环依赖,JDepend给出了四个子页面,分别是所选中的包、存在循环依赖关系的包、所依赖的包和被依赖的包。原创 2024-05-15 11:13:21 · 1087 阅读 · 0 评论 -
如何有效识别限界上下文?
在实施DDD的过程中,识别限界上下文是一大难点,但也并非无章可循。在本文内容中,我们将分别从业务维度、工作维度以及技术维度进行展开,讨论如何有效识别限界上下文的方法和技巧。原创 2024-05-07 11:30:46 · 781 阅读 · 0 评论 -
什么是序列化?如何对序列化实现工具进行正确选型?
在现实中,我们通常会使用Dubbo、Spring Cloud等开源框架,以及TCP、HTTP等网络传输协议来发起远程调用。对于这些框架和协议而言,客户端发起请求的方式,以及服务端返回响应结果的处理过程都是不一样的。但是这里存在一个共同点,即无论采用何种开发框架和网络传输协议,都涉及到业务数据在网络中的传输,这就需要应用到序列化技术。和网络通信不同,序列化技术是直接面向开发人员的,我们可以对具体的序列化工具和框架进行选择,而不像网络通信过程那样只能依靠框架底层所封装的能力。原创 2024-04-25 10:29:34 · 1210 阅读 · 0 评论 -
什么是集群容错?如何实现集群容错?
在使用负载均衡策略时,我们需要提到集群这一概念。集群的构建一方面能够为实现负载均衡提供基础,另一方面,它也能够有效应对服务访问出错的场景,这就是集群容错。在分布式系统运行过程中,远程调用发生失败的现象不可避免。为了应对服务访问失败,集群容错是一种简单高效的技术组件。那么,什么是集群容错?常见的又有哪些集群容错策略呢?集群容错是服务容错的其中一种实现方式。我们知道,所谓集群,就是同时存在一个服务的多个实例。一旦我们访问其中一个实例出现问题,原则上可以访问其他实例来获取结果。原创 2024-04-19 14:21:28 · 1187 阅读 · 0 评论 -
什么是动态代理?它在主流开源框架中有哪些应用?
在系统设计过程中,对象之间相互依赖会造成耦合度过高,我们需要引入一个中间类来消除或缓解在直接访问目标对象时所带来的问题。但是对于发起访问的对象而言,通常希望这个中间类的存在是无感知的,这时候我们就可以引入动态代理机制。那么,问题就来了,作为一种通用型的技术组件,动态代理在分布式系统构建过程中起到什么作用呢?本文内容将和你一起探讨这个话题。在系统设计领域,代理(Proxy)是一种常见的技术组件,主要目的就是在访问目标对象之前添加一层代理对象,用于消除或缓解在直接访问目标对象时带来的问题。原创 2024-04-18 15:53:03 · 740 阅读 · 0 评论 -
如何自己动手写一个基础RPC架构
任何分布式系统的开发都涉及到跨进程之间的远程过程调用,也就是所谓的RPC。前面两讲我们讨论的网络通信和序列化实际上也都属于是RPC架构的范畴,只是关注于不同的技术切入点。而RPC本身也构成一种架构体系,包含一系列相互协作的核心组件。在Dubbo、Spring Cloud等主流的分布式服务框架中,这些技术组件使用起来都非常简单,因为框架为开发人员屏蔽了底层的实现细节。那么,现在假如没有这些开源框架,而是需要你自己来设计并实现一套远程过程调用机制,你应该怎么做的?原创 2024-04-17 15:13:39 · 972 阅读 · 0 评论 -
如何实现分布式链路跟踪
而四种注解构成了客户端和服务器对一次请求处理的闭环,对于服务A而言,cs是11:10:44, cr是11:10:55,也就说该次服务请求经由服务A的整个调用链路时间是11s(11:10:44-11:10:55),显然这个响应时间非常长。对于服务监控而言,服务调用链数据收集、分析和管理的目的是为了发现服务调用过程的问题并采取相应的优化措施。所谓跨度,就是调用链路中的其中一段时间,具有明确的开始和结束这两个节点,这样通过计算开始时间和结束时间之间的时间差,我们就能明确调用过程在这个Span上所产生的时间延迟。原创 2024-04-16 17:22:45 · 1157 阅读 · 0 评论 -
负载均衡算法有哪些?如何实现?
在分布式环境下,我们将多个服务实例集中在一起,每一次请求都可以由集群中的某一个服务实例进行响应。那么具体某一个请求到底应该是由哪个服务实例来响应最为合适呢?这个话题看上去很简单,实际上却有点复杂,涉及到服务请求的路由机制。而在分布式系统中,负载均衡就是最常见也是最具代表性的一种路由机制。为了对请求进行合理的分发,我们需要提供一组负载均衡算法,那么常见的负载均衡算法有哪些?它们又应该如何实现呢?我们先来看这些问题背后的示意图,如下图所示。原创 2024-04-12 10:06:15 · 899 阅读 · 0 评论 -
Spring是如何解决循环依赖问题
而earlySingletonObjects中存放的是那些提前暴露的对象,也就是已经创建但还没有完成属性注入的对象,属于第二级缓存。所谓的三级缓存,在Spring中表现为三个Map对象,定义在DefaultSingletonBeanRegistry类中,该类是DefaultListableBeanFactory的父类,如下所示。ClassB对象创建完成之后会放到第一级缓存中,这时候ClassA就能从第一级缓存中获取ClassB的实例,进而完成ClassA的所有初始化流程。原创 2024-04-11 16:31:13 · 1091 阅读 · 2 评论 -
Spring Cloud Stream
关于如何构建一个统一化的消息通信平台,Spring Cloud Stream是我们值得深入分析和研究的一个框架。对于消息通信而言,我们需要分别实现消息的发布者和消费者。在Spring Cloud Stream中分别是Source和Sink组件。而消息的传递显然应该用到通道,所以Spring Cloud Stream也包含了Channel组件。最后,作为Spring Cloud Stream框架在设计上的一大特色,Binder组件专门用于屏蔽与各种消息中间件之间的技术差异,为开发者提供统一的API。原创 2024-04-10 10:08:32 · 762 阅读 · 1 评论