Spring Cloud 模块简介2

前面一篇文章谈到微服务基础框架,而Netflix的多个开源组件一块儿正好能够提供完整的分布式微服务基础架构环境,而对于 Spring Cloud正是对Netflix的多个开源组件进一步的封装而成 ,同时又实现了和云端平台,和Spring Boot开发框架很好的集成。

Spring Cloud是一个相对比较新的微服务框架,今年(2016)才推出1.0的release版本. 虽然Spring Cloud时间最短, 可是相比Dubbo等RPC框架, Spring Cloud提供的全套的分布式系统解决方案。

Spring Cloud 为开发者提供了 在分布式系统(配置管理,服务发现,熔断,路由,微代理,控制总线,一次性token,全居琐,leader选举,分布式session,集群状态)中快速构建的工具 ,使用Spring Cloud的开发者能够快速的启动服务或构建应用、同时可以快速和云平台资源进行对接。

咱们先简单阐述下Spring Cloud中文社区对四个基础关键组件的描述:

社区地址: http://springcloud.cn/

Spring Cloud Config配置中心

微服务框架-SpringCloud简介

Spring Cloud Config就是咱们一般意义上的配置中心。Spring Cloud Config-把应用本来放在本地文件的配置抽取出来放在中心服务器, 本质是配置信息从本地迁移到云端 。从而可以提供更好的管理、发布能力。

Spring Cloud Config分服务端和客户端, 服务端负责将git(svn)中存储的配置文件发布成REST接口 ,客户端能够从服务端REST接口获取配置。但客户端并不能主动感知到配置的变化,从而主动去获取新的配置,这须要每一个客户端经过POST方法触发各自的/refresh。

Spring Cloud Netflix 服务发现

微服务框架-SpringCloud简介
Spring Cloud Eureka提供在分布式环境下的服务发现,服务注册的功能。

Spring Cloud Netflix,该项目是Spring Cloud的子项目之一,主要内容是对Netflix公司一系列开源产品的包装,它为Spring Boot应用提供了自配置的Netflix OSS整合。

经过一些简单的注解,开发者就能够快速的在应用中配置一下经常使用模块并构建庞大的分布式系统。它主要提供的模块包括: 服务发现(Eureka),断路器(Hystrix),智能路由(Zuul),客户端负载均衡(Ribbon)等。

Spring cloud Hystrix 熔断器

微服务框架-SpringCloud简介

断路器(Cricuit Breaker)是一种可以在远程服务不可用时自动熔断(打开开关),并在远程服务恢复时自动恢复(闭合开关)的设施。

断路器(Cricuit Breaker)是一种可以在远程服务不可用时自动熔断(打开开关),并在远程服务恢复时自动恢复(闭合开关)的设施,Spring Cloud经过Netflix的Hystrix组件提供断路器、资源隔离与自我修复功能。

Spring Cloud Zuul 服务网关

微服务框架-SpringCloud简介

Spring Cloud Eureka提供在分布式环境下的服务发现,服务注册的功能。

Spring Cloud Netflix,该项目是Spring Cloud的子项目之一,主要内容是对Netflix公司一系列开源产品的包装,它为Spring Boot应用提供了自配置的Netflix OSS整合。 经过一些简单的注解,开发者就能够快速的在应用中配置一下经常使用模块并构建庞大的分布式系统。它主要提供的模块包括:服务发现(Eureka),断路器(Hystrix),智能路有(Zuul),客户端负载均衡(Ribbon)等。

固然Spring Cloud还有额外扩展的其它不少组件,包括了服务链路监控和跟踪(很关键的一个功能),消息总线,数据流处理,批量任务处理等。而对于整个Spring Cloud微服务框架简单来讲,便是:

你只要划分到你的微服务组件和模块,并定义好须要暴露的API接口,那么剩下的整个开发和传统方式没有太大的区别,你开发完成的组件集成起来就是一个分布式可扩展的微服务环境。里面设计到的接口发布,服务注册,服务调用和路由,服务监控,健康检测和流控等都会由微服务框架来帮你完成。

