首页 > 其他分享 >为什么 Dapr 如此令人兴奋

为什么 Dapr 如此令人兴奋

时间:2022-12-14 12:34:33浏览次数:54  
标签:API 为什么 name Kubernetes 开发人员 平台 令人兴奋 Dapr

如今你构建软件,您可以从数量众多的云服务中进行选择。仅 AWS 就每个月都在不断为其200多项服务添加新服务,而其他云提供商也都在跟上。 如果您的公司想与您的竞争对手竞争,您就需要充分利用这些服务,这些服务在不同的云提供商都有它的特色服务,我们的应用如何做到既是标准化又是可以个性化的,就拿消息队列来说吧,设置和管理您的消息队列并不会为您的产品增加任何价值,在Azure中期望使用Azure ServerBus,在阿里云你期望使用rocketmq,在私有云的k8s集群里你可以自由的选择rabbitmq,nat或者是redis,通过Dapr的components 让你无论是 Pub/Sub还是Binding 模块做到消息队列自由。

如果没有Dapr,你如何处理这个问题呢?通常都是让开发人员在具体的云提供商上平台选择他们想要的,虽然这听起来很有效,但对于几乎所有软件组织来说都是不切实际的,也不可取,因为开发人员会被各种选择所淹没。 应对这一挑战的方法是提供满足您特定需求的这些服务的一个子集,通常这是在平台团队中协作完成的,并在PaaS平台中体现出来。

Thoughtworks 的MartinFlow.Com有篇文章:​​介意平台执行差异​​: 开发人员生产力平台越来越被认为是管理工程团队认知负荷和缩短新功能上市时间的一种方式。然而,为了成功执行平台战略,组织需要培养一些基线能力。平台团队需要将平台视为一个软件产品,需要与用户对话,关注可靠的运营,以及健康的团队环境。Dapr 正是专门为构建平台而构建的,与其他方法相比具有一些优势,下面我认为特别重要的5点:

1、开发者友好的API

为什么 Dapr 如此令人兴奋_Azure

首先要正确的是API。 平台构建者需要一种方法来放置护栏并为开发人员提供可以轻松使用的 API, Dapr 基于 Open Application Model (OAM),最佳实践基于Kubernetes之上,对外提供标准的Http和Grpc 的API,  开发人员创建资源来请求特定服务也就很容易,例如利用Binding 构建块来使用Rabbitmq 消息队列,开发人员将执行简单的 kubectl apply ,然后通过标准的Http和Grpc 的API调用:

apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: RabbitBinding
spec:
type: bindings.rabbitmq
version: v1
metadata:
- name: queueName
value: queue1
- name: host
value: amqp://admin:[email protected]:5672
- name: durable
value: true
- name: deleteWhenUnused
value: false
- name: ttlInSeconds
value: 60
- name: prefetchCount
value: 0
- name: exclusive
value: false
- name: maxPriority
value: 5
对于 Kubernetes 开发人员来说,这很简单。这还有一个额外的好处,即我们可以无缝地融入庞大的 Kubernetes 工具生态系统。 特别是在当前流行的 GitOps ,而且在非 Kubernetes 开发人员也可以使用的。
2、 强大而灵活的组合

Dapr 每个标准的 API 背后的实现可能相当复杂,可能涉及设置正确的云提供商资源,如权限、网络、VPC 和数据库实例等等。 Dapr中的每个构建块都有来自云提供商的托管资源,Dapr 已经包括了AWS、Azure、GCP和阿里云的支持,并且社区正在增加各类组件的支持。

这些微服务基本构建块为开发人员提供跨平台跨语言的API实现。开发者可以专注于她请求的服务的属性,这些组合还可以与遗留或本地服务一起使用,这对于处于某种转型路径上的任何团队都至关重要。
Dapr利用Sidecar的模式,把代码中的一些横切关注点需求(Cross-cutting)分离和抽象出来,从而达到运行环境的独立和对外部依赖(包括服务之间)的独立.
3、强大的编程模型-Actors 和函数

Dapr 包含专门实现 ​​virtual actors 模式​​ 的运行时。 通过 Dapr 的实现,您可以根据 Actors 模型编写 Dapr Actor,而 Dapr 利用底层平台提供的可扩展性和可靠性保证,通过Actors的模式,让微服务可以以单线程的代码实现大规模并行处理。实际上,Actors这部分功能的开发人员就是来自于Service Fabric团队,两者的API也基本保持一致。通过这样的模式,也把Actors这种模式引入到了其他运行平台。

为什么 Dapr 如此令人兴奋_Azure_02

