微服务解决方案1:SpringCloud Netflix

一套微服务架构解决方案:Spring Boot + Spring Cloud Netflix

练手项目 https://github.com/xu1211/springclouddemo

Netflix 没人维护了,所以现在市面上都不怎么用 【哭】 , 大家了解下就行

Netflix是一家美国做视频的网站,因为访问量非常的大,所以把整体的系统往微服务上迁移。Netflix的微服务大规模的应用,在技术上毫无保留的把一整套微服务架构核心技术栈开源了出来,叫做Netflix OSS

对Netflix OSS做了一系列的封装,就变成了Spring Cloud Netflix

Spring Cloud到现在为止不只有Netflix提供的方案可以集成,另外两套比较成熟方案是

  1. Spring Boot + Dubbo + Zookeeper
  2. Spring Boot + Spring Cloud Alibaba

目录

Spring Cloud 概念

架构图:

1. 服务注册中心

2. 服务提供者

3. 服务消费者

4. 熔断器

5. 熔断器仪表盘监控

6. 路由网关

7. 配置中心

8. 服务链路追踪

Spring Cloud开发

注解概览


Spring Cloud 概念

springcloud开发很简单,基本功能都封装好了,重要的是概念的理解,思维转变

springcloud提供了全套的分布式系统解决方案(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线)

架构图:

微服务解决方案1:SpringCloud Netflix_第1张图片

右侧是 User,Service1,Service2 表示微服务应用,注册在 Eureka 注册中心,相互通过 Fein Client 调用

左侧 Mobile,Admin,APP 表示外部应用,通过 Zuul 网关,由Ribbon做负载均衡,Hystrix做监控保护,到 Eureka 注册中心拿到服务名和路径 访问具体的微服务

目前市场上主流的一套微服务架构解决方案:Spring Boot + Spring Cloud Netflix


1. 服务注册中心

Eureka Server

中小型项目微服务能达到上百,大型能上千上万, 还要部署集群,总不能一个个配置地址相互调用, 用一个服务注册中心 专门管理服务,记录这些服务的信息

主要用来解决如何管理多个微服务,以及多个微服务之间如何通信的问题. 在springcloud 里就叫做 eureka server, 通过它把就可以把微服务注册起来,以供将来调用。

Eureka 这个单词是 “找到啦” 的意思

启动后访问  http://{server:ip}:8761 可以查看有哪些服务注册

微服务解决方案1:SpringCloud Netflix_第2张图片

2. 服务提供者

一个项目肯定得有服务提供者,一般都是增删改查操作,处理一些后台逻辑

把服务提供者注册在 Eureka Server服务注册中心

微服务解决方案1:SpringCloud Netflix_第3张图片

3. 服务消费者

Ribbon + restTemplate  Feign

简单理解为前端页面,或者其他系统,需要从服务提供者获取服务的都算是服务消费者

  • Ribbon   是一个负载均衡客户端,Ribbon可自动从Eureka Server获取服务提供者地址列表,并基于负载均衡算法,请求其中一个服务提供者实例
  • Feign   是对Ribbon的封装,用起来更简单方便

微服务解决方案1:SpringCloud Netflix_第4张图片

4. 熔断器

Hystrix

服务消费者是通过http请求服务提供者, 若有大量的请求涌入一个有出错的服务,Servlet 容器的线程资源会被消耗完毕,导致服务瘫痪。服务与服务之间的依赖性,故障会传播,导致 服务雪崩

熔断器作用是 当对特定的服务的调用的不可用达到一个阀值(Hystrix 是 5 秒 20 次) 熔断器将会被打开,不让调用了,直接返回一个固定值。

5. 熔断器仪表盘监控

Hystrix Dashboard

监控熔断器触发状态的

6. 路由网关

zuul

主要提供两个功能:

  1. 统一访问功能(微服务多了之后ip端口都有一大堆,可以通过配置路径统一访问)
  2. 请求过滤功能 (和servlet过滤器功能一样,  权限校验、流量控制这些都可以通过过滤器实现,请求转也是通过过滤器实现的)

微服务解决方案1:SpringCloud Netflix_第5张图片

7. 配置中心

Spring Cloud Config

一个微服务集群部署多了以后,配置文件都放在工程里要改的话会很麻烦,  通过配置中心把配置信息都放在git库里, 运行时从git库统一获取

8. 服务链路追踪

zipkin

服务越多,调用关系越复杂, 通过链路追踪能看出服务调用链


Spring Cloud开发

springcloud 由多个 springboot 项目组成, 而这些 springboot 之间又是围绕一个共同目的而存在的。 
所以为了便于组织这些 springboot 项目,一般会 采用 maven 父子-聚合 项目的方式来开发,创建一个依赖管理项目作为父项目

注解概览

  • Eureka注册中心

@EnableEurekaServer   表明自己是一个 Eureka Server

  • 注册到注册中心

@EnableEurekaClient    注册到服务中心。表明自己是一个 Eureka Client(只适用于Eureka注册中心)

@EnableDiscoveryClient   注册到服务中心。表明自己是一个客户端,该注解是 Spring Cloud 提供的原生注解(可以是其他注册中心 例如Zookeeper、Consul等)

  • Feign

@EnableFeignClients       开启 Feign 功能

@FeignClient("服务名")     指定调用哪个服务。

  • Hystrix熔断器

@EnableHystrixDashboard 表明启用Hystrix Dashboard功能

  • Zuul网关

@EnableZuulProxy

  • 配置中心

@EnableConfigServer 表明启用配置服务器功能

你可能感兴趣的:(开发框架-java系列,spring,cloud,微服务,java)