微服务学习

1. 单体架构

->将业务的所有功能集中在一个项目中开发,打成一个包部署

优点: 架构简单,部署成本低

缺点: 耦合度高

2.分布式架构

->根据业务功能进行系统的拆分,每隔业务模块作为独立项目开发,成为一个服务

优点:降低服务耦合,有利于升级拓展

服务拆分注意事项

1.不同的微服务,不要重复开发相同业务

2.微服务数据独立,不要访问其他微服务的数据库(一个微服务对应一个数据库)

3.微服务可以将自己的业务暴露为接口,供其他微服务调用

微服务调用方式

1.基于RestTemplate发起的http请求实现远程调用

2.http请求做远程调用是与语言无关的调用,只要直到对方的ip/端口/接口路径/请求参数就行

提供者与消费者

服务提供者 : 一次业务中,被其他微服务调用的服务。(提供接口给其他微服务)

服务消费者 : 一次业务中,调用其他微服务的服务。(调用其他微服务提供的接口)

思考

服务A调用服务B,服务B调用服务C,那么服务B是什么角色呢?
->如果是A调B这个业务,那么B就是提供者 B调用C,那么B就是消费者(一个业务既可以是提供者也可以是消费者,根据业务而定)

nacos注册中心

  1. 服务注册中心诞生背景? (服务多了,需要统一管理,例如所有公司需要在工商局进行备案)

  2. 服务注册中心的选型?(社区活跃度,稳定性,功能,性能,学习成本)

  3. Nacos下载,安装(解压),配置(application.properties),启动(startup.cmd),访问(http://ip:port/nacos)

  4. 基于Nacos实现服务的注册?(添加依赖,服务配置,启动服务并检查)

  5. 基于RestTemplate实现服务的简易调用?(服务消费方调用服务提供方)

  6. 常见问题
    如何理解服务注册中心?(存储服务信息的一个服务)
    服务注册中心诞生的背景? (服务多了,需要对服务进行更好管理)
    市场上常用的注册中心?(Zookeeper,Eureka,Nacos,Consul)
    如何对注册中心进行选型?(社区活跃度,稳定性,功能,性能,学习成本)
    Nacos 是什么?(是Alibaba公司基于SpringBoo技术实现的一个注册中心,本质上也是一个web服务)
    Nacos 的基本架构?(Client/Server架构)
    Nacos 主要提供了什么核心功能?(服务的注册,发现,配置)
    Nacos 服务启动需要什么前置条件?(配置JDK的JAVA_HOME目录,安装MySQL5.7以上版本,配置连接的数据库)
    Nacos 服务单机模式,window平台下启动时的指令是什么?(startup.cmd -m standalone)
    实现Nacos服务注册需要添加什么依赖?(两个:web,discovery)
    实现Nacos服务注册时,必须做哪些配置?(服务名,假如是本机服务注册可以省略服务地址)
    Nacos如何检查服务状态?(通过心跳包实现,服务启动时会定时向nacos发送心跳包-BeatInfo)
    服务之间进行服务调用时,使用了什么API?(RestTemplate,用此对象之前要先创建这个对象并交给spring管理)

  7. 使用LoadBalancerClient这个对象实现对远程服务进行负载均衡方式的获取
    在这里插入图片描述

  8. 优化上图代码,使用@LoadBalanced注解进行远程服务调用(负载均衡)
    启动类
    在这里插入图片描述
    controller
    在这里插入图片描述
    9.Feign方式的远程调用

1.再使用方导入openfeign依赖
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2. 在启动类上添加@EnableFeignClients注解
 
3.定义Http请求API,基于此API借助OpenFeign访问远端服务(接口)

@FeignClient(name="sca-provider")//sca-provider为服务提供者名称
public interface RemoteProviderService{
    @GetMapping("/provider/echo/{string}")//前提是远端需要有这个服务
    public String echoMessage(@PathVariable("string") String string);
}
//其中,@FeignClient描述的接口底层会为其创建实现类

4. 创建FeignConsumerController中并添加feign访问
@RestController
@RequestMapping("/consumer")
public class FeignConsumerController {
    @Autowired
    private RemoteProviderService remoteProviderService;
    /**基于feign方式的服务调用*/
    @GetMapping("/echo/{msg}")
    public String doFeignEcho(@PathVariable  String msg){
        //基于feign方式进行远端服务调用(前提是服务必须存在)
        return remoteProviderService.echoMessage(msg);
    }
}

  1. 图解
    1)添加依赖
    在这里插入图片描述
    2)启动类上加注解
    在这里插入图片描述

3)定义接口
在这里插入图片描述
4)controller

在这里插入图片描述

注:服务熔断(fallbackFactory)

1.fallbackFactory这个属性在远程服务调用过程中,如果出现问题,会执行这个回调工厂接口对象
在这里插入图片描述2.自定义服务熔断式的本地类(解决方案)
在这里插入图片描述
3.yml配置
在这里插入图片描述