同时,Dapr还可以和微软开源的FaaS开发框架Azure Functions进行集成,Dapr开发团队也基于Azure Logic App的边缘运行时版本为微服务应用提供了Workflows的能力。​​OpenFunction​​ 正是基于 Dapr 提供了一套灵活的 functions framework 机制(其中包含了借鉴 Google functions-framework 处理 HTTP 函数的部分)实现了与各种复杂中间件的对接,并搭载两种运行时——以 Knative serving 为基础的同步函数运行时,和以 KEDA 结合 Dapr 为基础的异步函数运行时 OpenFunctionAsync,以期实现对实际生产中大部分应用场景的覆盖。

4、在在 K8s 的帮助下生产就绪

一个优秀的开发者平台应该被视为一个产品,这包括许多方面,但一个重要的方面是它以高度可用的方式运行。我们有一种架构和运行分布式应用程序的方法哪就是采用 Kubernetes, Dapr的最佳实践是建立在Kubernetes之上,它使用 Kubernetes 控制器和持续协调的概念来运行平台,如果有什么东西坏了(它会),Dapr 将检查并修复状态,也就是你经常听到 Kubernetes 专家说的类似 Operators 和 control plane 的东西。

5、开源和开放治理

选择一个优秀的开发者平台的一个重要特征是开源的,由于开发人员平台将成为您软件交付的重要组成部分,您将希望确保您的投资安全。Dapr 不仅是开源的(当前采用MIT协议,捐献给CNCF之后将会改成Apache 2.0),正在捐献给CNCF,目前正处于尽职调查阶段,它也是公开社区管理的,Dapr于 2020 年 9 月​​首次转变为开放治理模式​​​,2021年9月成立了STC( Dapr 指导和技术委员会),专注于与更广泛的 Dapr 社区合作,制定指导和技术委员会的章程、职责和愿景,并与成员一起引导以确保供应商中立。具体参见 ​​https://blog.dapr.io/posts/2021/09/20/announcing-daprs-steering-and-technical-committee/​

为什么 Dapr 如此令人兴奋_API_03

标签:API,为什么,name,Kubernetes,开发人员,平台,令人兴奋,Dapr
From: https://blog.51cto.com/shanyou/5936354

相关文章

  • GO语言基础 为什么我要学习Golang以及GO语言入门普及
    作为网络安全初学者,会遇到采用Go语言开发的恶意样本。因此从今天开始从零讲解Golang编程语言,一方面是督促自己不断前行且学习新知识;另一方面是分享与读者,希望大家一起进......
  • 在vue的v-for中,key为什么不能用index?
    写在前面在前端中,主要涉及的基本上就是DOM的相关操作和JS,我们都知道DOM操作是比较耗时的,那么在我们写前端相关代码的时候,如何减少不必要的DOM操作便成了前端优化的......
  • 为什么如此重要又如此困难
    一个好的绩效管理系统的要素很简单,但将它们集成到企业的基本操作系统中却比看起来要困难得多。有效的绩效管理对企业至关重要。通过正式和非正式流程,它帮助企业调整员工......
  • 为什么跨链这么麻烦
    跨链听上去是一个简单的事情跨链最基础的目标是,某一条链上发生的交易在另一条链上被认可,也就是链二同意链一上发的交易确实发生,然后以此为基础做一些操作,实际上就是链二......
  • 为什么不建议使用std::thread及解决方法
     使用std::thread创建线程,代码逻辑如果存在某些异常,。这时候程序会产生coredump,但是分析coredump,会发现调用栈是缺失的,造成定位问题困难;问题描述:源码:1#inc......
  • 为什么JAVA文件中只能含有一个Public类?
    为什么JAVA文件中只能含有一个Public类?java程序是从一个public类的main函数开始执行的,(其实是main线程),就像C程序是从main()函数开始执行一样。只能有一个pu......
  • 为什么实例化class报错segmentation fault而指针不会
    问题做单元测试的时候遇到一个奇怪的问题classEvaluator{public:explicitEvaluator(){};//...}Evaluatoreval;//segmentationfalutstd::unique_p......
  • React StrictMode 生命周期为什么会执行两次?
    什么是React.StrictMode?React.StrictMode是在2018年的16.3.0版本中引入的组件。一开始,它只用在类组件中,而在16.8.0中,它对hook同样适用。就像在版本说明中提及......
  • 为什么电脑的时间总是快2分钟
    由于工作需要,今天领到一台新的笔记本,轻轻地抚摸"新伙伴"的同时,发现笔记本的时间,快了2分钟,o((⊙﹏⊙))o表情~~明明已经联网了,为啥还是快两分钟呢?于是我就一顿操作猛如虎,结果一......
  • 为什么总是应该考虑给定 List 的初始大小
    在.Net技术中,使用List<>来存储数据是很常见的。List<>是一个可以动态增长的泛型集合类型,可以存储任何类型的数据。但是,在实际使用中,很多人并不注意给定List<>的初......