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:

[html] view plain copy /{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依赖库

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

常用依赖包如下:

[html] view plain copy 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 Cloud介绍 Spring Cloud与Dubbo对比的更多相关文章

  1. Spring 框架介绍 [Spring 优点][Spring 应用领域][体系结构][目录结构][基础 jar 包]

    您的"关注"和"点赞",是信任,是认可,是支持,是动力...... 如意见相佐,可留言. 本人必将竭尽全力试图做到准确和全面,终其一生进行修改补充更新. 目录 ...

  2. Spring Boot学习(一)——Spring Boot介绍

    Spring Boot介绍 Spring Boot简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式 ...

  3. Spring DevTools 介绍

    Spring DevTools 介绍 Spring Boot包括一组额外的工具,可以使应用程序开发体验更加愉快. spring-boot-devtools模块可以包含在任何项目中,它可以节省大量的时间 ...

  4. Spring Security 介绍与Demo

    一.Spring Security 介绍 Spring Security 是针对Spring项目的安全框架,也是Spring Boot底层安全模块的默认技术选型.我们仅需引入spring-boot-s ...

  5. Spring 框架介绍

    Spring 框架介绍 Spring 框架模块 Spring开发环境搭建(Eclipse) 创建一个简单的Spring应用 Spring 控制反转容器(Inversion of Control – I ...

  6. Spring Security +Oauth2 +Spring boot 动态定义权限

    Oauth2介绍:Oauth2是为用户资源的授权定义了一个安全.开放及简单的标准,第三方无需知道用户的账号及密码,就可获取到用户的授权信息,并且这是安全的. 简单的来说,当用户登陆网站的时候,需要账号 ...

  7. 一、Spring Cloud介绍

    springcloud 介绍 研究了一段时间spring boot了准备向spirng cloud进发,公司架构和项目也全面拥抱了Spring Cloud.在使用了一段时间后发现Spring Clou ...

  8. Spring Cloud失散多年的哥哥Dubbo学习笔记

    Spring Cloud失散多年的哥哥Dubbo 随着互联网项目用户量的急剧增长,访问并发良突然暴增,将一个应用使用多个独立的工程共同实现的系统架构,称为SOA系统架构,各个工程可以允许在不同的机器上 ...

  9. Spring Cloud Alibaba生态探索:Dubbo、Nacos及Sentinel的完美结合

    @ 目录 背景 一.项目框架 1.1 采用IDEA和Maven多模块进行项目搭建 1.2 模块管理及版本管理 二.微服务公共接口 2.1 定义一个公共接口Api 2.2 pom.xml 2.3 Goo ...

随机推荐

  1. ElasticSearch入门-搜索如此简单

    搜索引擎我也不是很熟悉,但是数据库还是比较了解.可以把搜索理解为数据库的like功能的替代品.因为like有以下几点不足: 第一.like的效率不行,在使用like时,一般都用不到索引,除非使用前缀匹 ...

  2. CSS使块半透明方法,兼容IE6

    前言 今天LOL玩机器人玩得真心不爽,实在崩溃,还是逛博客园比较爽些,记录自己的成长!说句实话我在编程方面确实是个菜鸟,菜到一种超神的地步,没一样自己特擅长的,悲催...... 废话少说,进入正题,H ...

  3. loadrunner http协议put模式脚本编写

    web_submit_data("rest", "Action=http://www.test.com/111ojhjh.do", "Method=P ...

  4. cocos2d-x for js 继承的写法

    cocos2d-x for js中集成了两套继承写法,一套是JR的(jquery的作者),一套是google. 目前来说,cocos2d-x for js demo使用JR的写法----未完待续... ...

  5. Visual Studio 创建代码注释默认模版方法

    在日常的开发中我们经常需要为页面添加注释和版权等信息,这样我们就需要每次去拷贝粘贴同样的文字,为了减少这种重复性的工作,我们可以把这些信息保存在Visual Studio 2012类库模版文件里 1. ...

  6. Java JSON序列化杂谈

    在C#中序列化是比较容易的,如果不用第三方的类库,那么C#提供的两个对象也够我们使用,一般的操作是定义一个不含有方法的类,这个类里面定义了要序列化的对象的属性,因为我C#用的比较多,这里直接给出泛型, ...

  7. Windows7 64下MinGW64/MSYS环境搭建

    原文出处: CompileGraphics Magick, Boost, Botan and QT with MinGW64 under Windows 7 64 http://www.kinetic ...

  8. Import Items – Validation Multiple Languages Description

            ð  提交标准请求创建和更新物料,因语言环境与处理次序方式等因素,造成物料中英(更多语言)描述和长描述混乱刷新. 症状: >>> Submit Standard Op ...

  9. Linux kernel ‘uio_mmap_physical’函数缓冲区溢出漏洞

    漏洞名称: Linux kernel ‘uio_mmap_physical’函数缓冲区溢出漏洞 CNNVD编号: CNNVD-201311-154 发布时间: 2013-11-13 更新时间: 201 ...

  10. MongoDB中ObjectId的误区,以及引起的一系列问题

    近期对两个应用进行改造,在上线过程中出现一系列问题(其中一部分是由于ObjectId误区导致的) 先来了解下ObjectId: TimeStamp 前 4位是一个unix的时间戳,是一个int类别,我 ...