一套微服务架构解决方案:Spring Boot + Spring Cloud Netflix
练手项目 https://github.com/xu1211/springclouddemo
Netflix 没人维护了,所以现在市面上都不怎么用 【哭】 , 大家了解下就行
Netflix是一家美国做视频的网站,因为访问量非常的大,所以把整体的系统往微服务上迁移。Netflix的微服务大规模的应用,在技术上毫无保留的把一整套微服务架构核心技术栈开源了出来,叫做Netflix OSS
对Netflix OSS做了一系列的封装,就变成了Spring Cloud Netflix
Spring Cloud到现在为止不只有Netflix提供的方案可以集成,另外两套比较成熟方案是
目录
Spring Cloud 概念
架构图:
1. 服务注册中心
2. 服务提供者
3. 服务消费者
4. 熔断器
5. 熔断器仪表盘监控
6. 路由网关
7. 配置中心
8. 服务链路追踪
Spring Cloud开发
注解概览
springcloud开发很简单,基本功能都封装好了,重要的是概念的理解,思维转变
springcloud提供了全套的分布式系统解决方案(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线)
右侧是 User,Service1,Service2 表示微服务应用,注册在 Eureka 注册中心,相互通过 Fein Client 调用
左侧 Mobile,Admin,APP 表示外部应用,通过 Zuul 网关,由Ribbon做负载均衡,Hystrix做监控保护,到 Eureka 注册中心拿到服务名和路径 访问具体的微服务
目前市场上主流的一套微服务架构解决方案:Spring Boot + Spring Cloud Netflix
Eureka Server
中小型项目微服务能达到上百,大型能上千上万, 还要部署集群,总不能一个个配置地址相互调用, 用一个服务注册中心 专门管理服务,记录这些服务的信息
主要用来解决如何管理多个微服务,以及多个微服务之间如何通信的问题. 在springcloud 里就叫做 eureka server, 通过它把就可以把微服务注册起来,以供将来调用。
Eureka 这个单词是 “找到啦” 的意思
启动后访问 http://{server:ip}:8761 可以查看有哪些服务注册
一个项目肯定得有服务提供者,一般都是增删改查操作,处理一些后台逻辑
把服务提供者注册在 Eureka Server服务注册中心
Ribbon + restTemplate / Feign
简单理解为前端页面,或者其他系统,需要从服务提供者获取服务的都算是服务消费者
Hystrix
服务消费者是通过http请求服务提供者, 若有大量的请求涌入一个有出错的服务,Servlet 容器的线程资源会被消耗完毕,导致服务瘫痪。服务与服务之间的依赖性,故障会传播,导致 服务雪崩
熔断器作用是 当对特定的服务的调用的不可用达到一个阀值(Hystrix 是 5 秒 20 次) 熔断器将会被打开,不让调用了,直接返回一个固定值。
Hystrix Dashboard
监控熔断器触发状态的
zuul
主要提供两个功能:
Spring Cloud Config
一个微服务集群部署多了以后,配置文件都放在工程里要改的话会很麻烦, 通过配置中心把配置信息都放在git库里, 运行时从git库统一获取
zipkin
服务越多,调用关系越复杂, 通过链路追踪能看出服务调用链
springcloud 由多个 springboot 项目组成, 而这些 springboot 之间又是围绕一个共同目的而存在的。
所以为了便于组织这些 springboot 项目,一般会 采用 maven 父子-聚合 项目的方式来开发,创建一个依赖管理项目作为父项目
@EnableEurekaServer 表明自己是一个 Eureka Server
@EnableEurekaClient 注册到服务中心。表明自己是一个 Eureka Client(只适用于Eureka注册中心)
@EnableDiscoveryClient 注册到服务中心。表明自己是一个客户端,该注解是 Spring Cloud 提供的原生注解(可以是其他注册中心 例如Zookeeper、Consul等)
@EnableFeignClients 开启 Feign 功能
@FeignClient("服务名") 指定调用哪个服务。
@EnableHystrixDashboard 表明启用Hystrix Dashboard功能
@EnableZuulProxy
@EnableConfigServer 表明启用配置服务器功能