正是有了成熟的微服务框架,咱们才更应该将微服务架构设计重心从技术底层转移到组件划分和接口设计上。


SpringCloud和Dubbo的区别问题

对于二者的区别在以下文章有详细描述能够参考:

http://blog.didispace.com/microservice-framework/

能够看到SpringCLoud可以提供的基础能力要多于Dubbo,Dubbo能够看做是SpringCLoud简单实现。

Dubbo是RPC服务治理框架,和Spring Cloud同样具有服务注册、发现、路由、负载均衡等能力。可是没有配置中心,完整的好用全链路监控,须要采用开源的解决方案定制或者自研。Spring cloud的配置中心,全链路监控等组件。从目前来看,Spring Cloud国内中小型企业用的比较多,大型企业可能须要对其须要的组件进行定制化处理。

可是也须要看到Spring Cloud基于注解的服务发现,服务治理等功能具备代码侵入性,dubbo没有代码侵入性,业务开发人员不须要经过注解的方式去关注框架级别的处理。从中间件或者作基础架构的角度来看,其实服务治理等功能对普通的业务程序员应该是透明的,业务程序员不须要关注服务治理框架的使用,专一于业务代码便可。

基于SpringCLoud微服务框架的实践

对于基于SpringCLoud框架的具体实践,建议参考翟永超博客的系列文章,具体以下:

  • 服务注册和发现:http://blog.didispace.com/springcloud1/
  • 服务消费:http://blog.didispace.com/springcloud2/
  • 服务熔断机制:http://blog.didispace.com/springcloud3/
  • 服务配置中心:http://blog.didispace.com/springcloud4/
  • 服务网关:http://blog.didispace.com/springcloud5/
  • 高可用服务注册中心:http://blog.didispace.com/springcloud6/
  • 消息总线:http://blog.didispace.com/springcloud7/

服务注册和发现

注意这里仍然使用的是SpringBoot框架,并和SpringBoot框架进行了集成,在pom.xml配置文件中增长了对SpringCLoud相关包和组件的依赖。在原有的接口API定义的基础上,咱们增长@EnableDiscoveryClient注解后,便可以让服务注册中心很轻松的发现服务提供方以及提供的服务。

服务消费


方式1 - Ribbon是一个基于HTTP和TCP客户端的负载均衡器。Ribbon能够在经过客户端中配置的ribbonServerList服务端列表去轮询访问以达到均衡负载的做用。当Ribbon与Eureka联合使用时,ribbonServerList会被DiscoveryEnabledNIWSServ erList重写,扩展成从Eureka注册中心中获取服务端列表。

方式2 - Feign是一个声明式的Web Service客户端,它使得编写Web Serivce客户端变得更加简单。咱们只须要使用Feign来建立一个接口并用注解来配置它既可完成。它具有可插拔的注解支持,包括Feign注解和JAX-RS注解。Feign也支持可插拔的编码器和解码器。Spring Cloud为Feign增长了对Spring MVC注解的支持,还整合了Ribbon和Eureka来提供均衡负载的HTTP客户端实现。

断路器

首先在pom.xml文件中增长引入对hystrix依赖,同时在消费端Application主类上增长@EnableCircuitBreaker注解开启断路器功能。注意原有的服务消费方式也涉及到修改,增长了服务Callback的回调函数。

服务网关

服务网关是微服务架构中一个不可或缺的部分。经过服务网关统一贯外系统提供REST API的过程当中,除了具有服务路由、均衡负载功能以外,它还具有了权限控制等功能。Spring Cloud Netflix中的Zuul就担任了这样的一个角色,为微服务架构提供了前门保护的做用,同时将权限控制这些较重的非业务逻辑内容迁移到服务路由层面,使得服务集群主体可以具有更高的可复用性和可测试性。
相关文章
相关标签/搜索