Spring Cloud Alibaba的核心组件(简写)---Nacos~Dubbo(注册中心~微服务远程调用)

1.Nacos(注册中心,配置中心)

/*配置中心宕机了,还可以读到配置信息吗?*/

配置中心的数据可以在服务本地存储一份,所以配置中心宕机了,可以从本地内存读取。



/**服务发现与服务健康检查*/
      心跳机制(5秒一次心跳机制,15秒警告,30秒断除连接)
Nacos使服务更容易注册,并通过DNS或HTTP接口发现其他服务,Nacos还提供服务的实时健康检查,以防
止向不健康的主机或服务实例发送请求。


/*微服务配置中心如何感知配置中心的配置的变化?*/
1.4.x 版本中的 nacos 客户端会基于(长轮询机制)从 nacos 获取配置信息。这个轮询可以这样去理解,

我们骑着共享单车去火车站买票,但是票卖完了,一种方式是直接返回(这种方式称之为短
轮询)。
还有一种方式在火车站的椅子上等一会,看看是否还会放票,是否有人会退票等。
那这种机制就是长轮询(nacos 默认长轮训的时间为 30 秒,就是服务会每隔 30 秒去访问一次 Nacos)

2.Sentinel(限流,熔断降级)

/**你了解哪些限流算法?**/
计数器,令牌桶,漏桶,滑动窗口算法。
    

/**Sentinel的功能特性:*/
流量控制
熔断降级
系统自适应保护    



/**Sentinel** **如何对请求进行限流?*/    /**两种限流方式(链路限流、热点数据限流)*/
可以基于 Spring MVC 拦截器以及 aop 方式对请求进行限流(链路限流、热点数据限流)。
    
当请求传递到服务端后,服务器可以调用拦截器对请求进行拦截,判定此请求是否允许放行,
请求量太大可能就要被限制了。当然在热点数据限流上还可以通过 AOP 方式进行限制。


    
/**Sentinel 限流的阈值类型有哪些? */
QPS(每秒请求次数),线程数(不准确,应用相对较少)





/**对热点数据限流,底层基于什么机制去实现?**/ 
AOP (@SentinelResuource 注解定义切入点方法,然后在 SentinelResourceAspect 切
面中基于限流策略,进行限流。)






/**Sentinel 出现限流时的异常类型是什么? */
BlockException(限流的异常类型-父类类型)?


    
/**Sentinel 中默认的异常处理器是什么? */
DefaultBlockExceptionHandler ,假如默认的异常处理器不能满足我们需求时,可以自
己定义异常处理器,直接或间接继承 BlockExceptionHandler。

3.Gateway(网关)

/**为什么要使用** **API** **网关?**/

1)统一 url 访问(Restful,RPC):一个页面中的数据可能来自多个服务

2)服务保护(不对外暴露内部服务的真实地址,同时可以对外部请求进行校验)

3)统一身份认证(单点登陆系统-不用每个服务都编写一个登陆认证模块-公园的通票)

4)统一跨域设计(跨域可以在客户端配置,也可以在服务端配置-例如 nginx,gateway,…) 

5)限流降级(通过 Sentinel 实现限流和降级)

6)黑白名单(通过全局过滤器 GlobalFilter 去实现对请求的统一校验)




/**网关都可以配置什么? */
1)动态路由(uri,predicate,filter) 
2)统一身份认证
3)负载均衡(Ribbon)
4)黑白名单设计(自定义) 5)限流熔断(Sentinel)
6)跨域等
/**SpringCloud Gateway 处理请求的基本流程?*/

1)客户端向 Spring Cloud Gateway 发出请求。
2)基于 GatewayHandlerMapping 调用谓词 predicates(predicates)的集合判定请求与  
路由(Routers)是否匹配,不匹配则抛出异常。   [9000 比对9000]
3)将请求其发送到 Gateway Web Handler。此对象基于路由配置调用过滤链中的过滤器
(也就是所谓的责任链模式)进一步的处理请求。  [判断9001与9002分别指向那个业务]
4)将请求转发到具体的服务。
    
/**网关中谓词(Predicate)的作用是什么?*/    
    这里的 Predicate 都是基于 Jdk8 中的 Predicate 接口实现的,用于对请求 url、请求数
据进行校验,符合规则再交给过滤器去处理。
    
/**你知道哪些谓词对象(Predicate)对象?*/    
    1) Path 相关的 (请求路径是否匹配)
	2) 日期时间相关的 (请求时间的限制)
	3) IP 相关的 (ip 地址的限制)
	4) Cookie 相关的 (基于 Cookie 中数据的限制)
	5) 请求参数相关的
	6) 请求方式相关
	7) 请求头相关的
	8) 上传文件大小相关的
/**网关中的过滤器是如何分类的?*/
    1)全局过滤器(不需要配置),作用于所有路由。
	2)局部过滤器(这个需要针对具体路由进行配置),只作用于具体路由。
/**你知道 Gateway 中的哪些过滤器?*/    
    1) 负载均衡相关的
	2) 请求转发相关的
	3) 限流相关的
	4) 请求前缀、后缀相关的

4.Seata (分布式)

/**Seata 是什么?**/ 

Seata 是 Alibaba 开源的一款分布式事务解决方案,致力于在微服务架构下提供高性能和
简单易用的分布式事务服务。




/**Seata 提供了哪些分布式事务方案?*/

