Spring Cloud 专注于提供良好的开箱即用经验的典型用例和可扩展性机制覆盖。
- 分布式/版本化配置
- 服务注册和发现
- 路由
- service-to-service调用
- 负载均衡
- 断路器
- 全局锁
- Leadership选举与集群状态
- 分布式消息传递
Commons
Spring Cloud Commons 提供了两个类库: Spring Cloud Context and Spring Cloud Commons.
Spring Cloud Context 提供应用(bootstrap context, encryption, refresh scope 和 envirionment endpoints)中ApplicationContext实用应用和的特定服务
Bootstrap Context 改变Bootstrap的位置Properties 覆盖远程Properties的值 自定义引导配置 环境变化 。
TextEncryptor beans
Refresh Scope
Spring Boot Actuator endpoints
Spring Cloud Commons 是其它组件(Netflix与Consul)的抽象通用类。
DiscoverClient接口,提供注解 @EnableDiscoveryClient, 默认情况下,DiscoveryClient的实现将使用远程发现服务器自动注册本地Spring Boog 服务器。
ServiceRegistry接口 允许提供自定义的注册服务。
RestTemplate 做为虚拟主机调用及负载均衡器客户端。
重试失败的请求: RestTemplate可以配置为重试失败的请求,默认情况下,该逻辑被禁用,可以通过配置来设置: spring.cloud.loadbalancer.retry.enabled=false。可以使用属性 client.ribbon.MaxAutoRetries, client.ribbon.MaxAutoRetriesNextServer和client.ribbon.OkToRetryOnAllOperations.
Config
Spring Cloud Config 为分布式系统中的外部化配置提供服务器和客户端支持。客户端和服务器映射的概念与Spring Environment和PropertySource抽象相同中。服务器存储后端的默认实现使用git。
Spring-cloud-config-server 该服务是一个spring boot 应用程序。
客户端配置bootstrap.properties文件:spring.cloud.config.uri: http://myconfigserver.com
服务器可以使用@EnableConfigServer,配置application.properties文件:spring.cloud.config.server.git.uri
Netflix eureka
服务发现 Eureka。
注册Eureka: 客户端启动类添加:@EnableEurekaClient,配置文件添加:eureka.client.serverUrl.defaultZone=http://localhost:8761/eureka/ 启动后会向服务端注册自己服务: spring.application.name与 server.port.
eureka服务端:启动类添加:@@EnableEurekaServer
Netflix Hystrix
断路器,在特定服务的请求达到一定的阈值时,Hystrix回退防止级联故障。
启动类添加: @EnableCircuitBreaker
在需在添加断路器的方法如下:
@Component public class StoreIntegration { @HystrixCommand(fallbackMethod = "defaultStores") public Object getStores(Map<String, Object> parameters) { //do stuff that might fail } public Object defaultStores(Map<String, Object> parameters) { return /* something useful */; } }
Hystrix仪表板,启动类添加@EnableHystrixDashboard,访问 /hystrix,会显示断路器情况。
Netflix Ribbon 客户端负载均衡
Ribbon是一个客户端负载均衡器,提供功能:负载均衡 Load balancing、容错 Fault tolerance、多协议 Multiple protocol support in an asynchronos and reactive model、缓存 Caching and batching.
在定义RestTemplate类上添加注解 @LoadBalanced,可以将Ribbon结合到RestTemplate中使用。
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
SimpleClientHttpRequestFactory clientFactory = new SimpleClientHttpRequestFactory();
clientFactory.setConnectTimeout(5 * 60 * 1000);
clientFactory.setReadTimeout(5 * 60 * 1000);
return new RestTemplate(clientFactory);
}
Netflix Feign
feign是声明式的web service客户端,它让微服务之间的调用变得更简单了,类似controller调用service。 Feign底层合用了ribbon作为负贲均衡。
启动类添加注解: @FeignClient
@FeignClient(value = "CART") public interface CartFeignClient { @PostMapping("/cart/{productId}") Long addCart(@PathVariable("productId")Long productId); }
使得调用远程接口时,像调用本地方法一样。
Netflix Zuul
Zuul是一个API Gateway服务器,提供动态路由、监控、弹性、安全等边缘服务。是否可以替换nginx?
Netflix Turbine
将每一个(指定)服务的Hystrix/stream中的状态信息取出,并集中处理(计算与展示),主要配合Hystrix使用。
Stream
Spring cloud stream 是一个构建消息驱动微服务的框架,应用程序通过inputs 或者outputs来与Spring Cloud Stream中binder交互。解决了开发人员无感知的使用消息中间件的问题。
Bus
Spring Cloud Bus 就是借助消息驱动来实现将消息(事件)广播到各个服务顺,然后服务对这些地消息进行消费,基于Stream来完成跨服务的消息传输。 是跨服务的Spring的事件机制的实现。
Sleuth
Spring Cloud Sleuth实现了分布式链路跟踪解决方案。引用包后,可以在日志中打印traceId与spanId等,也可以将信息上报到zipkin.
Consul
Consul是HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置。内置了服务注册与发现框架、分布一致性协议实现、健康检查、key/value存储、多数据中心方案,使用Go语言编写。eureka2.X已经停止开发,Consul是一个很好的替代。
Zookeeper
Spring cloud zookeeper可以借助zookeeper实现配置中心的功能。但CAP原则中只实现了CP
C Consistency 数据一致性
A Availability 可用性
P Partition Tolerance 分区容错性
CLI
CLI(Command Line Interface)提供Spring启动命令行功能,可以用于命令行运行像Eureka, Config Server等常用服务:
spring cloud eureka configserver h2 kafka zipkin
Security
Spring Security 致力于Java 应用提供认证和授权管理。可以基于RBAC(基于角色的权限控制)对用户的访问权限进行控制,核心思路是通过一系列的filter chain 来进行拦截过滤。
参考资料: