【框架学习】spring cloud体系 - hippowc/hippowc.github.io GitHub Wiki
对于微服务框架,最重要的内容就是各种独立服务的治理,譬如最基础的rpc:需要服务注册与发现机制,以及各个独立服务之间的通信协议,负载均衡等,spring cloud为微服务治理提供了一套完善的框架,各个组件功能清晰,轻量级,非常优雅。
Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理
技术概况
Spring Cloud Netflix
Netflix--网飞公司,Netflix是一家做视频的网站,Netflix的微服务大规模的应用,在技术上毫无保留的把一整套微服务架构核心技术栈开源了出来,叫做Netflix OSS;Pivotal在Netflix开源的一整套核心技术产品线的同时,做了一系列的封装,就变成了Spring Cloud;虽然Spring Cloud到现在为止不只有Netflix提供的方案可以集成,还有很多方案,但Netflix是最成熟的。
- Eureka 尤里卡:服务注册与发现的组件,基于 REST,Eureka Server作为服务注册中心,维护众多微服务;Eureka Client微服务通过client将自己的服务注册到服务中心
- Hystrix [hɪst'rɪks]:熔断器,旨在通过熔断机制控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力
- Ribbon [ˈrɪbən]:ribbon是一个负载均衡客户端,可以很好的控制htt和tcp的一些行为
- Zuul :Zuul 是在云平台上提供动态路由,监控,弹性,安全等边缘服务的框架,Zuul 相当于是设备和 Netflix 流应用的 Web 网站后端所有请求的前门。
OpenFeign
Feign是一个声明式Web Service客户端。使用Feign能让编写Web Service客户端更加简单;Spring Cloud OpenFeign以将OpenFeign集成到Spring Boot应用中的方式,为微服务架构下服务之间的调用提供了解决方案。首先,利用了OpenFeign的声明式方式定义Web服务客户端;其次还更进一步,通过集成Ribbon或Eureka实现负载均衡的HTTP客户端。
Spring Cloud Config Server
配置中心,配置管理工具包,让你可以把配置放到远程服务器,集中化管理集群配置,目前支持本地存储、Git以及Subversion。类似于diamond
Spring Cloud Bus
事件、消息总线,用于在集群(例如,配置变化事件)中传播状态变化,可与Spring Cloud Config联合实现热部署。
详解
所有demo都可以在 https://start.spring.io/ 下载,会将所有的依赖加上
Eureka
-- 创建一个Eureka Server 服务中心 只需要在springboot工程的启动application类上加注解@EnableEurekaServer
eureka是一个高可用的组件,它没有后端缓存,每一个实例注册之后需要向注册中心发送心跳(因此可以在内存中完成),在默认情况下erureka server也是一个eureka client ,必须要指定一个 server。eureka server的配置文件
# 服务端口
server.port=8761
eureka.instance.hostname=localhost
# 禁止自己注册自己
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
# 服务器名称
spring.application.name=eurka-server
访问:http://localhost:8761 即可看见服务中心界面
-- 创建一个Eureka Client 服务提供者
只需要在springboot工程的启动application类上加注解@EnableEurekaClient
配置文件:
server.port=8762
spring.application.name=service-hi
# 服务中心地址,地址后要有eureka
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka
不过一般作为web应用启动,额外添加spring-boot-starter-web,启动(否则注册一下服务就停止了),这个时候发现注册中心已经有这个服务名称了--service-hi,需要指明spring.application.name,这个很重要,这在以后的服务与服务之间相互调用一般都是根据这个name
注:引入web会默认引入scecuriy,访问controller时需要登陆,服务控制台会生成一个随机的密码,用户名user,可以登陆
ribbon
ribbon是一个负载均衡客户端,可以很好的控制htt和tcp的一些行为。Feign默认集成了ribbon。spring cloud以http rest的方式提供服务,其实可以直接访问url使用服务,但是那样只能一个一台独立的服务。所以我们使用ribbon进行负载均衡。
需要在springboot工程的启动application类上加注解 Fixme
配置文件
server.port=8763
spring.application.name=service-ribbon
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka