Dapr 能否取代 Spring Cloud?

本文比较了Dapr和Spring Cloud在微服务开发中的优劣。Dapr以其语言无关性、开箱即用和更好的异构服务通信脱颖而出,而Spring Cloud则在服务发现和分布式追踪上有其优势。尽管两者各有千秋,Dapr的云原生特性和更低的耦合度使其在某些场景下更胜一筹,特别是在多语言环境和版本升级方面。
摘要由CSDN通过智能技术生成

很多人都是使用SpringBoot 和 Spring Cloud来开发微服务。Dapr 也是开发微服务的框架,它和Spring Cloud有什么区别呢,其实这不是一个区别的问题,它是不同的时代需要不同的框架。

Spring Cloud 是一种产品,提供了分布式应用程序所需的所有要素,包括服务发现、消息传递/流处理、分布式跟踪、 以易于处理的形式从springboot提供功能, 到目前为止,可能没有其他产品比 Spring Cloud 更易于使用。Spring Cloud并没有重复制造轮子,它只是将各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。

Spring Cloud 是分布式应用程序开发中的重要产品,足以影响语言选择。 假如你想使用Java 以外的语言开发微服务,比如golang,你想用Spring Cloud + Springboot , 最终还是选择了使用Java。

Dapr 的出现是分布式应用程序开发中拥有了语言无关的微服务开发,Dapr足以替代Spring Cloud成为云原生分布式应用开发的选择。熟悉Azure的人可能会觉得它其实更像是 Service Fabric 的加强版。

我们将Spring Cloud提供的组件与 Dapr 的构建块作一些横向对比:

总的来说无论是Dapr还是Spring Cloud上述这些项目,都是想帮助开发人员简单快速地构建分布式应用。但是由于时代背景的原因,它们的出发点、实现形式又存在一些差异。

我们从分布式应用程序的三大支柱性功能来比较一下Dapr 和 Spring Cloud:

  • 服务调用

  • 传递异步消息

  • 分布式追踪

  1. 服务调用

首先,比较从应用程序调用另一个应用程序的功能。

Dapr 的调用使用InvokeAPI

源代码如下所示:

@Value("${baseUrl}")

private String baseUrl;

@GetMapping("/invokeHello")

public Map<String, ?> invokeHello() {

Map<?, ?> result = restTemplate.getForObject(baseUrl + "/hello", Map.class);

return Map.of("baseUrl", baseUrl, "remoteMessage", result);

}

baseUrl 可以通过为 Dapr 指定调用 API的值来通过 Dapr 调用目标应用程序。http://localhost:${DAPR_HTTP_PORT}/v1.0/invoke/hello-app/method

Dapr 在本地环境中使用mDNS(多播DNS)从应用程序名称中查找目标服务运行的主机,而k8s使用k8s本身的名称解析功能。 在两者都不可用的环境中,您当前必须使用 Consul。

除此之外,Dapr 的优势在于它基本上可以做到开箱即用。

Spring Cloud 服务发现

spring cloud使用Netflix Eureka 进行名称解析,它具有 Eureka 服务器(等效于上述内容)作为名称解析的服务器,每个应用程序都使用Netflix 客户端向Eureka服务器注册自己,并用它来构建客户端来解决自己的主机。 服务注册表非常有用,因为它允许客户端负载平衡,并将服务提供商与使用者隔离开来,而无需 DNS。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值