1) AT 模式(是 Seata 主推的分布式事务解决方案,对业务无侵入,真正做到业务与事务分离)
2) TCC 模式(对业务代码侵入性太强。没有 AT 模式全局锁,加锁逻辑需要根据业务自行实现。因此 TCC 的性能会比 AT 模式更好)
3) SAGA 模式(Saga 模式的正向服务和补偿服务都需要手动实现,因此有很强的侵入性。能保证隔离性,不容易进行并发控制)
4) XA 模式 (利用事务资源实现对 XA 协议的支持,是传统分布式强一致性的解决方案,性能较低,在实际业务中使用较少。)




/**什么是 AT 模式事务?*/

AT(Automatic Transaction) 全自动事务,是 Seata 提供的一种事务方案。采用了简单易用且无侵入的事务处理机制,[通过自动生成反向 SQL 实现事务回滚]。




/**Seata 的三大组件是什么?*/

1) 第一个是事务协调者(TC),它的作用是维护全局和分支事务的状态,驱动全局事务提
交或者回滚,这正是前面所说 2PC 或者 3PC 方案时提到的事务协调者组件的具体实
现,TC 由 SEATA 官方提供。
2) 第二个是事务管理器(TM),事务管理器用于定义全局事务的范围,开始全局事务提交
或者回滚全局事务都是由 TM 来决定。
3) 第三个是资源管理器(RM),他用于管理分支事务处理的资源,并且报告分支事务的状
态,并驱动分支事务提交或者回滚


    /**Seata 事务协调器(TC)的作用是什么?*/
    协调各个模块的执行,例如:
    - 启动全局事务。 
    - 收集各模块第一阶段的运行状态。 
    - 向各个模块发送第二阶段提交或回滚指令。
    /**Seata 事务管理器(TM)的主要作用是什么?*/
    负责主要全局事务决策,例如:
    - 向协调器申请启动全局事务。 
    - 收集所有模块第一阶段的运行状态,并对全局事务的成功或失败进行决策。 
    - 将决策结果提交给事务协调器。
    /**资源管理器(RM)的作用是什么?*/
    在各个模块中与协调器通信,并控制第二阶段的执行: 
    - 在每个模块中向协调器注册分支事务。 
    - 向协调器提交第一阶段的执行状态。 
    - 接收协调器第二阶段的指令,控制执行二阶段的提交或回滚。
/**AT 事务中数据源代理对象作用是什么?*/    
     自动保存事务回滚日志。 
     第二阶段提交时,删除回滚日志。
     第二阶段回滚时,执行根据回滚日志回滚数据,并删除日志。
    

5.Dubbo微服务的远程调用程序

Dubbo是一套RPC框架。既然是框架,我们可以在框架结构高度,定义Dubbo中使用的
通信协议,使用的序列化框架技术,而数据格式由Dubbo定义,我们负责配置之后直接通过客户端调用服务端代码。

可以说Dubbo就是RPC概念的实现

Dubbo是SpringCloudAlibaba提供的框架能够实现微服务相互调用的功能!
1.1). 什么是RPC

RPC是Remote Procedure Call的缩写 翻译为:远程过程调用
目标是为了实现两台(多台)计算机\服务器,相互调用方法\通信的解决方案
RPC只是实现远程调用的一套标准
该标准主要规定了两部分内容

1.序列化协议
	通信协议指的就是远程调用的通信方式
	实际上这个通知的方式可以有多种
	例如:写信,飞鸽传书,闪送等等
2.通信协议
	序列化协议指通信内容的格式,双方都要理解这个格式
	上面的图片中,老婆给老公发信息,一定是双方都能理解的信息
	发送信息是序列化过程,接收信息需要反序列化

3.Dubbo对协议的支持
	3.1) RPC框架分通信协议和序列化协议
	3.2) Dubbo框架支持多种通信协议和序列化协议,可以通过配置文件进行修改
	3.3) -Dubbo支持的通信协议
			dubbo协议(默认)
			rmi协议
			hessian协议
            http协议
            webservice
	3.4) -支持的序列化协议
			hessian2(默认)
			java序列化
			compactedjava
			nativejava
			fastjson
			dubbo
			fst
			kryo
	3.5) Dubbo默认情况下,支持的协议有如下特征
		采用NIO单一长链接
		优秀的并发性能,但是处理大型文件的能力差
		Dubbo方便支持高并发和高性能

1.Dubbo的注册发现流程

1.首先服务的提供者启动服务时,将自己的具备的服务注册到注册中心,启动包括当前提供者的ip地址和端口号等信息,Dubbo会同时注册该项目提供的远程调用的方法

2.消费者(使用者)启动项目,也注册到注册中心,同时从注册中心中获得当前项目具备的所有服务列表

3.当注册中心中有新的服务出现时,会通知已经订阅发现的消费者,消费者会更新所有服务列表

4.RPC调用,消费者需要调用远程方法时,根据注册中心服务列表的信息,只需服务名称,不需要ip地址和端口号等信息,就可以利用Dubbo调用远程方法了

2.总体架构 + Dubbo 核心部件

  • Provider:暴露服务的提供方,可以通过 jar 或者容器的方式启动服务。

  • Consumer:调用远程服务的服务消费方。

  • Registry:服务注册中心和发现中心。

  • Monitor:统计服务和调用次数,调用时间监控中心。(Dubbo 的控制台页面中可以显示,目前只有一个简单版本。)

  • Container:服务运行的容器。

  • [图解]

  •  

猜你喜欢

转载自blog.csdn.net/m0_71202849/article/details/126858348