• 读书笔记-springcloud微服务分布式架构


    • 业务架构

    • 后端应用又可分为三类,分别为基础服务类应用、提供服务类应用、消费服务类应用。基础服务类应用包括本微服务架构的注册中心Eureka以及一些微服务管理类组件。提供服务类应用是微服务架构中的提供者,即提供接口供其他程序调用的程序。消费服务类应用就是调用提供者接口进而实现业务的程序,在微服务程序中称为消费者。

    • 应用架构图

    • 技术架构图

    • 数据库架构图

    • 项目代码规范管理: Sonar静态代码检查工具

    • 敏捷开发框架: Scrum 用于团队协作管理

    • Eureka常见问题
      Eureka 原理介绍

      1. Eureka 包含两个组件:Eureka Server 和 Eureka Client。我们项目开
        发中的 Provider(服务提供者)和 Consumer(服务消费者)都属于
      2. Eureka Client。
    • CI(Continuous Integration),也就是持续集成,每当提交代码时,构建就会自动被触发

    • Jenkins可以实现自动化构建,极大地节省了工作量。普通任务简单灵活,Pipeline任务适合多个任务间依赖关系比较大的情况

      Eureka Client 启动时,会向 Eureka Server 注册自己的信息(例如网
      络信息),Eureka Server 会存储该服务的信息。并且 Eureka Client 会
      周期性地向 Eureka Server 发送心跳(默认周期为 30 秒)以续约自己
      的信息。如果 Eureka Server 在一定时间内没有接收到某个 Eureka
      Client 的心跳,Eureka Server 将会注销该微服务节点(默认 90 秒)。
      3. Eureka Client 启动后会从 Eureka Server 中获取注册节点的信息,并
      缓存在本地。在这之后,即使所有的 Eureka Server 节点都宕掉,服务
      消费者依然可以使用缓存中的信息找到服务提供者。

    在开发过程中,我们常常希望 Eureka Server 能够迅速地踢出已关停的节点,但
    是由于 Eureka 自我保护模式,以及心跳周期长的原因,常常会遇到已经停止了
    服务,但是注册中心还是显示已注册状态。解决方法如下:
    (1) Eureka Server 端:配置关闭自我保护,并按需配置 Eureka Server 清理无
    效节点的时间间隔
    配置示例:
    eureka:
    server:
    enable-self-preservation: false #设置为 false,关闭自我保护
    eviction-interval-timer-in-ms: 4000 #清理间隔,默认单位毫秒
    (2) Eureka Client 端:配置开启健康检查,并按需配置续约更新时间和到期时
    间。
    eureka:
    instance:
    lease-expiration-duration-in-seconds: 5 #续约更新时间间隔,单位为秒
    lease-renewal-interval-in-seconds: 5 #续约到期时间,单位为秒

    • 给eureka server 配置用户名密码
    security:
      basic:
        enabled: true
      user:
        name: root
        password: 123456
    添加依赖
            <dependency> 
                <groupId>org.springframework.boot</groupId> 
                <artifactId>spring-boot-starter-security</artifactId>
            </dependency>
    

    微服务想要注册到Eureka Server上也必须指定用户名和密码,否则启动会报异常,将无法正常注册
    注册端要加上密码:

    eureka:
      client:
        service-url:
          defaultZone: http://root:123456@localhost:7776/eureka/
    
    • Fegin常见问题
      一. 第一次调用失败
      Feign 和 Ribbon 在整合了 Hystrix 后,可能会出现首次调用失败的问题。造成该问题的原因为 Hystrix 默认的超时时间是 1 秒,如果超过这个响应时间,
      将会自动进入 fallback 代码。而首次请求往往会比较慢,响应时间很可能就大于 1秒而直接进入容错处理
      解决方案有三种:
      1.Hystrix 的超时时间改为 10 秒
      2.禁用 Hystrix 的超时时间
      3.直接禁用 feign 的 hystrix,该做法不推荐使用
      二. 注解使用问题
      1.不能 直接使用组合注解 @ GettingM app,要用@RequestMapping(value = "/user /{id}", method = RequestMethod.GET)
    1. @ PathVariable 注解注意: FeignClient 接口中,如果使用到@PathVariable ,必须指定其 value
    • Hystrix: 避免发生雪崩效应
      如何容错:
      1. 超时重试: 请求失败的同时再次自动发起请求
      2. 熔断器: 如果请求出现异常,所有的请求都会直接返回而不会等待或阻塞
        熔断器还有一种半开的状态,当熔断器发现异常后会进入半打开状态,此时会定时接受一个请求来检测系统是否恢复,如果请求调用成功,代表系统已经恢复正常,
        就会关掉熔断器,否则继续打开
      3. 限流
    • SpringCloud默认已经为Feign整合了Hystrix,只要Hystrix在项目中,使用Feign就会默认使用熔断器处理所有的请求
    • Hystrix常见问题
    • 容错可视化监控
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-hystrix</artifactId>
                <version>1.3.5.RELEASE</version>
            </dependency>
    

    加上@EnableCircuitBreaker注解
    先访问http://localhost:8080/login,再访问/hystrix.stream
    然后会不断地ping

    只有先访问服务中的任意接口,再访问/hystrix.stream 端点才会显示出对应接口的监控数据

    • 使用Hystrix Dashboard实现可视化监控
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
            </dependency>
    

    启动类加上@EnableHystrixDashboard
    然后访问http://localhost:7100/hystrix


    需要在输入url中输入另外一个项目的监控地址才能显示出图形
    eg: 图形化监控是http://localhost:9999/hystrix 然后输入http://localhost:7100/hystrix.stream 才能显示出监控状态

    • 分布式日志处理
      接口监控: Sleuth
  • 相关阅读:
    redis 持久化RDB、AOF
    进程、线程、协程
    nginx 常用配置
    Redis详解(一)
    Nginx(一)
    docker compose
    练习1——排序
    8万行的insert数据,Ctrl+c、Ctrl+v后心态崩了(如何在Linux下对MySQL数据库执行sql文件)
    Ubuntu使用+Thinkphp5学习——20(html文件中代码注释掉,但是runtime/temp中的php文件仍然存在)
    Ubuntu使用+Thinkphp5学习——19(新增用户报错strip_tags() expects parameter 1 to be string, array given)
  • 原文地址:https://www.cnblogs.com/Baronboy/p/14169483.html
Copyright © 2020-2023  润新知