概述
我们快速看一遍官方文档: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 的“分布式构建块”概念与服务网格处理的问题领域有什么特别不同? 接下来我就详细说说。
理解“ Service Mesh 关注基础设施领域/网络,而 Dapr 强调开发人员体验” 这一点很重要。
- Service Mesh 感兴趣的主要是基础设施工程,尤其是网络层的通信管理/操作。
- Dapr 目标是在解决更多的软件工程问题。因此,Dapr 的 API 也被设计成可以直接从 应用代码中操作,而无需 系统管理员干预。
虽然 Dapr 和服务网格确实提供了一些重叠的功能,但 Dapr 不是服务网格,服务网格被定义为网络服务网格。与专注于网络问题的服务网格不同,Dapr 专注于提供构建块,使开发人员更容易将应用程序构建为微服务。Dapr 以开发人员为中心,而服务网格则以基础设施为中心。
在大多数情况下,开发人员不需要知道他们正在构建的应用程序将部署在包含服务网格的环境中,因为服务网格会拦截网络流量。服务网格主要由系统操作员管理和部署,而 Dapr 构建块 API 旨在供开发人员在其代码中明确使用。
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 的真正价值在于抽象了基础设施层,使源代码和基础设施之间的关系松耦合/可插拔,使得当前的微服务的开发初期和后期开发,在面对基础设施的的可变方面更有弹性。