1、Spring Cloud和dubbo差异

  • 组件差异

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    dubbo:zookeeper+dubbo+springmvc/springboot
    通信方式:rpc
    注册中心:zookeeper,nacos
    配置中心:diamond(淘宝开发)

    spring cloud:spring+Netflix
    springcloud是基于springboot实现的
    通信方式:http restful
    注册中心:eureka,consul,nacos
    配置中心:config
    断路器:hystrix
    网关:zuul,gateway
    分布式追踪系统:sleuth+zipkin
  • 现状比较

    dubbo spring cloud
    背景 国内影响大 国外影响大 平手
    社区活跃度 低(现在又好了) cloud胜出
    架构完整度 不完善(dubbo有些不提供,需要用第三方,它只关注服务治理) 比较完善,微服务组件应有尽有。 cloud胜出
    学习成本 dubbo需要配套学习 无缝spring cloud胜出
    性能 高。(基于Netty) 低。(基于http,每次都要创建)。 此性能的损耗对大部分应用是可以接受的。而HTTP风格的API,是很方便的。用小的性能损耗换来了方便。 dubbo胜出

3、springcloud组件简介

  • Eureka:服务注册与发现,用于服务管理。
  • Feign: web调用客户端,能够简化HTTP接口的调用。
  • Ribbon:基于客户端的负载均衡。
  • Hystrix:熔断降级,防止服务雪崩。
  • Zuul:网关路由,提供路由转发、请求过滤、限流降级等功能。
  • Config:配置中心,分布式配置管理。
  • Sleuth:服务链路追踪
  • Admin:健康管理

4、Eureka

  • client: 拉取server注册表到本地;注册服务;初始化三个定时任务-心跳续约-定时拉取注册表-按需注册;发送下线(客户端停止时发送给server)

  • server:接受服务注册;接受服务心跳;服务剔除;服务下线;集群同步(启动时从peer拉取信息,2.将注册到自己的服务同步到peer)

  • eureka元数据

    • 标准元数据:主机名、ip、端口、健康信息,会被发布到注册表中,用于服务间调用
    • 自定义元数据:自定义key-value meta-map
  • eureka配置优化

    • server端优化

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      通过设置自我保护优化:
      如果服务少的话不开启自我保护,因为服务太少,如果只是故障两三个节点也会占比很大,很容易达到eureka自我保护阈值。
      如果服务多的话可以开启自我保护,这样可以有效防止网络波动带来的大面积心跳检测失败。
      开启true关闭false
      enable-self-preservation: false
      自我保护阈值设定:
      renewal-percent-threshold: 0.85

      剔除服务时间间隔,清理无效节点,默认60*1000毫秒,即60秒:
      自定义无效服务剔除间隔:
      eviction-interval-timer-in-ms: 1000

      关闭从readOnly读注册表:
      use-read-only-response-cache: false

      readWrite 和 readOnly 同步时间间隔:
      response-cache-update-interval-ms: 1000
    • client端优化

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      拉取注册表间隔:
      表示eureka client间隔多久去拉取服务器注册信息,默认为30秒,可以自定义注册表拉取间隔:
      registry-fetch-interval-seconds: 5

      心跳续约间隔:
      eureka客户端需要多长时间发送心跳给eureka服务器,表明他仍然或者,默认30秒,自定义心跳续约间隔:
      lease-renewal-interval-in-seconds: 10

      心跳过期时间:
      eureka服务器在接受到实力的最后一次发出的心跳后,需要等待多久才可以将此实力删除,自定义心跳过期时间:
      lease-expiration-duration-in-seconds: 10
    • 集群搭建

      • service-url配置url时,将所有url打乱配置,即不同的server中的url配置顺序不要一样,这样可以让节点被均匀访问。
      • eureka有效的服务集群只有三个,注册多个eureka服务无效,只会浪费资源。
    • 分区

      eureka提供了region和zone两个概念来进行分区,这两个概念均来自于亚马逊的AWS:

      • region:可以简单理解为地理上的分区,比如亚洲地区,或者华北地区,再或者北京等等,没有具体大小的限制。根据项目具体的情况,可以自行合理划分region。
      • zone:可以简单理解为region内的具体机房,比如说region划分为北京,然后北京有两个机房,就可以在此region之下划分出zone1,zone2两个zone。