概述

我们快速看一遍官方文档:https://docs.dapr.io/concepts/service-mesh/#how-dapr-and-service-meshes-compare ,看看 Dapr 的开发团队是如何看待 Dapr 和 Service Mesh 在产品概念上的差异的,从1.5版本之后Dapr 功能的添加正在朝着标准化/增强重试/超时/断路器的实现的方向发展。因此,与 Service Mesh 产品的差异似乎在缩小。

  • Dapr 是一种旨在“促进微服务本身的开发”的产品,而不是 Service Mesh。
    • 但是,Dapr 有一些类似于服务网格的特性,例如分布式跟踪。
  • 由于上述原因,有些用例无法单独由 Dapr 实现。具体来说,如果你想要A/B测试等的Traffic Splitting功能,你需要配合Service Mesh产品使用。
当我们在Azure 的 AKS 上构建微服务的解决方案时,我们经常会看到关键字 Dapr 和 Open Service Mesh(Open Service Mesh是微软开源的Service Mesh产品) 。两者都采用了边车模式, 并且两者似乎正试图接近技术上相似的领域。 那么Dapr 和 Open Service Mesh 的产品理念有何不同?
Dapr 不是Service Mesh 产品

查看Dapr的官方文档中的 FAQ:Dapr 与 Istio、Linkerd 或 OSM 等服务网格相比如何,明确指出网络领域的问题,例如服务网格产品解决的问题,不是主要目标。 Dapr 的目标是为 “开发人员”构建微服务时创建构建块

Dapr 不是服务网格。服务网格专注于细粒度的网络控制, 而 Dapr 则专注于帮助开发人员构建分布式应用程序。Dapr 和服务网格都使用 sidecar 模式并与应用程序一起运行。它们确实有一些重叠的功能,但也提供了独特的好处。有关更多信息,请阅读 Dapr 和服务网格概念页面:https://docs.dapr.io/concepts/service-mesh/

Dapr 的“分布式构建块”概念与服务网格处理的问题领域有什么特别不同? 接下来我就详细说说。

Dapr 文档 : Dapr 和服务网格如何比较

理解“ Service Mesh 关注基础设施领域/网络,而 Dapr 强调开发人员体验” 这一点很重要。

  • Service Mesh 感兴趣的主要是基础设施工程,尤其是网络层的通信管理/操作。
  • Dapr 目标是在解决更多的软件工程问题。因此,Dapr 的 API 也被设计成可以直接从 应用代码中操作,而无需 系统管理员干预。

虽然 Dapr 和服务网格确实提供了一些重叠的功能,但 Dapr 不是服务网格,服务网格被定义为网络服务网格。与专注于网络问题的服务网格不同,Dapr 专注于提供构建块,使开发人员更容易将应用程序构建为微服务。Dapr 以开发人员为中心,而服务网格则以基础设施为中心。
在大多数情况下,开发人员不需要知道他们正在构建的应用程序将部署在包含服务网格的环境中,因为服务网格会拦截网络流量。服务网格主要由系统操作员管理和部署,而 Dapr 构建块 API 旨在供开发人员在其代码中明确使用。

Dapr 文档:  Dapr 和 服务网格如何比较

Dapr 和Open Service Mesh 具体功能差异

综上所述,我们可以将这两个产品的特性整理如下。

  • Open Service Mesh是一个有Service Mesh 形态的产品。因此,主要兴趣是从基础设施的角度来运营网络。
  • Dapr 旨在使微服务对开发人员来说尽可能简单,并且只涵盖从软件开发角度实现它所需的功能。

Dapr 和 Open Service Mesh 功能之间的具体区别官方文档中查看。您可以看到流量路由和流量拆分功能超出了 Dapr 的范围,它属于Open Servvice Mesh的范围。

如何正确使用Dapr 和 服务网格

接下来出现的问题是 “我应该以什么标准正确使用 Dapr 和 Open Service Mesh ?”,具体看这个文档内容: FAQ:何时选择使用 Dapr、服务网格或者两者兼存

  • 如果您想使用 Dapr 提供的构建块开发微服务,我们建议仅使用 Dapr。Dapr 也支持分布式跟踪。
  • 对于“我要加密微服务之间的通信”的用例, Dapr 只可以处理所有微服务都有 Dapr sidecar 的情况。但是,如果您想加密没有 Dapr sidecar 的微服务或其他组件,您还需要使用 Service Mesh 产品。
  • 此外,如果你想为 A/B 测试等进行流量拆分,你需要与 Service Mesh 产品集成。
    • 例如,如果您希望使用 Dapr 的一个或多个构建块,例如状态管理或发布/订阅,并且您正在考虑仅将服务网格用于网络安全或者可观察性,您可能会发现 Dapr 非常适合并不需要服务网格。
    • 通常,您会使用带有 Dapr 的服务网格,即必须为所有应用程序加密网络上的流量。例如,您可能在应用程序中仅使用 Dapr 的一部分,而在您的应用程序中未使用 Dapr 的其他服务和进程也需要对其流量进行加密。在这种情况下,服务网格是更好的选择,很可能您应该在服务网格上使用 mTLS 和分布式跟踪,并在 Dapr 上禁用它。
    • 如果您需要 A/B 测试场景的流量拆分,您将从使用服务网格中受益,因为 Dapr 不提供这些功能。
      常见问题解答:何时选择使用 Dapr、服务网格或两者兼存
总结

