Skip to content

leonliu06/spring-cloud-study

Repository files navigation

1 服务的注册与发现 consul

  • 设有B服务,其名称为service-b,A服务,其名称为servcie-a,要使B可以通过A服务的名称service-a来调用A的接口,则需要B和A都互相认识,即知道彼此的名称, 这就需要一个共享的存在,这个存在就是服务注册与发现组件。这类组件有Eurekaconsul等。
  • 如果没有服务注册与发现组件,则通过名称调用接口时,会报java.net.UnknownHostException异常。
  • 只能通过IP+端口调用才能正常,所以从这个角度说,服务注册与发现组件也体现了类似DNS的作用。
  • 如何将服务注册到 consul 中,参看服务 consul-demo-producerconsul-demo-consumer 的依赖配置。

2 服务消费者 service-b

  服务消费者 service-b 通过 RestTemplate + Ribbon 方式来调用服务生产者 service-arest 接口。

2.1 Ribbon

  Ribbon是Spring Cloud中的负载均衡客户端,Spring Cloud Ribbon会从服务注册中心(ConsulEureka)服务器端上获取服务注册信息列表,缓存到本地,实现负载均衡策略。

2.2 Ribbon与Nginx的区别

2.2.1 Nginx是服务器端负载均衡

  客户端将所有请求统一交给nginx,由nginx实现负载均衡请求转发,属于服务器端负载均衡。

2.2.2 Ribbon是客户端负载均衡

  Ribbon是从服务注册中心服务端上获取服务注册信息列表,缓存到要地,然后在本地实现负载均衡策略,即客户端实现负载均衡。

3 服务消费者 service-c

  服务消费者 service-c 通过 Feign 方式来调用服务生产者 service-arest 接口。

4 断路器(circuit breaker)Hystrix

  • 在微服务中,由于网络原因或自身原因,服务并不能保证100%可用,如果单个服务出现问题,比如 service-a 出现问题, service-b 在调用 service-a 时就会出现线程阻塞,此时若 service-b 有大量请求调用,则 service-bServlet 容器的线程资源会被消耗完毕,导致服务瘫痪。
  • 服务与服务之间的依赖性,故障会传播,会对整个微服务系统造成灾难性的后果,这就是服务故障的“雪崩”效应。
  • 为了解决这个“雪崩”问题,就出现了**断路器(circuit breaker)**模型。
  • Spring Cloud 中的断路器是 Hystrix ,即 spring-cloud-starter--netflix-hystrix 依赖。

4.1 在 service-bRestTemplate + Ribbon 调用外部服务方式中使用 Hystrix

  具体看服务消费者 service-b

4.2 在 service-cFiegn 调用外部服务方式中使用 Hystrix

  具体看服务消费者 service-c

5 微服务网关zuul

  微服务架构中,为了避免客户端与多个微服务之间的请求复杂性,需要一个介于客户端和各个微服务器端之间的中间层,这个中间层就是微服务网关。Spring Cloud体系中用到的微服务网关是 Zuul。微服务网关的主要功能是路由转发过滤器

  1. 路由转发:默认情况下,Zuul会代理所有注册到注册中心如consulEureka上的微服务,且 Zuul 的路由规则如下:http://ZUUL_HOST:ZULL_PORT/serviceId/** 会被转发到 serviceId 对应的微服务。其中 serviceId 指的是微服务注册在注册中心上的 serviceId
    1. 可以进行多种方式的路由配置,如配置需要忽略的服务,配置同时指定微服务的 serviceId 和对应路径等
    2. 可将 com.netflix 包的日志级别设为DEBUG,这样可以打印路由转发的具体细节,有助于理解 Zuul 的路由配置,如 logging: level: com.netfilx: DEBUG
  2. 过滤器:编写过滤器只需继承抽象类 ZuulFilter ,然后实现几个抽象方法就可以了。

  微服务网关服务工程参看service-gateway-zuul

6 分布式配置中心组件 spring cloud config

7 高可用的分布式配置中心 spring cloud config

  将分布式配置中心做成一个微服务 config-server ,注册到服务注册中心如 consul,并集群化,从而达到高可用。   需要读取配置中心配置的服务如 config-client,就可以只通过配置中心的服务名 config-server 来读取配置了,这时如果配置中心服务 config-server 部署多份,通过负载均衡,从而高可用。通过配置中心服务名来读取配置参看项目 config-client

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages