- 博客(19)
- 收藏
- 关注
原创 微服务架构(8)——链路追踪
目录:1、为什么需要链路追踪2、链路追踪技术对比选型3、集成skywalking4、skywalking原理为什么需要链路追踪当我们把一个系统拆分为一个个的微服务之后,那么一个请求就可能需要多个服务协同才能完成。比如用户下单这个请求,就可能会涉及到商品服务、订单服务、支付服务、仓储服务。假如整个流程是这样的:在这个流程中无论哪个服务处理失败,都会导致下单这个操作不成功。那么如何能快速定位在哪个服务中发生了异常?这就需要链路追踪了。链路追踪对比选型目前使用的比较多的有:1、cat——大
2021-01-26 21:23:34
1024
2
原创 微服务架构(7)——监控中心
目录:1、为什么需要监控中心2、监控中心对比选型3、集成Prometheus4、Prometheus原理为什么需要监控中心在我们开发完一个系统部署上线后,经常会遇到机器的CPU、内存、磁盘、IO、网络等资源负载过高的问题。那我们总不能说天天对着这些机器,通过一些命令去观察这些机器资源使用的情况。所以我们就需要一个这样的控制中心用来监控我们机器和系统的资源使用情况,通过图形化的界面来直观的去观察这些信息,同时也能设置一些阈值,当资源使用率达到阈值时能进行自动预警。监控中心组件对比选型目前比较主
2021-01-26 21:23:11
964
3
原创 微服务架构(6)——配置中心
目录:1、为什么需要配置中心2、配置中心组件对比选型3、集成Apollo4、Apollo原理为什么需要配置中心假如我们系统的系统要去调用另一个系统的接口,于是我们在配置文件里面配置了如下一行配置。guiji.company.url = 118.118.118.18/sendMoney突然有一天,调用的这个系统地址变了。那么这个时候我们就需要去调整我们配置文件里面的这个地址了,而且调整了之后需要重启才能够生效。在白天的时候流量比较大,不能进行重启。所以只能等到凌晨1、2点的时候,把这个配置
2020-12-27 21:47:44
420
原创 微服务架构(5)——熔断降级
目录:1、为什么需要熔断降级2、熔断降级框架对比选型3、集成Sentinel4、Sentinel原理为什么需要熔断降级在微服务化的系统中会存在一个比较严重的问题,叫做服务雪崩。服务雪崩是怎么发生的呢?如上图,假设一个用户进行一个下单操作,商品服务需要调用订单服务添加订单数据,下单成功后,订单服务又需要调用积分服务给下单成功的用户增加一些积分。要是有一天,积分服务突然挂了。这时一个下单请求过来的话,在订单服务调用积分服务时,因为积分服务挂了。请求一直卡在这里,等到过了设置的超时时间,才返回请
2020-12-22 23:24:45
1010
3
原创 微服务架构(4)——分布式事务
目录:1、什么是分布式事务2、分布式事务解决方案3、集成seata4、seata原理什么是分布式事务在服务拆分之后,完成某一个功能可能需要横跨多个服务,操作多个数据库。之前操作单一的数据库,只需要保证在这个数据库中执行的操作要么一起成功,要么一起失败。这种事务叫做本地事务。而操作多个数据库,要保证多个数据库里的操作一起成功或失败的事务就是分布式事务。上图中有库存服务和订单服务,库存服务和订单服务都有自己单独的数据库。在一个下单操作中,需要先调用库存服务减去相应的库存,然后再调用订单服务
2020-12-15 23:31:24
312
1
原创 微服务架构(3)——RPC框架
目录:1、为什么需要RPC框架2、RPC框架对比选型3、RPC框架使用4、RPC框架原理为什么需要RPC框架在没有使用微服务之前,我们所有的代码都在一个项目中,都部署在同一个tomcat里,所有的调用都是本地调用,就用不上RPC框架。但是当我们把一个系统拆分成多个服务之后,每个服务都独立部署。服务之间要相互调用,就需要通过远程调用了。RPC(Remote Procedure Call)远程过程调用,其实就是一个服务调用另一个服务提供的接口。比较典型的就是HTTP接口调用了,一个服务对外提供一
2020-12-06 12:52:20
526
1
原创 微服务架构(2)——注册中心
目录:1、为什么需要注册中心2、注册中心技术组件选型3、注册中心搭建4、注册中心原理为什么需要注册中心将一个项目拆分成多个服务之后,服务之间就可能会相互进行调用通讯,来完成一个完整的功能。如果A服务要调用B服务,那么A服务是如何知道B服务的地址和端口的呢?总不能在配置文件里面写死吧。这样的话要是B服务增加一个实例,那不是就要去修改这个配置。或是B服务有个实例挂掉了,由于配置文件没有修改,A服务还一直在调用这个挂掉的实例。所以这就需要配置中心了。所有服务启动后都会把地址和端口等相关的信息注册到注册
2020-12-05 15:07:15
403
1
原创 微服务架构(1)——微服务架构介绍
目录:1、单体应用的缺点2、微服务的出现3、微服务带来的问题单体应用的缺点在之前我们开发一个应用,就是在我们本地把功能实现好,然后把整个应用打成一个war包,部署到一个web容器里面,这样在浏览器里面就能够访问我们的项目了。这样的一个应用我们称之为单体应用。这种应用开发简单,所有的功能都在本地,没有调用消耗。但是随着业务的发展,应用功能不断增加,几年之后这个应用变的又大又复杂。这个时候这种应用的缺点就凸显出来了。单体应用架构如下:缺点:1、效率低:可能这个项目由10几个开发在维护,所有人都
2020-11-29 17:04:56
368
原创 Spring源码解析(11)——创建代理
创建代理在获取到了增强器后,就开始创建代理了。代理的创建可以通过jdk和cglib两种方式来创建,后续执行目标类的方法时,就是通过这个代理来执行了。在执行的过程中会根据我们之前获取的增强器来创建一个拦截器链,通过执行这一串拦截器链来达到增强的效果。下面我们就根据源码来看看其中的实现逻辑createProxyprotected Object createProxy(Class<?> beanClass, @Nullable String beanName, @Nullable Obj
2020-11-14 23:25:25
185
原创 Spring源码解析(10)——获取增强器
获取增强器获取增强器的方法getAdvicesAndAdvisorsForBean是执行的AbstractAdvisorAutoProxyCreator这个类里面getAdvicesAndAdvisorsForBean方法。 @Override @Nullable protected Object[] getAdvicesAndAdvisorsForBean( Class<?> beanClass, String beanName, @Nullable TargetSource t
2020-11-14 20:42:28
405
1
原创 Spring源码解析(9)——AOP
AOP使用首先创建一个TestAopBeanpublic class TestAopBean { private String testStr = "javaGuiji"; public String getTestStr () { return testStr; } public void setTestStr(String testStr){ this.testStr = testStr; } public void testAop(){ System.out.pr
2020-11-13 23:12:27
120
原创 Spring源码解析(8)——ApplicationContext
回顾上篇上篇文章《属性注入》,我们已经分析完了bean中的属性是如何注入进去的。到目前为止我们已经分析完了Spring创建一个bean的全流程。先是解析配置的xml文件,将xml文件里配置的信息解析到一个BeanDefinition里面,然后通过BeanDefinition来创建bean,同时也会将bean的属性值注入。这里面也涉及到一个循环依赖的问题,也分析了一下Spring是如何来解决循环依赖的。上面的分析我们都是基于BeanFacotry接口的实现类XmlBeanFactory来分析的,在Sprin
2020-10-31 17:27:06
121
原创 Spring源码解析(7)——属性注入
回顾上篇上篇文章《循环依赖》中分析了A类要注入B类的属性,B类中又要注入A类的属性时,Spring是如何通过缓存来解决循环依赖的问题。循环依赖已经分析完了,那么接下来我们就分析一下注入的逻辑又是什么样的。分析源码实现首先在xml配置文件中添加下面的配置。表示A类中要注入属性B。 <bean id="a" class="com.guiji.bean.A"> <property name="b" ref="b"/> </bean>然后执行代码我们看到popu
2020-10-18 18:52:22
290
1
原创 Spring源码解析(6)——循环依赖
回顾上篇上篇文章《获取bean》已经分析完了bean是如何创建出来的,但是获取bean的逻辑远不止这么简单。我们分析bean的获取是直接从创建bean的代码开始分析的,其实在创建bean之前是会先从缓存中去获取bean,如果获取不到才会去创建这个bean,创建成功后会把这个bean放到缓存中。接下来我们看看什么时候会把bean缓存起来以及在什么地方会使用到这个缓存。分析源码实现在创建bean的过程中有两段放缓存的代码。// 这里放入的是创建bean的工厂类,通过getObject()就能够获取这个b
2020-10-18 14:39:33
120
2
原创 Spring源码解析(5)——获取bean
回顾上篇上篇文章《注册BeanDefinition》我们已经分析到,xml配置文件解析完成转化成了一个BeanDefinition,并且这个BeanDefinition存放在了一个beanDefinitionMap里,key就是我们在xml中配置的class属性的值。<bean id="myTestBean" class="com.guiji.bean.MyTestBean"></bean>接下来就可以获取注册的bean了,我们看到我们自己写的测试类BeanFactoryTe
2020-10-17 18:01:17
180
原创 Spring源码解析(4)——注册BeanDefinition
回顾上篇上篇文章解析配置文件我们已经分析完了配置文件解析过程,这个时候Spring已经创建了一个BeanDefinition并且将封装到了BeanDefinitionHolder中。接下来我们就接着分析注册BeanDefinition的过程。分析源码实现protected void processBeanDefinition(Element ele, BeanDefinitionParserDelegate delegate) { BeanDefinitionHolder bdHolder = d
2020-07-05 17:26:57
497
原创 Spring源码解析(3)——解析配置文件
回顾上篇上篇文章读取配置文件中,我们已经分析到spring如何读取配置文件(BeanFactoryTest.xml),并最终把配置文件转换成Document 对象。接下来Spring会去解析Document 对象,并创建一个BeanDefinition,将解析出来的信息放到BeanDefinition中。然后将BeanDefinition注册到Spring中。接下来我们就跟着源码,看看Spring是如何来实现的。分析源码实现首先我们debug一下,看看解析配置文件创建出来的BeanDefinition
2020-07-05 16:00:20
235
原创 Spring源码解析(2)——读取配置文件
回顾上篇在上篇文章环境搭建中,我们创建了一个测试模块,在测试模块中,我们只要创建一个xml配置文件,配置相关bean信息,我们就能从spring容器中获取到bean,然后调用bean里面的方法。相关代码如下:1、XML配置文件:<?xml version="1.0" encoding="ISO-8859-1"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3
2020-06-27 19:09:28
266
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人