Spring Cloud与微服务学习总结(2)——Spring Cloud相较于Dubbo等RPC服务框架的优势

来源:互联网 发布:draw9patch mac 编辑:程序博客网 时间:2024/06/05 00:29

摘要:

目前,Spring Cloud在国内的知名度并不高,在前阵子的求职过程中,与一些互联网公司的架构师、技术VP或者CTO在交流时,有些甚至还不知道该项目的存在。可能这也与国内阿里巴巴开源服务治理框架Dubbo有一定的关系,除了Dubbo本身较为完善的中文文档之外,不少科技公司的架构师均出自阿里系,所以就目前情况看,短期国内还是Dubbo的天下。Spring Cloud是一个相对比较新的微服务框架,今年(2016)推出1.0的release版本,目前Github上更新速度很快. 虽然Spring Cloud时间最短, 但是相比Dubbo等RPC框架, Spring Cloud提供的全套的分布式系统解决方案。spring cloud 为开发者提供了在分布式系统(配置管理,服务发现,熔断,路由,微代理,控制总线,一次性token,全局琐,leader选举,分布式session,集群状态)中快速构建的工具,使用Spring Cloud的开发者可以快速的启动服务或构建应用.它们将在任何分布式环境中工作,包括开发人员自己的笔记本电脑,裸物理机的数据中心,和像Cloud Foundry云管理平台。在未来引领这微服务架构的发展,提供业界标准的一套微服务架构解决方案。Dubbo,是阿里巴巴服务化治理的核心框架,并被广泛应用于阿里巴巴集团的各成员站点。阿里巴巴近几年对开源社区的贡献不论在国内还是国外都是引人注目的,比如:JStorm捐赠给Apache并加入Apache基金会等,为中国互联网人争足了面子,使得阿里巴巴在国人眼里已经从电商升级为一家科技公司了。
Spring Cloud,从命名我们就可以知道,它是Spring Source的产物,Spring社区的强大背书可以说是Java企业界最有影响力的组织了,除了Spring Source之外,还有Pivotal和Netfix是其强大的后盾与技术输出。其中Netflix开源的整套微服务架构套件是Spring Cloud的核心。

什么是Spring Cloud?
 Spring Cloud是一个相对比较新的微服务框架,今年(2016)才推出1.0的release版本. 虽然Spring Cloud时间最短, 但是相比Dubbo等RPC框架, Spring Cloud提供的全套的分布式系统解决方案。spring cloud 为开发者提供了在分布式系统(配置管理,服务发现,熔断,路由,微代理,控制总线,一次性token,全居琐,leader选举,分布式session,集群状态)中快速构建的工具,使用Spring Cloud的开发者可以快速的启动服务或构建应用.它们将在任何分布式环境中工作,包括开发人员自己的笔记本电脑,裸物理机的数据中心,和像Cloud Foundry云管理平台。下面是官方对Spring Cloud定义和解释。

 Spring Cloud provides tools for developers to quickly build some of the common patterns in distributed systems (e.g. configuration management, service discovery, circuit breakers, intelligent routing, micro-proxy, control bus, one-time tokens, global locks, leadership election, distributed sessions, cluster state). Coordination of distributed systems leads to boiler plate patterns, and using Spring Cloud developers can quickly stand up services and applications that implement those patterns. They will work well in any distributed environment, including the developer’s own laptop, bare metal data centres, and managed platforms such as Cloud Foundry.  

Spring Cloud主要项目
Spring Cloud 侧重于提供良好的开箱即用的功能,以便支持典型的开发场景和扩展支持。下面主要Spring Cloud项目在微服务框架中的主要子项目,具体的子项目源码分析,以及实现细节,将会在后面的文章中介绍。
Spring Cloud Config—配置中心
Spring Cloud Config就是我们通常意义上的配置中心 - 把应用原本放在本地文件的配置抽取出来放在中心服务器,从而能够提供更好的管理、发布。
RPC服务治理框架中,一般都会开发一个配置中心和ZK配合使用,用于管理分布式应用中的配置信息。比如熔断的阀值,负载均衡的策略等。
Spring Cloud Netflix–注册中心,服务发现,LB
Spring Cloud Netflix通过Eureka Server实现服务注册中心(包括服务注册,服务发现),通过Ribbon实现软负载均衡(load balance,简称LB)
RPC框架中,例如:dubboX,HSF,OSP(唯品会的RPC框架)等RPC框架,都会通过ZK等实现服务注册,服务发现。当服务启动时,会将服务的IP地址,端口,服务命名,版本号等信息注册到ZK中,同时ZK Node会监听变化,接收最新的服务注册信息到client端或Proxy端。
至于LB,都会有自己的实现算法,熔断等都有自己的实现方式。
Hystrix
  熔断,包含在服务治理中。