nacos 配置

1. 日志配置

  1. **nacos可以在不停机的情况下,对配置进行更改!**在生产环境上我们可能把我们的日志级别调整为 error 级别,但是,在系统出问题我们希望对它 debug 的时候,我们需要动态的调整系统的行为的能力,把日志级别调整为 debug 级别
  2. 不用注册中心的
    在这里插入图片描述
  3. nacos注册中心
    在这里插入图片描述

在这里插入图片描述

2.分组配置

在这里插入图片描述

在这里插入图片描述在这里插入图片描述

共享配置及读取

同一个namespace的多个配置文件中都有相同配置时,可以对这些配置进行提取,然后存储到nacos配置中心的一个或多个指定配置文件,哪个微服务需要,就在服务的配置中设置读取即可
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

缓存

在这里插入图片描述

双重校验

在这里插入图片描述

sentinel

概述

  1. Sentinel (分布式系统的流量防卫兵) 是阿里开源的一套用于服务容错的综合性解决方案。它以流量为切入点, 从流量控制、熔断降级、系统负载保护等多个维度来保护服务的稳定性。
    Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景, 例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。

  2. 官网地址
    https://github.com/alibaba/Sentinel/releases

快速入门

  1. 第一步
    在这里插入图片描述
    添加了sentinel限流依赖,此依赖添加后,项目会默认注入一个spring mvc拦截器,用户在发起请求时,通过这个拦截器对象对请求进行拦截,拦截的目的就是为了流控单位时间的请求是否超出了一定的阈值,超出阈值,请求则不再放行

  2. 修改配置文件
    在这里插入图片描述

  3. 写一个controller
    在这里插入图片描述

  4. 启动访问8180端口 http://localhost:8180/#/dashboard/flow/sca-provider
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    拦截器
    在这里插入图片描述

链路模式

链路模式只记录指定链路入口的流量。也就是当多个服务对指定资源调用时,假如流量超出了指定阈值,则进行限流。被调用的方法用@SentinelResource进行注解,然后分别用不同业务方法对此业务进行调用,假如A业务设置了链路模式的限流,在B业务中是不受影响的。现在对链路模式做一个实践

  1. 创建service业务
    在这里插入图片描述

  2. controller在这里插入图片描述

  3. 页面测试在这里插入图片描述
    在这里插入图片描述

这样的话所有的节点都会到sentinel_spring_web_context这个入口下,所以当创建订单和查询订单时,为了限流查询订单,需要配置文件
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述此时单链路被限流会显示500
在这里插入图片描述
可是这样的500异常不太友好,我们自己可以定义
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

定义web拦截器

在这里插入图片描述
在这里插入图片描述

sentinel降级

在这里插入图片描述

在这里插入图片描述
自定义限流,熔断等异常处理器
在这里插入图片描述为什么不调用底层的限流异常处理类
在这里插入图片描述

sentinel热点限流

何为热点?热点即经常访问的数据。比如:
商品 ID 为参数,统计一段时间内最常购买的商品 ID 并进行限制。
用户 ID 为参数,针对一段时间内频繁访问的用户 ID 进行限制。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

sentinel黑白名单

黑白名单规则(AuthorityRule)非常简单,主要有以下配置项:

资源名:即限流规则的作用对象
流控应用:对应的黑名单/白名单中设置的规则值,多个值用逗号隔开.
授权类型:白名单,黑名单(不允许访问)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

网关学习Gateway

概述:网关本质上要提供一个各种服务访问的入口,并提供服务接收并转发所有内外部的客户端调用,还有就是权限认证,限流控制等等。

快速入门

  1. pom添加依赖在这里插入图片描述
  2. 配置yml
    在这里插入图片描述
  3. 启动类

在这里插入图片描述

  1. 访问
    在这里插入图片描述注意:用网关访问服务,这样做的目的可以保护服务请求地址不被暴露在外边

负载均衡设计

为什么要负载均衡?
网关才是服务访问的入口,所有服务都会在网关层面进行底层映射,所以在访问服务时,要基于服务serivce id(服务名)去查找对应的服务,让请求从网关层进行均衡转发,以平衡服务实例的处理能力。

在这里插入图片描述
在这里插入图片描述

网关限流

  1. 在原有spring-cloud-starter-gateway依赖的基础上再添加如下两个依赖
    在这里插入图片描述
  2. 修改配置文件
    在这里插入图片描述
  3. 启动网关项目,检测sentinel控制台的网关菜单。
    启动时,添加sentinel的jvm参数,通过此菜单可以让网关服务在sentinel控制台显示不一样的菜单,代码如下。
-Dcsp.sentinel.app.type=1

在这里插入图片描述

  1. 项目启动后访问 Sentinel 控制台

在这里插入图片描述
假如没有发现请求链路,API管理,关闭网关项目,关闭sentinel,然后重启sentinel,重启网关项目
在这里插入图片描述
限流成功
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

可以基于自定义API维度限流(重点)

在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值