我希望上面这些内容对你有帮助,这些内容都来自官方文档中关于Dapr 和服务网格的内容。 Dapr 的真正价值在于抽象了基础设施层,使源代码和基础设施之间的关系松耦合/可插拔,使得当前的微服务的开发初期和后期开发,在面对基础设施的的可变方面更有弹性。

Dapr 不是服务网格,只是我长的和他很像的更多相关文章

  1. 初识 Istio - 服务网格管理工具

    What is a service mesh(服务网格)? 微服务在国内流行已经多年了,大多数公司选择了基于容器化技术( Docker )以及容器编排管理平台 ( Kubernetes )落地微服务 ...

  2. 通过Dapr实现一个简单的基于.net的微服务电商系统(十二)——istio+dapr构建多运行时服务网格

    多运行时是一个非常新的概念.在 2020 年,Bilgin Ibryam 提出了 Multi-Runtime(多运行时)的理念,对基于 Sidecar 模式的各种产品形态进行了实践总结和理论升华.那到 ...

  3. 通过Dapr实现一个简单的基于.net的微服务电商系统(十三)——istio+dapr构建多运行时服务网格之生产环境部署

    之前所有的演示都是在docker for windows上进行部署的,没有真正模拟生产环境,今天我们模拟真实环境在公有云上用linux操作如何实现istio+dapr+电商demo的部署. 目录:一. ...

  4. Service Mesh服务网格:是什么和为什么

    Service Mesh服务网格:是什么和为什么 - 好雨云帮 CSDN 博客 - CSDN博客 https://blog.csdn.net/zyqduron/article/details/8043 ...

  5. Service Mesh服务网格新生代--Istio(转)

    万字解读:Service Mesh服务网格新生代--Istio  官网地址:https://preliminary.istio.io/zh/docs/concepts/security/ Servic ...

  6. 【译文连载】 理解Istio服务网格(第七章 安全)

    全书目录 第一章 概述 第二章 安装 第三章 流控 第四章 服务弹性 第五章 混沌测试 第六章 可观测性 本文目录 第7章 安全 7.1 身份认证 7.1.1 Kubernetes上的Istio的身份 ...

  7. 通过Dapr实现一个简单的基于.net的微服务电商系统(六)——一步一步教你如何撸Dapr之Actor服务

    我个人认为Actor应该是Dapr里比较重头的部分也是Dapr一直在讲的所谓"stateful applications"真正具体的一个实现(个人认为),上一章讲到有状态服务可能很 ...

  8. 精彩分享 | 欢乐游戏 Istio 云原生服务网格三年实践思考

    作者 吴连火,腾讯游戏专家开发工程师,负责欢乐游戏大规模分布式服务器架构.有十余年微服务架构经验,擅长分布式系统领域,有丰富的高性能高可用实践经验,目前正带领团队完成云原生技术栈的全面转型. 导语 欢 ...

  9. 揭开服务网格~Istio Service Mesh神秘的面纱

    目录 一.写在前面 二.微服务与K8S 三.服务网格与K8S 四.常见的产品 五.Istio架构 六.Istio的核心资源介绍 6.1.VirtualService 6.2.Destination R ...

随机推荐

  1. XMLBeanFactory ?

    最常用的就是 org.springframework.beans.factory.xml.XmlBeanFactory ,它 根据 XML 文件中的定义加载 beans.该容器从 XML 文件读取配置 ...

  2. 说说 Redis 哈希槽的概念?

    Redis 集群没有使用一致性 hash,而是引入了哈希槽的概念,Redis 集群有 16384 个哈希槽,每个 key 通过 CRC16 校验后对 16384 取模来决定放置哪个槽, 集群的每个节点 ...

  3. 学习zabbix(六)

    实验环境 实验用2到2台机器,实验所用机器系统环境如下,可以看到2台机器的主机名和IP地址 ? 1 2 3 4 5 6 7 8 9 10 [root@linux-node1 ~]# cat /etc/ ...

  4. 以太网在汽车行业中的挑战——灵活的接口及软件使ECU开发不再复杂

    以太网在汽车行业中的挑战--灵活的接口及软件使ECU开发不再复杂 以太网将会在一批新车型中作为一个车载系统网络使用.因此,下一步就是以太网和现有汽车网络技术的集成,包括:CAN.FlexRay.LIN ...

  5. css布局中左侧固定右侧自适应

    float 单一层浮动法左侧固定成100px; 则核心代码 左侧:width:100px;float:left; 右侧 width:auto;margin-left:100px;绝大浏览器是没有任何问 ...

  6. 从零开始开发一款H5小游戏(二) 创造游戏世界,启动发条

    本系列文章对应游戏代码已开源 Sinuous game 上一节介绍了canvas的基础用法,了解了游戏开发所要用到的API.这篇文章开始,我将介绍怎么运用这些API来完成各种各样的游戏效果.这个过程更 ...

  7. React 可视化开发工具 shadow-widget 的非可视开发方法

    Shadow Widget 提倡在可视设计器中开发用户界面,输出转义标签,而非 JSX.许多童鞋可能不知道 SW 同样支持用 JSX 设计界面,开发体验比原生 React 编程好出很多,本文就介绍这方 ...

  8. 前端系列——React开发必不可少的eslint配置

    项目需要安装的插件 "babel-eslint": "^8.0.3", "eslint": "^4.13.1", &qu ...

  9. C++:Abstract class : invalid abstract return type for member function ‘virtual...’

    #include <iostream> #include <cmath> #include <sstream> using namespace std; class ...

  10. CentOS7 Network Setting

    #display devices[root@localhost ~]# nmcli d #set ipv4 address[root@localhost ~]# nmcli c modify eth0 ...