SpringCloud学习文档笔记

1.SpringCloud服务调用方式有几种?
  1.Feight声明式客户端工具调用调用  
  2.RestTemplate调用  
    注意:需要@bean初始化RestTemplate对象 ,默认为负载均衡,故初始化需要加@LoadBalanced
    初始化RestTemplate对象示例:
        @Bean @LoadBalanced
        RestTemplate restTemplate(){
            return new RestTemplate();
        }
    调用方式示例: String memberUrl="http://app-itmayi-member/getMember";  //http"//+服务名/+请求地址
                  restTemplate.getForObject(memberUrl,String.class); //请求地址 , 返回类型
                  
2.什么是Eureka自我保护机制? 什么环境下开启自我保护机制?    如何开启禁止?
      1.自我保护机制:默认情况下EurekaClient定时向EurekaServer端发送心跳包,如果EurekaServer在一定时间内没有收到
                     EurekaClient发送的心跳包,便会从注册列表剔除该服务(默认90秒)    
                     但是在短时间丢失大量的服务实例心跳,这时候EurekaSever会开启自我保护机制,不会去剔除该服务.
      2.作用:为了防止EurekaClient可以正常运行,但是与EurekaServer网络不通的情况下
               ,EurekaServer将EurekaClient服务进行剔除,开启后便不会剔除.
      3.建议在本地环境禁止自我保护机制(防止测试关闭Client,但是依然在注册列表,测试出现错误),在生产环境开启自我保护机制.
      4.开启禁止 Application.yml配置如下: false->关闭 true->开启  eureka.server.enable-self-preservation=false
      
3.EurekaServer服务端常见配置 application.properties文件配置信息
        #指定运行端口
        server.port=8001
        #指定服务名称
        spring.application.name=eureka-server
        #指定主机地址
        eureka.instance.hostname=localhost
        #指定是否要从注册中心获取服务(单个注册中心不需要开启,集群需要开启)
        eureka.client.fetch-registry=false
        #指定是否要注册到注册中心(单个注册中心不需要开启,集群需要开启)
        eureka.client.register-with-eureka=false
        #关闭保护模式
        eureka.server.enable-self-preservation=false
        #注册到另一个Eureka注册中心(搭建集群使用,多个,逗号分开)  
        eureka.client.service-url.defaultZone=http://127.0.0.1:8100/eureka/,http://localhost:9100/eureka/
        #注册中心添加认证,需要SpringSecurity依赖包 配置SpringSecurity登录用户名和密码
        spring.security.user.name=root
        spring.security.user.password=123456

3.EurekaClient客户端常见配置 application.properties文件配置信息    
        #指定运行端口
        server.port=8101
        #服务名称
        spring.application.name=eureka-client
        #获取注册实例列表
        eureka.client.fetch-registry=true
        #注册到Eureka的注册中心
        eureka.client.register-with-eureka=true
        #配置注册中心地址
        #连接单个 eureka.client.service-url.defaultZone=http://localhost:8001/eureka/
        #心跳检测和续约时间
        #Eureka服务删除实例之前等待的时间(秒)  如90秒没有收到心跳检测,则剔除服务
        eureka.instance.lease-expiration-duration-in-seconds=90
        #Eureka客户端需要发送心跳的间隔(秒) 30秒发送一次
        eureka.instance.lease-renewal-interval-in-seconds=30
        #连接到Eureka集群 eureka.client.service-url.defaultZone=http://localhost:8100/eureka/,http://localhost:9100/eureka/
        #连接带有认证的注册中心  连接格式 http://${username}:${password}@${hostname}:${port}/eureka/
        #eureka.client.service-url.defaultZone=http://root:123456@localhost:8004/eureka/
        #feign客户端建立连接超时时间
        feign.client.config.default.connect-timeout=10000
        #feign客户端建立连接后读取资源超时时间
        feign.client.config.default.read-timeout=10000
        #开启Hystrix断路器
        feign.hystrix.enabled=true
        
4.获取注册中心服务列表信息方法
        1.引入接口    @Autowired   private DiscoveryClient discoveryClient;
        2.discoveryClient调getInstances()方法,参数为服务名称. 例: discoveryClient.getInstances("consul-member");
        
5.Ribbon本地负载均衡客户端与Nginx服务器端负载均衡的区别?应用场景?
        Ribbon本地负载均衡,原理:在调用接口的时候,会在Eureka注册中心上获取注册信息服务列表,获取到之后,缓存在JVM本地
              然后使用本地实现RPC远程调用技术进行调用,既是客户端实现负载均衡.
        Nginx 是服务器负载均衡,客户端所有请求都会交给Nginx,然后再由Nginx实现转发请求,既负载均衡是有服务器端实现.
        应用场景:
        Ribbon本地负载均衡适合在微服务RPC远程调用,比如dubbo ,springcloud
        Nginx服务器负载均衡 适合于针对与服务器端 比如tomcat ,jetty

6.服务雪崩效应?
        解释:默认情况下tomcat只有一个线程池去处理客户端发送的所有服务请求,这样的话在高并发的情况下,如果客户端
        所有的请求堆积到同一个服务接口上,就会产生tomcat的所有线程去处理该服务接口,可能会导致其他服务接口无法访问,
        就会导致其他服务接口访问的时候,产生延迟和等待.
        
7.Hystrix服务保护框架,在微服务中Hystrix能够为我们解决哪些问题?
        1.断路器
        2.服务降级
        3.服务熔断
        4.服务隔离机制
        5.服务雪崩效应 连环雪崩效应 如果严重的话,可能会导致整个微服务接口无法访问,所有服务器都会瘫痪.

