基于Spring Boot和Spring Cloud实现微服务架构学习(四)-Spring Cloud总结

2016年07月24日 00:48:50

Spring Cloud介绍

Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一种简单的开发方式。

Spring Cloud与Dubbo对比

提到Dubbo,我想顺便提下ESB,目前央视新华社也在用ESB来做任务编排,这里先比较下Dubbo和ESB:

  • ESB(企业数据总线),一般采用集中式转发请求,适合大量异构系统集成,侧重任务的编排,性能问题可通过异构的方式来进行规避,无法支持特别大的并发。
  • Dubbo(服务注册管理),采用的是分布式调用,注册中心只记录地址信息,然后直连调用,适合并发及压力比较大的情况;其侧重服务的治理,将各个服务颗粒化,各个子业务系统在程序逻辑上完成业务的编排。

回归主题,Spring Cloud和Dubbo又有什么不同那,首先,我们看下有什么相同之处,它们两都具备分布式服务治理相关的功能,都能够提供服务注册、发现、路由、负载均衡等。说到这,Dubbo的功能好像也就这么多了,但是Spring Cloud是提供了一整套企业级分布式云应用的完美解决方案,能够结合Spring Boot,Docker实现快速开发的目的,所以说Dubbo只有Spring Cloud的一部分RPC功能,而且也谈不上谁好谁坏。不过,Dubbo项目现已停止了更新,淘宝内部由hsf替代dubbo,我想这会有更多人倾向Spring Cloud了。

从开发角度上说,Dubbo常与Spring、zookeeper结合,而且实现只是通过xml来配置服务地址、名称、端口,代码的侵入性是很小的,相对Spring Cloud,它的实现需要类注解等,多少具有一定侵入性。

Spring Cloud子项目

Spring Cloud包含了多个子项目(针对分布式系统中涉及的多个不同开源产品),之前在第一章节也介绍这些,比如:Spring Cloud Config、Spring Cloud Netflix、Spring Cloud CloudFoundry、Spring Cloud AWS、Spring Cloud Security、Spring Cloud Commons、Spring Cloud Zookeeper、Spring Cloud CLI等项目,可以跳至(一)看下。

配置服务

Spring Cloud提供了Config Server,它有在分布式系统开发中做外部配置的功能,通过Config Server我们可以集中存储所有应用的配置文件。Config Server支持Git或者在文件系统中放置配置文件(GitLab),通常我们使用不同格式来区分不同应用的不同配置文件。云计算环境下,习惯上使用YAML配置,而且一般配置文件的位置都放在类路径下的config目录下,配置文件规则:应用名+profile.yml:

/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties
Spring Cloud提供了注解@EnableConfigServer来启动配置服务。

服务发现

Spring Cloud通过Netflix OSS的Eureka来实现服务发现,服务发现的主要目的是为了让每个服务之间可以互相通信。Eureka Server为微服务的注册中心。谈到Spring Cloud Netflix,它是Spring Cloud的子项目之一,主要提供的模块包括:服务发现(Eureka),断路器(Hystrix),智能路有(Zuul),客户端负载均衡(Ribbon)等。
Spring Cloud使用注解的方式提供了Eureka服务端(@EnableEurekaServer)和客户端(@EnableEurekaClient)。

路由网关

路由网关的主要目的是为了让所有的微服务对外只有一个接口,我们只需访问一个网关地址,即可由网关将所有的请求代理到不同的服务中。Spring Cloud是通过Zuul来实现的,支持自动路由映射到在Eureka Server上注册的服务。Spring Cloud提供了注解@EnableZuulProxy来启用路由代理。

负载均衡

Spring Cloud提供了Ribbon和Feign作为客户端的负载均衡。在Spring Cloud下,使用Ribbon直接注入一个RestTemplate对象即可,此RestTemplate已做好负载均衡的配置;而使用Feign只需定义个注解,有@FeignClient注解的接口,然后使用@RequestMapping注解在方法上映射远程的REST服务,此方法也是做好了负载均衡配置。

断路器

断路器(Circuit Breaker)主要是为了解决当某个方法调用失败的时候,调用后备方法来替代失败的方法,已达到容错/阻止级联错误的功能。Spring Cloud使用@EnableCircuitBreaker来启用断路器支持,使用@HystrixCommand的fallbackMethod来指定后备方法。(@HystrixCommand(fallbackMethod="fallbackOper"))
Spring Cloud还提供了一个控制台来监控断路器的运行情况,通过@EnableHystrixDashboard注解开启。

Spring Cloud依赖库

这里我会罗列下常用的一些依赖包,为了更好理解每个依赖所负责的区域,我还是用一张和之前类似的图来展示各块的功能:


常用依赖包如下:

