手把手教你学Dapr - 4. 服务调用

介绍

通过使用服务调用,您的应用程序可以使用标准的gRPC或HTTP协议与其他应用程序可靠、安全地通信。

为什么不直接用HttpClientFactory呢

先问几个问题:

  • 如何发现和调用不同服务的方法
  • 如何安全地调用其他服务,并对方法应用访问控制
  • 如何处理重试和瞬态错误
  • 如何使用分布式跟踪指标来查看调用图来诊断生产中的问题

此时你会发现这些事情HttpClientFactory没有帮你完成,而在微服务中这些又是必不可少的能力,接下来看看服务调用都做了什么

服务调用如何工作的

先看一下两个服务之间的调用顺序

service-invocation-overview.png

  1. 服务A 向服务B发起一个HTTP/gRPC的调用。调用转到了本地的Dapr sidecar

  2. Dapr使用名称解析组件发现服务B的位置

  3. Dapr 将消息转发至服务 B的 Dapr sidecar

    : Dapr sidecar之间的所有调用都通过gRPC来提高性能。 仅服务与 Dapr sidecar之间的调用可以是 HTTP或gRPC

  4. 服务B 的 Dapr sidecar将请求转发至服务B 上的特定端点 (或方法) 。 服务B 随后运行其业务逻辑代码

  5. 服务B 发送响应给服务A。 响应将转至服务B 的Dapr sidecar

  6. Dapr 转发响应至服务A 的 Dapr sidecar

  7. 服务 A 接收响应

命名空间作用域

默认情况下,调用同一个命名空间的其他服务可以直接使用AppID(假设是:nodeapp)

localhost:3500/v1.0/invoke/nodeapp/method/neworder

服务调用也支持跨命名空间调用,在所有受支持的宿主平台上,Dapr AppID遵循FQDN格式,其中包括目标命名空间。

FQDN:(Fully Qualified Domain Name)全限定域名:同时带有主机名和域名的名称。(通过符号“.”)

例如:主机名是bigserver,域名是mycompany.com,那么FQDN就是bigserver.mycompany.com

​ **注:**FQDN是通过符号.来拼接域名的,这也就解释了AppID为什么不能用符号.,这里不记住的话,应该会有不少小伙伴会踩坑

​ 比如.net开发者习惯用 A.B.C 来命名项目,但AppID需要把.换成-且所有单词最好也变成小写 (a-b-c),建议把它变成约定遵守

比如调用命名空间:production,AppID:nodeapp

localhost:3500/v1.0/invoke/nodeapp.production/method/neworder

这在K8s集群中的跨名称空间调用中特别有用

服务间安全性

通过托管平台上的相互(mTLS)身份验证,包括通过Dapr Sentry服务的自动证书转移,可以确保Dapr应用程序之间的所有调用的安全。 下图显示了自托管应用程序的情况。

访问控制

应用程序可以控制哪些其他应用程序可以调用它们,以及通过访问策略授权它们做什么。 这使您能够限制具有个人信息的敏感应用程序不被未经授权的应用程序访问,并结合服务到服务的安全通信,提供了软多租户部署。

具体的访问控制后续章节会介绍

重试

在调用失败和瞬态错误的情况下,服务调用执行自动重试,并在回退时间段内执行。

**注:**自动重试,默认是开启的,可以关。但如果不关且业务又不支持幂等是很危险的。建议服务的接口要设计支持幂等,这在微服务里也是一个标配的选择。

导致重试的错误有:

网络错误,包括端点不可用和拒绝连接。

由于在调用/被调用的Dapr sidecars上更新证书而导致的身份验证错误。

每次呼叫重试的回退间隔为1秒,最多为3次。 通过gRPC与目标Sidecar连接的超时时间为5秒

可插拔的服务发现

Dapr可以在各种托管平台上运行。 为了启用服务发现和服务调用,Dapr使用可插拔的名称解析组件。 例如,K8s名称解析组件使用K8s DNS服务来解析集群中运行的其他应用程序的位置。 自托管机器可以使用mDNS名称解析组件。 Consul名称解析组件可以在任何托管环境中使用,包括K8s或自托管环境

划重点,自托管机器使用mDNS,在开发环境中后面文章会推荐VS上的无缝开发体验,就是基于mDNS的

但它有点点小问题,我们已经解决了。你只需要像开发一个控制台程序一样,基于Minimal API开心的F5就可以了

建议还没有了解Minimal API的小伙伴可以研究起来了,真香

使用mDNS进行轮询负载均衡

一图胜千言,就使用mDNS轮着调用

service-invocation-mdns-round-robin.png

可观测性的跟踪和指标

默认情况下,将跟踪应用程序之间的所有调用,并收集指标,以提供应用程序的洞察力和诊断,这在生产场景中尤其重要。 这为您提供了服务之间调用的调用图和指标。

服务调用API和gRPC代理

pythonapp 通过Dapr sidecar调用nodeapp,通过服务调用的API及gRPC代理依然是上面见到的那个调用流程,做到了语言无关

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值