通过服务调用,您的应用程序可以使用标准的gRPC或HTTP协议可靠且安全地与其他应用程序进行通信。
在许多基于微服务的应用程序中,多个服务需要能够相互通信。这种服务间通信要求应用程序开发人员处理以下问题:
Dapr通过提供一个类似反向代理的服务调用API来解决这些挑战,该API内置了服务发现,并利用了分布式追踪、指标、错误处理、加密等功能。
Dapr采用sidecar架构。要使用Dapr调用应用程序:
invoke
API。以下概述视频和演示展示了Dapr服务调用的工作原理。
下图概述了Dapr的服务调用在两个集成Dapr的应用程序之间的工作原理。
您还可以使用服务调用API调用非Dapr HTTP端点。例如,您可能只在整个应用程序的一部分中使用Dapr,可能无法访问代码以迁移现有应用程序以使用Dapr,或者只是需要调用外部HTTP服务。阅读“如何:使用HTTP调用非Dapr端点”以获取更多信息。
服务调用提供了多种功能,使您可以轻松地在应用程序之间调用方法或调用外部HTTP端点。
dapr-app-id
头即可开始。有关更多信息,请参阅使用HTTP调用服务。通过Dapr Sentry服务,所有Dapr应用程序之间的调用都可以通过托管平台上的相互(mTLS)认证来实现安全,包括自动证书轮换。
有关更多信息,请阅读服务到服务的安全性文章。
在调用失败和瞬态错误的情况下,服务调用提供了一种弹性功能,可以在回退时间段内自动重试。要了解更多信息,请参阅弹性文章。
默认情况下,所有应用程序之间的调用都会被追踪,并收集指标以提供应用程序的洞察和诊断。这在生产场景中特别重要,提供了服务之间调用的调用图和指标。有关更多信息,请阅读可观测性。
通过访问策略,应用程序可以控制:
例如,您可以限制包含人员信息的敏感应用程序不被未授权的应用程序访问。结合服务到服务的安全通信,您可以提供软多租户部署。
有关更多信息,请阅读服务调用的访问控制允许列表文章。
您可以将应用程序限定到命名空间以进行部署和安全,并在部署到不同命名空间的服务之间进行调用。有关更多信息,请阅读跨命名空间的服务调用文章。
Dapr通过mDNS协议提供服务调用请求的轮询负载均衡,例如在单台机器或多台联网的物理机器上。
下图显示了其工作原理的示例。如果您有一个应用程序实例,应用程序ID为FrontEnd
,以及三个应用程序实例,应用程序ID为Cart
,并且您从FrontEnd
应用程序调用Cart
应用程序,Dapr在三个实例之间进行轮询。这些实例可以在同一台机器上或不同的机器上。
注意:应用程序ID在_应用程序_中是唯一的,而不是应用程序实例。无论该应用程序存在多少个实例(由于扩展),它们都将共享相同的应用程序ID。
Dapr可以在多种托管平台上运行。为了启用可交换的服务发现,Dapr使用名称解析组件。例如,Kubernetes名称解析组件使用Kubernetes DNS服务来解析在集群中运行的其他应用程序的位置。
自托管机器可以使用mDNS名称解析组件。作为替代方案,您可以使用SQLite名称解析组件在单节点环境中运行Dapr,并用于本地开发场景。属于集群的Dapr sidecar将其信息存储在本地机器上的SQLite数据库中。
Consul名称解析组件特别适合多机部署,并且可以在任何托管环境中使用,包括Kubernetes、多台虚拟机或自托管。
您可以在HTTP服务调用中将数据作为流处理。这可以在使用Dapr通过HTTP调用另一个服务时提供性能和内存利用率的改进,尤其是在请求或响应体较大的情况下。
下图演示了数据流的六个步骤。
按照上述调用顺序,假设您有如Hello World教程中描述的应用程序,其中一个Python应用程序调用一个Node.js应用程序。在这种情况下,Python应用程序将是"服务A",Node.js应用程序将是"服务B"。
下图再次显示了本地机器上的1-7序列,显示了API调用:
nodeapp
。Python应用程序通过POST http://localhost:3500/v1.0/invoke/nodeapp/method/neworder
调用Node.js应用程序的neworder
方法,该请求首先发送到Python应用程序的本地Dapr sidecar。Dapr文档包含多个利用服务调用构建模块的快速入门,适用于不同的示例架构。为了直观地理解服务调用API及其功能,我们建议从我们的快速入门开始:
快速入门/教程 | 描述 |
---|---|
服务调用快速入门 | 这个快速入门让您直接与服务调用构建模块进行交互。 |
Hello World教程 | 本教程展示了如何在本地机器上运行服务调用和状态管理构建模块。 |
Hello World Kubernetes教程 | 本教程演示了如何在Kubernetes中使用Dapr,并涵盖了服务调用和状态管理构建模块。 |
想跳过快速入门?没问题。您可以直接在应用程序中试用服务调用构建模块,以安全地与其他服务通信。在Dapr安装完成后,您可以通过以下方式开始使用服务调用API。
使用以下方式调用服务:
dapr-app-id
头即可开始。有关更多信息,请阅读使用HTTP调用服务。localhost:<dapr-http-port>
,您就可以直接调用API。您还可以在上面链接的HTTP代理文档中阅读更多关于此的信息。为了快速测试,尝试使用Dapr CLI进行服务调用:
dapr invoke --method <method-name>
命令以及方法标志和感兴趣的方法。有关更多信息,请阅读Dapr CLI。