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

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

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

1、开发者友好的API

首先要正确的是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.rabbitmqversion: v1metadata:- name: queueNamevalue: queue1- name: hostvalue: amqp://admin:123456@192.168.43.101:5672- name: durablevalue: true- name: deleteWhenUnusedvalue: false- name: ttlInSecondsvalue: 60- name: prefetchCountvalue: 0- name: exclusivevalue: false- name: maxPriorityvalue: 5
对于 Kubernetes 开发人员来说,这很简单。这还有一个额外的好处,即我们可以无缝地融入庞大的 Kubernetes 工具生态系统。特别是在当前流行的 GitOps ,而且在非 Kubernetes 开发人员也可以使用的。
Dapr利用Sidecar的模式,把代码中的一些横切关注点需求(Cross-cutting)分离和抽象出来,从而达到运行环境的独立和对外部依赖(包括服务之间)的独立.
2、 强大而灵活的组合
Dapr 每个标准的 API 背后的实现可能相当复杂,可能涉及设置正确的云提供商资源,如权限、网络、VPC 和数据库实例等等。Dapr中的每个构建块都有来自云提供商的托管资源,Dapr 已经包括了AWS、Azure、GCP和阿里云的支持,并且社区正在增加各类组件的支持。
这些微服务基本构建块为开发人员提供跨平台跨语言的API实现。开发者可以专注于她请求的服务的属性,这些组合还可以与遗留或本地服务一起使用,这对于处于某种转型路径上的任何团队都至关重要。
3、强大的编程模型-Actors 和函数
Dapr 包含专门实现 virtual actors 模式 的运行时。通过 Dapr 的实现,您可以根据 Actors 模型编写 Dapr Actor,而 Dapr 利用底层平台提供的可扩展性和可靠性保证,通过Actors的模式,让微服务可以以单线程的代码实现大规模并行处理。实际上,Actors这部分功能的开发人员就是来自于Service Fabric团队,两者的API也基本保持一致。通过这样的模式,也把Actors这种模式引入到了其他运行平台。
同时,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 如此令人兴奋相关推荐

  1. pacf和acf_如何通过Wordpress API,ACF和Express.js使Wordpress更加令人兴奋

    pacf和acf by Tyler Jackson 泰勒·杰克逊(Tyler Jackson) 如何通过Wordpress API,ACF和Express.js使Wordpress更加令人兴奋 (Ho ...

  2. 运筹学状态转移方程例子_逆转的薛定谔方程,美俄科学家实现量子时间“倒流”,令人兴奋...

    根据现代宇宙学的定义,宇宙是时间和空间的统称.或者说,时间和空间一起,构成了我们的宇宙. 不过,虽然同是宇宙的组成部分,空间和时间不一样,因为空间可以向前也可以向后,但时间却只有一个方向,那就是向前, ...

  3. Dapr + .NET 实战(十四)虚拟机集群部署 mDNS + Consul

    前面我们说了在单机模式下和K8S集群下的Dapr实战,这次我们来看看如何在不使用K8S的情况下,在一个传统的虚拟机集群里来部署Dapr. 1.环境准备 我们准备两台centos7虚拟机 Dapr1:1 ...

  4. Dapr + .NET 实战(十三)跨语言开发

    欢迎大家参加4小时Dapr+.NET 5的实战课程 课程链接     https://ke.qq.com/course/4000292?tuin=1271860f 因为基于Dapr的服务架构是不限语言 ...

  5. 单体应用 适合采用 dapr 构建吗?

    缘起今天在微信群里有同学问 "纯.net 项目,有必要上dapr吗?" 当时不假思索的说不是微服务没必要,其他群友也说没必要.下午细想了一下,觉得这个和微服务没有关系,如果我的应用 ...

  6. Dapr + .NET 实战(十二)服务调用之GRPC

    欢迎大家参加4小时Dapr+.NET 5的实战课程 课程链接     https://ke.qq.com/course/4000292?tuin=1271860f 什么是GRPC gRPC 是一种与语 ...

  7. Dapr + .NET 实战(十-终篇)K8S运行Dapr

    工作原理 为了实现在k8s上安装Dapr,Dapr需要部署dapr-sidecar-injector.dapr-operator.dapr-placement和dapr-sentry服务. dapr- ...

  8. Envoy实现.NET架构的网关(一)静态配置与文件动态配置

    什么是Gateway 在微服务体系结构中,如果每个微服务通常都会公开一组精细终结点,这种情况可能会有以下问题 如果没有 API 网关模式,客户端应用将与内部微服务相耦合. 在客户端应用中,单个页面/屏 ...

  9. css实验内容,12个令人惊叹的CSS实验项目

    翻译:疯狂的技术宅 本文首发微信公众号:jingchengyideng 欢迎关注,每天都给你推送新鲜的前端技术文章 你可能认为 CSS 只是一种简单地为网页设计样式的语言,但它的功能比你想象的要多得多 ...

最新文章

  1. 关于二叉树的层次遍历的花样(c++实现)
  2. sqlserver中,如果正确得到中文的长度
  3. 电信 IPRAN 设备组网方案_国内首家5G核心网电信设备进网许可证;电信5G网络增强方案获认可;美国最大规模毫米波拍卖...
  4. SCCM 2012R2 部署教程之二——部署数据库
  5. 一层循环时间复杂度_数据结构:二叉排序树的前/中/后序遍历(递归与循环两种版本)...
  6. 文献学习(part9)--基于模型分解的小样本学习
  7. 敏捷开发模式下如何更好的进行测试
  8. [转]关于频率、模拟角频率、数字角频率
  9. 打造云上深度学习实验室
  10. 学习笔记︱深度学习以及R中并行算法的应用(GPU)
  11. Linux设备驱动模型-Kobject
  12. 2020-12-05
  13. 软件架构设计原则--开闭原则
  14. Windows+Ubuntu 搭建私有云桌面服务
  15. Scrum板与Kanban如何抉择?kxqmoznsc板与按照rlooie
  16. 从阿里离职10天后,疯狂投简历面了4家公司,我的感受——不可名状的痛
  17. c语言字符统计2sdut,C语言实验——单词统计(字符串) SDUT
  18. 古希腊神话故事3 :丢卡利翁和皮拉
  19. hbuilder 断点_Hbuilder配置php断点调试
  20. osgEarth使用笔记4——加载矢量数据

热门文章

  1. 百度2012校招笔试题之全排列与组合
  2. 10月Web服务器调查:Apache下降 Ngnix攀升
  3. SpringBoot+Mybatis 框架之 @SelectProvider注解方式搭建
  4. [面经]春季跳槽面筋总结 [2018年3月17]
  5. Java设计模式之(工厂模式)--简单工厂模式--工厂方法模式--抽象工厂模式
  6. 静态html引入js添加随机数后缀防止缓存
  7. Java-开源工具类
  8. Android系统的体系结构、开发语言及源码结构
  9. 【转】一个关于fork()的笔试题,考了好几遍,终于找到答案了
  10. WCF发布到IIS7问题的解决方案