从服务之间的调用来看 我们为什么需要Dapr
Dapr 相关的文章我已经写了20多篇了[1] 。 当向其他人推荐Dapr 的时候,需要回答的一个问题就是:
Dapr 似乎并不是特别令人印象深刻。它提供了一组"构建块",解决了与构建微服务相关的几个挑战。这些构建基块包括服务到服务调用、发布订阅消息传递、状态管理、可观察性、机密管理和Actor 编程模型。 但是,我们不是已经有了所有这些的解决方案吗?
是的 任何构建微服务应用程序的人都已经不得不处理所有这些问题,我们看到这些人 提到的工具和框架对于减轻痛苦有很长的路要走。 我认为Dapr提供了一些独特的东西。为了说明这一点,我下面将选择一个最常见的构建块 - 服务到服务调用,以强调Dapr如何在您已经在使用的内容之上提供附加值。

当一个微服务需要调用另一个微服务时,需要发生几件事。
首先,我们需要服务发现 - 找到我们正在与之通信的服务地址。当然,Kubernetes通过内置的DNS使这变得非常轻松。但是,开发人员在其开发计算机上本地运行微服务的情况也很常见。在这种情况下,每个微服务都位于特定端口号上的 localhost,这要求您具有一些替代机制,以便在本地运行时指向正确的服务。使用Dapr,无论您是在"自托管"[2]模式下运行(直接在您的计算机上)还是在Kubernetes上运行,您都可以按名称对目标服务进行寻址,服务发现这项富有挑战性的工作交给Dapr 的可插拔的服务发现组件来完成。
其次,在微服务之间进行通信时,如果存在暂时性网络问题请务必重试[3]。当然,这可以通过像Polly[4]这样的库来自己实现,但这需要每个人都记得使用它,很有可能你在微服务中发现了一个错误,该错误是由于忘记实现重试而引起的。那么我们使用Dapr,这只是一个内置功能。
第三,微服务采用零信任的安全原则,保护微服务之间的通信非常重要。通常应使用 mTLS 对通信进行加密,并且应使用身份验证来验证调用方是否已获得授权。一个被广泛认可的最佳实践是使用相互 TLS,但正确配置可能会很痛苦,并且在开发时本地运行时通常会妨碍您。使用 Dapr,所有服务到服务的通信都会使用 mTLS 自动加密[5],并且证书会自动循环,这为你带走了一个巨大的心智负担。
第四,安全性的另一个方面是管理允许哪些微服务相互调用。例如,微服务 A 可能被允许与微服务 B 通信,但反之亦然。推出自己的框架来配置这样的东西可能会很痛苦,如果你不是安全专家,很容易出错。服务网格可以为 Kubernetes 集群提供这种行为。Dapr还可以通过访问控制列表[6]提供相同的访问限制,这些列表易于配置,甚至可以在"自托管"模式而不是Kubernetes中运行时工作。
第五,如果您具有分布式跟踪和指标收集功能,以便您了解微服务之间的通信,这也是非常有价值。在Azure 通过 Application Insights 提供了此功能,但同样,如果你在本地运行,你就用不了这项服务,而且据我的经验在所有服务上正确配置它时都遇到各种问题。使用 Dapr,可观察性[7]是运行时的另一个内置功能。它使用开放的标准,如OpenTelemetry和W3C跟踪,使它非常容易与现有工具集成,本地开发可以选择zipkin等兼容的解决方案。
最后,我们看到gRPC[8]作为基于HTTP的微服务API的替代品的兴起,因为它的性能更高。在微服务环境中从 HTTP 迁移到 gRPC 可能很棘手,因为您需要同时升级客户端和服务器,或者提供一个同时公开两种协议的接口进行迁移的兼容。Dapr再次可以帮助我们 - 允许gRPC或HTTP用于服务到服务调用[9],甚至允许HTTP调用方使用gRPC服务,Dapr的Sidecar和Sidecar 之间的所有通信都是通过gRPC。
因此,正如您所看到的,服务调用的"简单"任务有很多,Dapr为您提供了开箱即用的非常全面的解决方案。 Dapr 还提供了很多开箱即用的解决方案,看到这里你相信我了--我们非常需要Dapr 这样的解决方案。
相关参考:
[1]Dapr 文章: https://www.cnblogs.com/shanyou/category/1931296.html
[2]自托管:https://docs.dapr.io/operations/hosting/self-hosted/
[3]重试模式:https://docs.microsoft.com/zh-cn/azure/architecture/patterns/retry
[4]Polly: https://github.com/App-vNext/Polly
[5]自动加密: https://docs.dapr.io/concepts/security-concept/#sidecar-to-sidecar-communication
[6]访问控制列表:https://docs.dapr.io/operations/configuration/invoke-allowlist
[7]可观测性:https://docs.dapr.io/concepts/observability-concept/
[8]gRPC: https://grpc.io/
[9]允许gRPC或HTTP用于服务到服务调用: https://docs.dapr.io/developing-applications/building-blocks/service-invocation/howto-invoke-services-grpc/
从服务之间的调用来看 我们为什么需要Dapr的更多相关文章
- 33.服务之间的调用之RPC、Restful深入理解
33.服务之间的调用之RPC.Restful深入理解 2018年05月08日 01:52:42 郑学炜 阅读数 13577更多 分类专栏: 6.框架 版权声明:本文为博主原创文章,遵循CC 4.0 ...
- 第五章 SpringCloud之Eureka-Client使用RestTemplate实现服务之间的调用
注意:这个章节,请结合前几章节一起使用,因为其要调用上一章节的服务 1.pom.xml <?xml version="1.0" encoding="UTF-8&qu ...
- SpringCloud实战 | 第五篇:SpringCloud整合OpenFeign实现微服务之间的调用
一. 前言 微服务实战系列是基于开源微服务项目 有来商城youlai-mall 版本升级为背景来开展的,本篇则是讲述SpringCloud整合OpenFeign实现微服务之间的相互调用,有兴趣的朋友可 ...
- 服务之间的调用为啥不直接用 HTTP 而用 RPC?
什么是 RPC?RPC原理是什么? 什么是 RPC? RPC(Remote Procedure Call)-远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.比 ...
- JHipster技术栈定制 - 基于UAA的微服务之间安全调用
本文通过代码实例演示如何通过UAA实现微服务之间的安全调用. uaa: 身份认证服务,同时也作为被调用的资源服务.服务端口9999. microservice1: 调用uaa的消费者服务,服务端口80 ...
- 微服务之间的调用(Ribbon与Feign)
来源:https://blog.csdn.net/jrn1012/article/details/77837658 使用Eureka作为服务注册中心,在服务启动后,各个微服务会将自己注册到Eureka ...
- springcloud 入门 3 (服务之间的调用)
服务调用: 指的是注册到服务端上的客户端之间数据的相互调用问题:服务与服务的通讯是基于http restful的 服务直接调用主要有两种实现:ribbon 和 feign ribbon是实现负载均衡 ...
- 微服务~Eureka实现的服务注册与发现及服务之间的调用
微服务里一个重要的概念就是服务注册与发现技术,当你有一个新的服务运行后,我们的服务中心可以感知你,然后把加添加到服务列表里,然后当你死掉后,会从服务中心把你移除,而你作为一个服务,对其它服务公开的只是 ...
- 服务注册中心之ZooKeeper系列(二) 实现一个简单微服务之间调用的例子
上一篇文章简单介绍了ZooKeeper,讲了分布式中,每个微服务都会部署到多台服务器上,那服务之间的调用是怎么样的呢?如图: 1.集群A中的服务调用者如何发现集群B中的服务提供者呢? 2.集群A中的服 ...
随机推荐
- How Many Sets I(zoj3556)
How Many Sets I Time Limit: 2 Seconds Memory Limit: 65536 KB Give a set S, |S| = n, then how ma ...
- EXCEL技能 | EXCEL中实现地图快照,截大图、加水印、保存PNG、TIF、HTML文件
1 应用场景 本文分享笔者使用EXCEL制作地图的体验. 之前网上有人介绍使用小O地图EXCEL插件版能够在EXCEL中标注地图.绘制地图.可视化数据等操作.如下截图.笔者通过实验,其软件保存方式只能 ...
- Variational Inference with Normalizing Flow
目录 概 主要内容 一些合适的可逆变换 代码 Rezende D., Mohamed S. Variational Inference with Normalizing Flow. ICML, 201 ...
- Java面向对象笔记 • 【第10章 Swing编程初级应用】
全部章节 >>>> 本章目录 10.1 JFrame窗口容器 10.1.1 Swing介绍 10.1.2 JFrame窗口容器应用 JFrame常用方法 10.1.3 实践 ...
- FastStoneCapture屏幕截图软件
1.简介 FastStone Capture(FSCapture)是经典的屏幕截图软件, 可以捕捉全屏图像.活动窗口.任意指定截图形状, 而且还有图像编辑和屏幕录制功能, 还能支持屏幕放大镜和屏幕取色 ...
- Linux配置yum源(离线和在线)
配置yum源有2种方法,一种是离线yum源,另外一种是在线yum源. 一.离线yum源,基于安装光盘提供的安装仓库. 建立一个属于仓库文件夹 mkdir /media/zidong cd /media ...
- CSS基础6之盒子模型1
盒子概述 以下是盒子模型的一个图形解释 一.内边距(填充) 属性有: (1) padding 设置所有内边距 (2) padding-top 设置上边距 (3) padding-left 设置左边 ...
- html基础 有语义的布局标签
- CF858D Polycarp's phone book
题意翻译 有 n 个长度为 9 且只包含数字字符互不相同的串. 需要对于每个串找到一个长度最短的识别码,使得这个识别码当且仅当为这个串的子串. 题目分析 因为范围不是非常大,所以可以将子串筛出来 然后 ...
- 基于CentOS7.x gitlab环境搭建,卸载,汉化 --卸载篇
gitlab环境搭建,卸载,汉化 --卸载篇 完全卸载 停止gitlab gitlab-ctl stop 卸载gitlab rpm -e gitlab-ce 查看gitlab进程 ps aux | ...