开源微服务如何选型?Spring Cloud、Dubbo、gRPC、Istio 详细对比 - 掘金
不论您是一名开发者、架构师、CTO, 如果您曾深度参与在微服务开发中,那么相信您一定有过开源微服务框架或体系选型的疑问:Apache Dubbo、Spring Cloud、gRPC 以及 Service Mesh 体系产品如 Istio,到底应该选型哪一个?这篇文章对这几个框架进行了详细的说明,并在选型方面给了一定的指导意见,相信能给微服务开发者带来一定的帮助。
需要注意的是,这篇文章的作者有深度 Apache Dubbo 社区参与经验,因此整篇文章是以 Dubbo 为基础展开的,通过将 Dubbo 与其他组件之间的联系与差异客观、透明的展现出来,来向读者呈现几款开源产品的优势和适用场景。整篇文章中有部分内容突出了 Apache Dubbo 项目的优势,请大家在阅读过程中保持对这点的认识,但它总体上并不影响我们从总体上了解每个产品并获得具有价值的选型指导。
Dubbo 与 Spring Cloud
从上图我们可以看出,Dubbo 和 Spring Cloud 有很多相似之处,它们都在整个架构图的相同位置并提供一些相似的功能。
- Dubbo 和 Spring Cloud 都侧重在对分布式系统中常见问题模式的抽象(如服务发现、负载均衡、动态配置等), 同时对每一个问题都提供了配套组件实现,形成了一套微服务整体解决方案,让使用 Dubbo 及 Spring Cloud 的用户在开发微服务应用时可以专注在业务逻辑开发上。
- Dubbo 和 Spring Cloud 都完全兼容 Spring 体系的应用开发模式, Dubbo 对 Spring 应用开发框架、Spring Boot 微服务框架都做了很好的适配,由于 Spring Cloud 出自 Spring 体系,在这一点上自然更不必多说。
虽然两者有很多相似之处,但由于它们在诞生背景与架构设计上的巨大差异,两者在性能、适用的微服务集群规模、生产稳定性保障、服务治理等方面都有很大差异。
Spring Cloud 的优势在于:
- 同样都支持 Spring 开发体系的情况下,Spring Cloud 得到更多的原生支持。
- 对一些常用的微服务模式做了抽象如服务发现、动态配置、异步消息等,同时包括一些批处理任务、定时任务、持久化数据访问等领域也有涉猎。
- 基于 HTTP+JSON 的通信模式,对于开发、测试、上下游体系接入等更友好,成本更低。
- Spring Cloud 官方具有相对完善的入门文档和演示 demo 和 starters,包括书籍资料等,让开发者上更易于上手。
Spring Cloud 的问题有:
- 只提供抽象模式的定义不提供官方稳定实现,开发者只能寻求类似 Netflix、Alibaba、Azure 等不同厂商的实现套件,而每个厂商支持的完善度、稳定性、活跃度各异。
- 有微服务全家桶却不是能拿来就用的全家桶,demo 上手容易,但落地推广与长期使用的成本并不低。
- 欠缺服务治理能力,尤其是流量管控方面如负载均衡、流量路由方面能力都比较弱。
- 编程模型与通信协议绑定 HTTP,在性能、与其他 RPC 体系互通上存在障碍。