spring-cloud-starter-parent 具备spring-boot-starter-parent同样功能并附加Spring Cloud的依赖
spring-cloud-starter-config 默认的配置服务依赖,快速自动引入服务的方式,端口8888
spring-cloud-config-server/client 用户自定义配置服务的服务端/客户端依赖
spring-cloud-starter-eureka-server 服务发现的Eureka Server依赖
spring-cloud-starter-eureka 服务发现的Eureka客户端依赖
spring-cloud-starter-hystrix/zuul/feign/ribbon 断路器(Hystrix),智能路有(Zuul),客户端负载均衡(Ribbon)的依赖
angular-ui-router 页面分发路由依赖

总结

这里所有的总结只是停留在对Spring Cloud的理解上,我推荐去http://projects.spring.io/spring-cloud/官网导读多实践下项目,了解下各个模块的服务消息通信方式等,大概就是这样。

如果你对Spring Cloud感兴趣,想了解Spring Boot快速开发,以及使用JHipster生成构建Spring Boot + AngularJS的应用代码,欢迎加QQ群:58612944,里面有很多大牛指导,我也在学习中。另外,群里我们在组织翻译GitHub上JHipster的官方文档,如果感兴趣,可以进来一块为开源做贡献。

关于JHipster扩展

JHipster -> 关于SpringBoot,AngularJS及Spring生态融合的技术栈, 是SpringBoot的最佳实践,是SpringCloud对Netflix技术栈的最佳实践,是J2EE-Cloud微服务的最佳实践,是Docker,Kubernetes和AngularJS1/2的最佳实践,是全栈式开发,敏捷开发最理想的工具。

基于Spring Boot、Spring Cloud、Docker的微服务系统架构实践

原文/项目 地址:https://github.com/sqshq/PiggyMetrics由于最近公司业务需要,需要基于Spring Cloud的微服务系统。遍访各大搜索引擎,发现国内资料少之又少,...
  • rickiyeat
  • rickiyeat
  • 2017年03月07日 23:39
  • 28731

基于Spring Boot和Spring Cloud实现微服务架构学习(一)-Spring框架介绍

基于Spring Boot和Spring Cloud框架开发的微服务架构学习(一)-Spring框架介绍总结 看了几周Spring相关框架的书籍和官方demo,是时候开始总结下这中间的学习感悟。 首先...
  • zeb_perfect
  • zeb_perfect
  • 2016年07月18日 21:07
  • 57333

基于Spring Boot和Spring Cloud实现微服务架构学习(二)-Spring Boot总结

基于Spring Boot和Spring Cloud框架开发的微服务架构学习(二) 对于Git、Docker容器技术,其与Spring Boot的关联度非常的高,大部分的应用都是托管在GitHub上,...
  • zeb_perfect
  • zeb_perfect
  • 2016年07月19日 22:57
  • 21589

Spring Boot 入门(Spring Cloud方向)

为什么用Spring Boot因为做一个web项目也好,RESTful接口项目也好,是非常好的一个框架。需要什么框架(SpringMVC、Struts、Hibernate)直接往上面搭就好。配置起来也...
  • csdn2193714269
  • csdn2193714269
  • 2017年06月03日 19:42
  • 743

基于Spring Boot和Spring Cloud实现微服务架构学习(三)-Spring Boot应用

基于Spring Boot和Spring Cloud框架开发的微服务架构学习(三) 我们知道Spring Boot 是 Spring 产品中一个新的子项目,致力于简便快捷地搭建基于 Spring 的独...
  • zeb_perfect
  • zeb_perfect
  • 2016年07月21日 22:32
  • 15657

spring springMvc spring-boot spring-cloud分别是什么

前言最近公司项目将要使用spring-boot与spring-cloud作为新型框架来替代原有的spring springMvc,还未曾使用spring-boot与spring-cloud,先就自我理...
  • fly_net_sky
  • fly_net_sky
  • 2017年02月17日 17:46
  • 5707

sbc(一)SpringBoot+SpringCloud初探

前言有看过我之前的SSM系列的朋友应该有一点印象是非常深刻的。 那就是需要配置的配置文件非常多,什么Spring、mybatis、redis、mq之类的配置文件非常多,并且还存在各种版本,甚至有些...
  • qq_18661793
  • qq_18661793
  • 2017年06月27日 11:00
  • 966

spring cloud和spring boot两个完整项目

  • 2017年12月04日 14:07
  • 5.12MB
  • 下载

spring cloud,spring boot 两个项目完整实例源码

  • 2017年06月19日 21:13
  • 12.69MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:基于Spring Boot和Spring Cloud实现微服务架构学习(四)-Spring Cloud总结
举报原因:
原因补充:

(最多只允许输入30个字)