跟着尚硅谷学习微服务

1、服务治理

springcloud封装了Netflix的Eureka模块来实现服务治理
在传统的rpc远程调用框架中,管理每一个服务与服务之间依赖关系比较复杂,所以需要使用服务治理,可以实现服务调用、负载均衡、容错等,实现服务发现于注册。

Eureka采用CS的设计架构,Eureka Server作为服务注册功能的服务器,它是服务注册中心。而系统中的其他微服务,使用Eureka的客户端连接到Eureka Server并维持心跳连接。这样系统的维护人员就可以通过Eureka Server来监控系统中各个微服务是否正常运行。

在服务注册与发现中,有一个注册中心,当服务器启动的时候,会把当前自己的服务器的信息,比如 服务地址 通讯地址等以别名方式注册到注册中心上。另一方(消费者),以该别名的方式去注册中心上获取到实际的服务通讯地址,然后再实现本地RPC调用。

RPC远程调用框架核心思想:在于注册中心,因为使用注册中心管理每个服务与服务之间的一个依赖关系(服务治理概念)。在任何rpc远程调用框架中,都会有一个注册中心(存放服务地址相关信息(接口地址))

Eureka包含两个组件:

Eureka Server提供服务注册服务

各个微服务节点通过配置启动后,会在Eureka Server中进行注册,这样Eureka Server中的服务注册表将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观看到。

Eureka Client(做为微服务的一部分)通过注册中心进行访问

@EnaleEurekaClient不写在主启动类上,也能生效

是一个java客户端,用于简化Eureka Server的交互,客户端同时也内置一个使用轮询(round-robin)负载算法的负载均衡器。在应用启动后,将会向Eureka Server发送心跳(默认周期30s)。如果Eureka Server在多个心跳周期内没有接受到某个节点的心跳,EurekaServer将会从服务注册表中把这个服务节点移除(默认90s)。

Eureka是spring社区出的;nacos是阿里出的

服务注册:将服务信息注册进注册中心

服务发现:从注册中心上获取服务信息

实质:存key服务名,取value调用地址 

注册流程:

1、先启动Eureka注册中心

2、启动服务提供者的服务

3、服务提供者的服务会把自身信息(比如服务地址)以别名形式注册进eureka

4、消费者服务在需要调用接口时,使用服务别名去注册中心获取实际的RPC远程调用地址

5、消费者在获得调用地址后,底层实际是利用HttpClient技术实现远程调用

6、消费者在获得服务地址后会缓存在本地JVM内存中,默认每间隔30s更新一次服务调用地址。

Eureka已经停更

2、负载均衡

Ribbon

  Ribbon和Eureka整合后,消费者可以直接调用服务,而不用关心地址和端口,且还有负载均衡的功能。 

SpringCloud Ribbon是基于Netflix Ribbon实现的一套客户端 负载均衡工具

Ribbon是Netflix发布的开源项目,主要功能是提供客户端的负载均衡算法和服务调用。Ribbon客户端组件提供一系列完善的配置项如连接超时、重试等。简单的说,就是在配置文件中列出Load Balancer后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询、随机连接等)去连接这些机器。我们很容易使用Ribbon实现自定义的负载均衡算法。

LB负载均衡(Load Balance)

将用户的请求平摊分配到多个服务上,从而达到系统的HA(高可用)。

Nginx是服务器负载均衡,客户端所有的请求都交给Nginx,然后由Nginx实现转发请求。

Ribbon是本地负载均衡(客户端负载均衡),在调用微服务接口的时候,会在注册中心桑获取注册信息服务列表之后缓存到JVM本地,从而在本地实现RPC远程服务调用的技术。

 集中式LB:在服务的消费方和提供方之间使用独立的LB设施(可以是硬件F5,也可以是软件nginx),由设施负责把访问请求 通过某种策略转发至服务的提供方。

 进程内LB:将LB逻辑集成到消费方,消费方从注册中心获知有哪些地址可用,然后自己再从这些地址中选择出一个合适的服务器。如Ribbon,它只是一个类库。      

需要在消费者方集成Ribbon 

Ribbon工作分两步走

1、优先选择在同一区域内,负载较少的Eureka Server

2、根据用户指定的策略,从server取到的服务注册列表中选择一个地址 

用法:负载均衡@LoadBalance + restTemplate调用 

 

 负载均衡算法      限流算法

Ribbon核心组件IRule

IRule:根据特定算法从服务列表中选取一个要访问的服务。

出厂默认轮询规则

自定义的IRule不能放在@ComponetScan注解扫描的包和子包下面!!!

主启动类:@RibbonClient(name = "CLOUD-PAYMENT-SERVICE", configuration = MySelfRule.class)

轮询负载均衡算法:rest接口第几次请求数%服务器集群总数量=实际调用服务器的位置下标,每次服务重启之后接口计数从1开始。

通过discoveryClient获取服务器数量   + @EnableDiscoveryClient

GUC 

3、服务调用

feign是一个声明式的web服务客户端,让编写web服务客户端变得非常容易,只需要创建一个接口,并在接口添加注解。

Feign旨在让编写java Http客户端变得更容易。

Feign集成了Ribbon,利用Ribbon维护服务列表信息,并且通过轮询实现客户端的负载均衡。 

 OpenFeign默认等待1秒钟,超过后报错。

设置OpenFeign的超时时间

Feign提供了日志打印功能,可以通过配置来调整日志级别,从而了解Http请求的细节。

(对Feign接口的调用情况进行监控和输出

 

4、服务降级

Hystrix  -后面框架借鉴和抄作业的必备良药

分布式系统面临的问题:

复杂分布式系统结构中的应用程序有数十个依赖关系,每个依赖关系在某个时候将不可避免的失败

Hystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统里,许多依赖会不可避免的调用失败,如超时、异常等。Hystrix能够保证在一个依赖出问题的情况下,不会导致整个服务失败,避免级联故障,以提高分布式系统的弹性。

  “断路器”本身是一种开关装置,当某个服务单元发生故障后,通过断路器的故障监控(类似熔断保险丝),向调用方返回一个符合预期的、可处理的备选响应(Fall Back),而不是长时间的等待,或者抛出调用方法无法处理的异常。这样就保证了服务调用方的线程不会被长时间、不必要的占用,从而避免故障在分布式系统中的蔓延,乃至雪崩。

1、fallback服务降级

2、break服务熔断

3、flowlimit服务限流

JMeter高并发压测后卡顿:springboot默认集成tomcat,tomcat默认的工作线程数被打满了,没有多余的线程来分解压力和处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值