8.基于Hystrix解决服务雪崩效应原理:
        服务降级
            1.在高并发的情况下,防止用户一直等待.使用服务降级方式(返回一个友好的提示直接给客户端,不会去处理请求,调用fallBack)
                  目的是为了用户体验.
            2.秒杀-----当前请求人数过多,请稍后尝试. (在tomcat中没有线程进行处理客户端请求的时候,不应该让用户一直转圈等待)
            3.如果调用其他接口超时的时候(默认是1秒时间),如果在一秒钟没有及时响应返回的话,(默认情况下业务逻辑是可以执行的)
                  ,则直接执行服务降级.
        服务隔离机制
            服务熔断目的是为了保护服务,在高并发情况下,如果请求达到了一定的极限(可以自己设置阈值).如果流量
            超出了设置的阈值,自动开启保护服务功能,使用服务降级方式返回友好提示.熔断机制和服务降级一起使用.
        服务熔断
            隔离方式线程池和信号量隔离.
            线程池隔离:每个服务接口都有自己独立的线程池,每个线程池互不影响,缺点:CPU占用率非常高.不是所有
                       的接口都去采用线程池隔离,核心关键接口.

9.SpringCloud Config 分布式配置文件中心
     1.为什么要使用分布式配置中心?
          产生的背景:在微服务如果使用传统的方式管理配置文件,配置文件管理器非常复杂,如果生产环境配置文件,可能
                     需要发生改变的时候,重新打war包,重新读取配置信息在jvm内存中
     2.什么是分布式配置中心?
          在微服务当中使用同一个服务器管理所有服务配置文件信息,能够实现后台可管理,当服务器正在运行的时候,
          如果配置文件需要发生改变,可以实现不需要重启服务器实时更改配置文件信息.
     3.有哪些分布式配置中心框架?
          1.阿波罗携程写分布式配置中心,有图形界面可管理配置文件信息.配置文件信息存放在数据库里面.
          2.SpringCloud Config没有后台可管理分布式配置中心,配置文件信息存放在版本控制器里面.
          3.使用Zookeeper实现分布式配置中心,持久节点+事件通知          
     4.分布式配置中心需要哪些组件?
          1.Web管理系统--后台可以使用图形界面管理配置文件SpringCloud Config没有图像化管理配置文件
          2.存放分布式配置文件服务器(持久存储服务器)--使用版本控制器存放配置文件信息,使用git环境
          3.ConfigServer缓存配置文件服务器(临时缓存存放)
          4.ConfigClient 读取ConfigServer配置文件信息.

10.搭建分布式配置中心 SpringCloud Config
    1.搭建git环境, 目的:持久化存储配置文件信息 采用码云
       git环境上文件夹以项目进行区分
       member_config会员服务配置文件
       order_config订单服务配置文件
    2.公司项目中环境是如何区分?
       dev   开发环境
       sit   测试环境
       pre   预发布环境
       prd   准生产环境
       uat   验收环境
    3.在Git环境上创建配置文件命名规范
      会员服务---服务名称---member:  服务名称-环境.properties    member-dev.properties
    4.默认情况下不能及时的获取实时变更的配置文件信息
      springcloud分布式配置中心,可以采用手动刷新或者自动刷新
            手动刷新--需要人工调用接口,读取最新配置文件(监控中心) 人工调用/actuator/refresh进行刷新(post请求)
            自动刷新--消息总线进行实时通知---springbus
        
11.网关API(接口) Gateway(网关) ---接口网关注意: 接口没有界面
   1.网关概念:相当于客户端请求统一先请求到网关服务器上,在由网关服务器进行转发到实际服务地址上,类似Nginx
   2.网关作用:网关可以拦截客户端所有请求,对该请求进行权限控制,负载均衡,日志管理,接口调用监控等
   3.网关和过滤器区别是什么?
        网关是拦截整个微服务所有请求,过滤器是拦截单个tomcat服务器请求
   4.Nginx与Zuul区别?
        相同点: Nginx和Zuul都可以实现负载均衡,反向代理,过滤请求,实现网关效果.
        不同点: Nginx采用C语言编写,Zuul采用java语言编写. Zuul负载均衡实现:采用ribbon+eureka实现本地负载均衡
                Nginx负载均衡实现:采用服务器端实现负载均衡.Nginx比Zuul功能会更加强大,因为Nginx整合一些脚本语言(Nginx+Lua)可以实现一些其他功能.
                Nginx适合于服务器负载均衡 + 也可以实现网关. Zuul适合微服务中实现网关,而且使用技术是java语言
                Nginx作用实现反向代理,Zuul对微服务实现网关拦截. 标配最好Nginx+Zuul实现网关.
                
   4.接口什么背景下产生?  在面向服务架构和微服务背景下产生,目的都是为了解耦,RPC远程调用中产生
   5.接口如何分类?
       开放接口:其他机构合作伙伴进行调用(必须在外网访问) 蚂蚁开放平台 ,微信公众号开发
                需要通过appid+appsocet生成accessToken进行通讯.对接支付开发,微信开发,目的可以
                授权一些接口权限OAuth2.0协议方式 如:第三方联合登录
       内部接口:一般只能在局域网中进行访问,服务与服务调用之间关系都在同一个微服务系统中,目的是为了
                保证安全问题
    
12.设计一套公司项目的接口,你会如何设计?
    接口权限(开放接口(遵循OAuth2.0协议)|内部接口),考虑幂等性,安全性(Https) 防止篡改数据(验证签名),
    使用网关拦截接口实现黑名单和白名单 , 接口使用http协议+json格式restful风格目的为了跨平台.
    考虑高并发 对接口服务实现保护.服务降级熔断隔离等.最后使用API统一管理平台 Swagger UI


        

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章