Spring Cloud Sleuth
Spring Cloud Sleuth为Spring Cloud提供了分布式追踪方案。全链路监控系统。
  APM(Application Performance Monitor)这个领域最近异常火热。国外该领域知名公司包括New Relic,Appdynamics,Splunk。其中New Relic已经成功IPO,估值超过20亿美元。
 1.国内外的个大互联网公司也都有类似大名鼎鼎的APM产品,例如淘宝鹰眼Eagle Eyes,点评的CAT,微博的Watchman,twitter的Zipkin。他们的产品虽未像专业APM公司的产品这样功能强大,但结合各自公司的业务特点,这些产品在支撑业务系统的高性能和稳定性方面,发挥了显著的作用。
 2.众所周知,中大型互联网公司的后台业务系统由众多分布式组件构成,这些组件由web类型组件,RPC服务化类型组件,缓存组件,消息组件和数据库组件。一个通过浏览器或移动客户端的前端请求到达后台系统后,会经过很多个业务组件和系统组件,并且留下足迹和相关日志信息。但这些分散在每个业务组件和主机下的日志信息不利于问题排查和定位问题的Root Cause。这种监控场景正是应用性能监控系统的用武之地,应用性能监控系统收集,汇总并分析日志信息达到有效监控系统性能和问题的效果.
 3.在唯品会体系中,Mercury提供的主要功能包括:
  定位慢调用:包括慢Web服务(包括Restful Web服务),慢OSP服务,慢SQL
  定位错误:包括4XX,5XX,OSP Error
  定位异常:包括Error Exception,Fatal Exception
  展现依赖和拓扑:域拓扑,服务拓扑,trace拓扑
  Trace调用链:将端到端的调用,以及附加在这次调用的上下文信息,异常日志信息,每一个调用点的耗时都呈现给用户
  应用告警:根据运维设定的告警规则,扫描指标数据,如违反告警规则,则将告警信息上报到唯品会中央告警平台
dubbo与Spring Cloud的比较
 1.dubbo出自于阿里,Spring cloud出自于Spring社区,基于Spring boot提供一套完整的微服务解决方案。dubbo或者dubbox是RPC框
 架,功能是Spring Cloud功能的一个子集。
 2.dubbo是RPC服务治理框架,和Spring Cloud一样具备服务注册、发现、路由、负载均衡等能力。但是没有配置中心,完整的好用全链路监
 控,需要采用开源的解决方案定制或者自研。Spring cloud的配置中心,全链路监控等组件。从目前来看,Spring Cloud国内中小型企业用的比较多,大型企业可能需要对其需要的组件进行定制化处理。
 3.Spring cloud基于注解的服务发现,服务治理等功能具有代码侵入性,dubbo没有代码侵入性,业务开发人员不需要通过注解的方式去关注

框架级别的处理。从中间件或者做基础架构的角度来看,其实服务治理等功能对普通的业务程序员应该是透明的,业务程序员不需要关注服务治理框架的使用,专注于业务代码即可。

