微服务,除了Dubbo还能用什么?
Posted 恒拓开源
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微服务,除了Dubbo还能用什么?相关的知识,希望对你有一定的参考价值。
Dubbo是一个成熟分布式服务框架。十分适合作为微服务架构的框架。自从2011年开源至今,以其易用,全面,稳定等优点,以及阿里巴巴出品的背书,获得国内众多互联网公司广泛使用。
随着spring演化,我们有了诸如spring-boot,spring-webflux等新武器,能有效提高我们的开发效率。但是要让他们与Dubbo一起用,却不是一件易事。因为作为Dubbo的依赖,spring的主流版本是4.x,5.x也即将发布,而Dubbo依赖的spring版本还停留在2.x。在往后的日子,停止维护的Dubbo与新框架不兼容的问题会更加突出。
那么想要实施微服务,还有什么别的框架能用呢?其实,国外互联网公司也有不少解决方案,例如本次我们介绍的,Airbnb的Smartstack。
接下来我们通过对比微服务的4个核心组件,来看看Smartstack与Dubbo的区别:
服务注册、服务发现
Smartstack与Dubbo最大的不同在于服务发现和负载均衡模式。Dubbo使用的是客户端发现(client-side discovery)模式,把Dubbo客户端(jar)作为依赖引入工程,在微服务运行时将信息登记到注册中心。
图:client-side discovery
客户端发现模式的优点是直接简单,只需要将框架的客户端(jar)作为依赖引入项目,通过API调用实现服务注册和服务发现。另外Dubbo借助Spring框架的依赖注入,做到了无框架代码入侵。但即使这样,也有缺点,当客户端(jar)更新时,需要更新每一个微服务。另外,如果你的系统是多种编程语言组成的异构系统,则还需要为每一种编程语言提供相应的客户端。
Smartstack采用的则是服务端发现(server-side discovery)模式,这种模式将服务注册与服务发现功能独立到微服务进程外,独立运行,程序不需要知道服务注册和服务发现的存在。
图:Server-side discovery
负载均衡
Dubbo采用客户端模式实现微服务之间的负载均衡,通过在客户端(jar)内嵌不同的负载均衡算法实现。需要通过更新客户端更新负载均衡算法。
Smartstack则采用HAProxy作为负载均衡,为每一个微服务提供负载均衡,如下图所示:
图:Smartstack架构
为什么要这样设计呢?首先HAProxy是一个稳定的,高性能的负载均衡中间件。相对于客户端负载均衡,它有更优秀的性能和稳定性。而且修改负载均衡算法时,不需要更新或重新部署每一个微服务。编写程序时同样无需知道负载均衡的存在。
进程间通讯(IPC)
Dubbo集成了多种IPC框架供选择,能够覆盖大部分的应用场景。同样,通过Spring的依赖注入机制,实现算法无侵入和切换。
但无论如何,当我们需要引入新的中间件、新的协议,事情就会变得复杂起来。
而Smartstack的模式则可以做到协议无关,因为HAProxy工作在第四层。微服务可以像单机调用一样进行编程,负载均衡对程序是透明的。
例如我们需要做一个RESTfulAPI的调用,我们可以用Java的HttpClient,也可以用Node或Ruby的原生API进行http调用。也就是说,这套IPC机制,是语言中立的。
能够让我们的代码更纯粹、业务更易于开发。当然,技术没有银弹,更高的运维难度,是技术负责人不得不面对的副作用。
总结
Dubbo是一套十分优秀的分布式服务框架。然而当我们需要使用新的技术、异构语言的时候,Smartstack会是一个不错的选择。
以上是关于微服务,除了Dubbo还能用什么?的主要内容,如果未能解决你的问题,请参考以下文章
首次直播揭秘 Dubbo Ecosystem:从微服务框架到微服务生态
微服务初体验(二):使用Nacos作为配置中心并集成Dubbo