SpringCloud与微服务

SpringCloud与微服务

程序架构发展史

  • ORM(All in One) 可承载并发量1~10
  • MVC (Vertical Application) 可承载并发量 10~1000
  • RPC (Distributed Service) 可承载并发量 1000~10000
  • SOA (Elastic Computing) 10000+

Spring Cloud

  • Spring Cloud是一系列框架的有序集合。是一种生态。、
  • spring Cloud基于Springboot 提供了一整套的微服务解决方案,包括服务注册与发现,配置中心,全链路监控,服务网关,负载均衡,熔断器等组件,除了基于NetFlix的开源组件做高度抽象封装之外,还有一些选型中立的开源组件。

微服务架构

  • 由Martin Fowker提出,是一种架构形式。

  • 微服务只是业务逻辑的代码,不会和Html,CSS或其他界面组合。

  • 微服务是弱耦合的每个服务都能独立部署

微服务架构的四个核心问题

  • 服务很多,客户端该怎么访问?
  • 这么多服务,服务之间如何通信?
  • 这么多服务,如何治理?
  • 服务挂了怎么办?

解决方案

(一)Spring Cloud NetFlix 一站式的解决方案,使用api网关,zuul组件

  • http通信方式,同步阻塞式的
  • 服务注册与发现:Eureka
  • 熔断机制:Hystrix

(二)Apache Dubbo Zookeeper

  • 半自动的,需要整合
  • API无,找第三方组件或自己实现
  • 没有熔断机制
  • Dubbo方案不完善

Eureka服务注册与发现

  • 解决服务之间如何通信

  • NetFlix在设计Eureka时,遵循的就是AP原则

CAP原则

  • C:Consistency强一致性
  • A :Availability 可用性
  • P :Partion tolerance 分离容错性

分布式系统不可能同时满足CAP原则

Zookeeper保证的时CP,Eureka保证的时AP

  • Eureka时NetFlix的一个子模块,也是核心模块之一。Eureka是一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移,服务注册与发现对于微服务来说是非常重要的,有了服务注册与发现,只需要使用服务的标识符,就可以访问到服务,而不需要修改服务调用的配置文件,功能类似zookeeper
  • Eureka采用C-S架构,EurekaServer作为服务注册功能的服务端,是注册中心

三大角色

  • Eureka Server 提供服务的注册与发现

  • Service Provider 将自身服务注册到Eureka中,从而方便消费者能够找到

  • Service Consumer 服务消费方从Eureka中获取注册服务列表,从而找到消费服务

  • 可以有多个Eureka组件,用以服务注册与发现。

  • 多个相同Service Provider来共服务。注意要在注册中心的名称相同,用以表示提供相同的服务。

Ribbon负载均衡

  • 解决了服务治理问题

  • LB(Load Balance)负载均衡:即将用户的请求平摊的分配到多个服务上,从而达到系统的高可用

    分类

    集中式LB :如Nginx(反向代理服务器)

    进程式:如Ribbon

Spring Cloud Ribbon 是基于 NetFlix Ribbon实现的一套客户端负载均衡工具。

  • Ribbon 和 Eureka整合后,不用关心IP地址和端口号,只需要知道在注册中心的Application名称即可。

实现算法

  • Ribbon 默认的实现算法是轮询
  • randomRule随机算法,
  • availabilityFilteringRule :会过滤掉跳闸的,访问故障的服务,对剩下的进行轮询。
  • retryRule: 会选按照轮询获取服务,如果服务获取失败,则会在指定的时间内重试
  • 也可以自定义负载均衡算法,如加权算法等

Hystrix服务熔断

  • 解决服务挂了的问题
  • Hystrix,能保证在一个以来出问题的情况下不会导致整体的服务失败,避免联级故障,以提高分布式系统的弹性。
  • 作用:服务降级,服务熔断,服务限流,接近实时的监控。
  • 服务熔断:熔断机制是对应雪崩效应的一种微服务链路保护机制,5秒内20次调用失败就会启动熔断机制。服务端某个服务超时或者异常就会引起熔断
  • 服务降级:客户端,从整体网站请求负载考虑,当某个服务熔断或者关闭之后,服务将不再被调用,此时在客户端,我们可以准备一个FallbackFactory,会返回一个默认值(缺省值),整体服务水平下降。

Zuul路由网关

  • 解决客户端该怎么访问

  • zuul包含了对请求的路由和过滤两个最主要的功能,是实现外部访问同一入口的基础。

  • zuu最终还是会注册进eureka

  • 提供:代理+路由+过滤三大功能

SpringCloud与Dubbo的区别

  • SpringCloud抛弃了Dubbo的RPC通信,采用的是基于HttpRest的方式

  • 后者牺牲了服务调用的性能,但也避免了原生RPC带来的问题。而且REST相比RPC更加灵活,服务提供方和调用方的依赖只能依靠契约,不存在代码级别的强以来,这在强调快速演化的微服务环境下,更加合适。

  • 解决的问题不一样:Dubbo的定位是一款RPC框架,而SpringCloud的目标是微服务框架下的一站式解决方案。

你可能感兴趣的:(springcloud,java,分布式)