Spring cloud 学习小记

418 阅读5分钟

基础

集中式架构

  所有功能全部都在一个项目中,可以说是最常见的项目。好处是简单,没有那么多花里胡哨的操作,主要是在CRUD。缺点是高耦合(不利于维护)。

垂直拆分

  将项目中不同的功能独立拆分出来(用户模块、订单模块、支付模块......),最终合并到一起。可以很好的解耦,而且可以针对某个模块去优化。缺点是因为模块间相互独立,会存在很多重复操作。

分布式服务

  将核心业务抽取出来,作为独立的服务,系统间相互调用,形成服务中心。优点是代码复用性高,开发效率高。缺点是服务间相互调用,逻辑复杂。

流动计算架构(SOA)

注册中心

  所有服务在注册中心注册(提供什么服务,IP和端口是什么),当要调用服务时,通过注册中心调用。所有服务由注册中心管理,也就是说注册中心是服务治理的角色。这种架构就是面向服务的架构。优点是管理服务较轻松,缺点是服务间有依赖关系,一旦某个环节出错会有较大的影响。

微服务架构

  每个服务对应着唯一的业务能力,拆分的很小(拆的太小的话会带来运维的复杂度)。强调服务与服务之间的独立性(独立数据源、独立开发、独立部署......)。每个服务都可以当成独立的组件。

服务调用方式

  各种服务之间,相互调用的方式。

  • RPC
    • 远程过程调用。自定义数据格式。使用原生TCP建立长链接,速度快效率高。dubbo框架就是基于RPC。
  • HTTP
    • 基于TCP的协议,有规定的数据传输格式。对服务的提供和调用方没有任何技术限定,自由灵活。Spring Cloud就是基于HTTP。

HTTP客户端工具

  用来处理请求和响应的工具。

  • Spring的RestTemplate qq对HTTP客户端进行封装,而且可以对JSON序列化和反序列化。它支持的HTTP客户端有HttpClientOKHttpHttpUrlConnection

Spring Cloud

Eureka

介绍

  服务的注册中心,它自己也是一个服务(可以是集群)。注册中心与服务之间有一个心跳机制,服务一段时间(默认30秒)会发一个消息给注册中心。如果注册中心发现服务很久没发(默认90秒),就会认为该服务出故障,将它剔除。

  • 提供者d'w
    • 启动后向Eureka注册自己的信息(提供什么服务、地址)
  • 消费者ss
    • 向Eureka订阅服务,Eureka会将对应服务的所有提供者地址列表(定期更新)发送给消费者。

Eureka配置

  配置Eureka server和client步骤大致3步:

  • 添加依赖
    • server 添加 spring-cloud-starter-netflix-eureka-server
    • client 添加 spring-cloud-starter-netflix-eureka-client
  • 添加注解
    • server添加@EnabeEurekaServer
    • client添加@EnabeEurekaClient,也可以使用@EnableDiscoveryClient,后者兼容多种注册中心。
  • 修改配置
    • 添加应用名(spring.application.name)。
    • 指定注册中心地址(eureka.client.service-url.defaultZone)。

高可用的Eureka Server

  和hadoop集群的高可用一样,就是多启动几台Eureka Server,相互注册就是高可用。

失效剔除和自我保护

  服务因为各种原因没有发送心跳而且没有收到下线请求,这段时间超过90秒的服务会被剔除,默认每60秒清除一次这种服务,这就是失效剔除。

  服务实例最近15分钟心跳续约比例低于85%的服务,会认为这个服务有点小问题,暂时停止失效剔除,这个机制叫自我保护。

Ribbon

  Ribbon是一个负载均衡器,如果一个服务是由多台机器集群提供,可以使用Ribbon调节。

雪崩问题

  因为某个小问题(如请求阻塞)导致服务出错,从而导致所有服务都不可用,就是雪崩问题。

Hystrix

  Hystrix使一个容错库,为了避免出现级联失败。解决雪崩问题的方法有两个:

  • 线程隔离
    • 把不同的服务请求用不同的线程池去隔离,这样即使资源耗尽也只是耗尽线程池的资源。
    • 如果服务一直不可用,超过了超时时间,会返回失败结果(服务降级)。
    • 降级服务的原则是优先保证核心服务,非核心服务不可用或者弱可用。
  • 服务熔断
    • 和股票一样,短时间内跌到一定幅度就会自动停盘一会儿。
    • 所有请求正常时熔断器关闭状态(Closed状态)。
    • 默认情况下,20次请求概率低于50%就会触发熔断器(Open状态)。熔断器打开期间所有请求直接失败。
    • 默认再熔断器打开5秒后会半开熔断器(Half Open状态)。此时会允许部分请求通过,如果放行的请求状态都正常就会关闭熔断器。如果不是,重新计时然后进入半开状态,反复循环。

Zuul

  微服务网关。它的核心是一系列的过滤器,可以完成以下功能

  • 身份认证
    • 识别每个资源的验证要求,拒绝不符合要求的请求。
  • 监控
    • 监控有意义的数据和统计结果。
  • 动态路由
    • 动态地将请求路由到不同的后端集群。
  • 压力测试
    • 逐渐增大请求量测试性能。
  • 负载分配
    • 为每一种负载类型分配对应容量,并弃用超出限定值的请求。
  • 静态响应处理
    • 在边缘位置直接建立部分响应,避免其转发到内部集群。