很少写技术相关的文,虽然自己是技术出身的,也热衷于技术,但是思考问题却很少站在纯粹技术角度,因为我始终相信技术是为业务目标服务的。
因为产品的需要,最近花了不少时间做技术原型。而在服务架构方面,当下最火的当属微服务架构。而最成熟也最受欢迎的服务框架当属SpringCloud和阿里的Duubo。这个过程也整合了一些之前项目成果。因此把Dubbo也进行了一个系统了解,也与如日中天的SpringCloud做了一个对比分析,目的是热加深对微服务框架的理解和应用。
首先Dubbo和Spring Cloud并不是完全的竞争关系,两者所解决的问题域不一样:Dubbo的定位始终是一款RPC框架,而Spring Cloud的目的是微服务架构下的一站式解决方案。非要比较的话,Dubbo可以类比到Netflix OSS技术栈,而Spring Cloud集成了Netflix OSS作为分布式服务治理解决方案,但除此之外Spring Cloud还提供了包括config、stream、security、sleuth等分布式服务解决方案。当前由于RPC协议、注册中心元数据不匹配等问题,在面临微服务基础框架选型时Dubbo与Spring Cloud只能二选一,这也是两者总拿来做对比的原因。Dubbo之后会积极寻求适配到Spring Cloud生态,比如作为SpringCloud的二进制通讯方案来发挥Dubbo的性能优势,或者Dubbo通过模块化以及对http的支持适配到Spring Cloud。
要说两者最大区别在于Spring Cloud抛弃了Dubbo 的RPC通信,采用的是基于HTTP的REST方式。严格来说,这两种方式各有优劣。虽然在一定程度上来说,后者牺牲了服务调用的性能,但也避免了上面提到的原生RPC带来的问题。而且REST相比RPC更为灵活,服务提供方和调用方的依赖只依靠一纸契约,不存在代码级别的强依赖,这在强调快速演化的微服务环境下,显得更为合适。