RPC vs REST
外,由于Dubbo是基础框架,其实现的内容对于我们实施微服务架构是否合理,也需要我们根据自身需求去考虑是否要修改,比如Dubbo的服务调用是通过RPC实现的,但是如果仔细拜读过Martin Fowler的microservices一文,其定义的服务间通信是HTTP协议的REST API。那么这两种有何区别呢?
先来说说,使用Dubbo的RPC来实现服务间调用的一些痛点:
服务提供方与调用方接口依赖方式太强:我们为每个微服务定义了各自的service抽象接口,并通过持续集成发布到私有仓库中,调用方应用对微服务提供的抽象接口存在强依赖关系,因此不论开发、测试、集成环境都需要严格的管理版本依赖,才不会出现服务方与调用方的不一致导致应用无法编译成功等一系列问题,以及这也会直接影响本地开发的环境要求,往往一个依赖很多服务的上层应用,每天都要更新很多代码并install之后才能进行后续的开发。若没有严格的版本管理制度或开发一些自动化工具,这样的依赖关系会成为开发团队的一大噩梦。而REST接口相比RPC更为轻量化,服务提供方和调用方的依赖只是依靠一纸契约,不存在代码级别的强依赖,当然REST接口也有痛点,因为接口定义过轻,很容易导致定义文档与实际实现不一致导致服务集成时的问题,但是该问题很好解决,只需要通过每个服务整合swagger,让每个服务的代码与文档一体化,就能解决。所以在分布式环境下,REST方式的服务依赖要比RPC方式的依赖更为灵活。
服务对平台敏感,难以简单复用:通常我们在提供对外服务时,都会以REST的方式提供出去,这样可以实现跨平台的特点,任何一个语言的调用方都可以根据接口定义来实现。那么在Dubbo中我们要提供REST接口时,不得不实现一层代理,用来将RPC接口转换成REST接口进行对外发布。若我们每个服务本身就以REST接口方式存在,当要对外提供服务时,主要在API网关中配置映射关系和权限控制就可实现服务的复用了。
相信这些痛点也是为什么当当网在dubbox(基于Dubbo的开源扩展)中增加了对REST支持的原因之一。
小结:Dubbo实现了服务治理的基础,但是要完成一个完备的微服务架构,还需要在各环节去扩展和完善以保证集群的健康,以减轻开发、测试以及运维各个环节上增加出来的压力,这样才能让各环节人员真正的专注于业务逻辑。而Spring Cloud依然发扬了Spring Source整合一切的作风,以标准化的姿态将一些微服务架构的成熟产品与框架揉为一体,并继承了Spring Boot简单配置、快速开发、轻松部署的特点,让原本复杂的架构工作变得相对容易上手一些(如果您读过我之前关于Spring Cloud的一些核心组件使用的文章,应该能体会这些让人兴奋而激动的特性,传送门)。所以,如果选择Dubbo请务必在各个环节做好整套解决方案的准备,不然很可能随着服务数量的增长,整个团队都将疲于应付各种架构上不足引起的困难。而如果选择Spring Cloud,相对来说每个环节都已经有了对应的组件支持,可能有些也不一定能满足你所有的需求,但是其活跃的社区与高速的迭代进度也会是你可以依靠的强大后盾。
文档质量
Dubbo的文档可以说在国内开源框架中算是一流的,非常全,并且讲解的也非常深入,由于版本已经稳定不再更新,所以也不太会出现不一致的情况,另外提供了中文与英文两种版本,对于国内开发者来说,阅读起来更加容易上手,这也是dubbo在国内更火一些的原因吧。
Spring Cloud由于整合了大量组件,文档在体量上自然要比dubbo多很多,文档内容上还算简洁清楚,但是更多的是偏向整合,更深入的使用方法还是需要查看其整合组件的详细文档。另外由于Spring Cloud基于Spring Boot,很多例子相较于传统Spring应用要简单很多(因为自动化配置,很多内容都成了约定的默认配置),这对于刚接触的开发者可能会有些不适应,比较建议了解和学习Spring Boot之后再使用Spring Cloud,不然可能会出现很多一知半解的情况。
小结:虽然Spring Cloud的文档量大,但是如果使用Dubbo去整合其他第三方组件,实际也是要去阅读大量第三方组件文档的,所以在文档量上,我觉得区别不大。对于文档质量,由于Spring Cloud的迭代很快,难免会出现不一致的情况,所以在质量上我认为Dubbo更好一些。而对于文档语言上,Dubbo自然对国内开发团队来说更有优势。

阅读全文
0 0
原创粉丝点击