热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

温故知新,.NetCore遇见Dapr,为云原生而生的应用运行时

什么是云原生云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服

什么是云原生

云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式API。

这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统作出频繁和可预测的重大变更。

云原生计算基金会(CNCF)致力于培育和维护一个厂商中立的开源生态系统,来推广云原生技术。我们通过将最前沿的模式民主化,让这些创新为大众所用。

什么是Dapr

Dapr(Distributed Application Runtime)分布式应用运行时,是一个可移植的、事件驱动的运行时,它使任何开发人员能够轻松构建出弹性的、无状态和有状态的应用程序,并可运行在云平台或边缘计算中,它同时也支持多种编程语言和开发框架。

Any language, any framework, anywhere

温故知新,.Net Core遇见Dapr,为云原生而生的应用运行时 - 文章图片

如今,我们正经历着上云浪潮。开发人员对Web+数据库应用结构(例如经典3层设计)非常熟悉,并且使用得手,但对本身能支持分布式的微服务应用结构却感觉陌生。成为分布式系统专家很难,并且你也不需要这么做。开发人员希望专注于业务逻辑,同时希望平台为其提供可伸缩的、弹性的、可维护性和云原生架构的其他功能。

这就是Dapr所要解决的。Dapr将构建微服务应用的最佳实践设计成开放、独立和模块化的方式,让你能够选择的任意开发语言和框架构建可移植应用程序。每个构建块都是完全独立的,您可以采用其中一个或多个或全部来构建你的应用。

此外,Dapr是和平台无关的,这意味着您可以在本地、Kubernetes群集或者其它集成Dapr的托管环境中运行应用程序。这使得您能够在云平台和边缘计算中运行微服务应用。

使用Dapr,您可以使用任何语言、任何框架轻松构建微服务应用,并运行在任何地方。

Dapr托管方式

Dapr可以托管在多种环境中,包括用于本地开发的自托管,或部署到一组VM、Kubernetes和边缘环境(如AzureIoTEdge)。

自托管

在自托管模式下,Dapr作为单独的sidecar进程运行,服务代码可以通过HTTP或gRPC调用该进程。在自托管模式下,您还可以将Dapr部署到一组VM上。

温故知新,.Net Core遇见Dapr,为云原生而生的应用运行时 - 文章图片

Dapr可以配置为在开发人员本地计算机上以自托管模式运行。每个运行的服务都有一个Dapr运行时进程(或sidecar),配置为使用状态存储,pub/sub,绑定组件和其他构建块。

您可以使用DaprCLI在本地机器上运行启用了Dapr的应用程序。

温故知新,.Net Core遇见Dapr,为云原生而生的应用运行时 - 文章图片

Kubernetes托管

在容器托管环境(如Kubernetes)中,Dapr作为sidecar容器运行,和应用程序容器在同一个pod中。

温故知新,.Net Core遇见Dapr,为云原生而生的应用运行时 - 文章图片

Dapr可以配置为在任何Kubernetes集群上运行。在Kubernetes中,dapr-sidecar-injector和dapr-operator服务提供一流的集成,以将Dapr作为sidecar容器启动在与服务容器相同的pod中,并为在集群中部署的Dapr组件提供更新通知。

dapr-sentry服务是一个认证中心,它允许Daprsidecar实例之间的相互TLS进行安全数据加密。

温故知新,.Net Core遇见Dapr,为云原生而生的应用运行时 - 文章图片

Dapr与Istio、Linkerd或OSM等服务网格相比如何?

Dapr不是一个服务网格。虽然服务网侧重于细粒度网络控制,但Dapr专注于帮助开发人员构建分布式应用程序。Dapr和服务网都使用sidecar模式,并随应用程序一起运行,它们确实具有一些重叠的功能,但也提供独特的优势。

虽然Dapr和服务网格确实提供了一些重叠功能,但dapr不是服务网格,其中服务网格被定义为网络的服务网格。与专注于网络问题的服务网格不同,Dapr专注于提供构建基块,使开发人员更容易将应用程序构建为微服务。Dapr以开发人员为中心,而服务网格以基础设施为中心。

在大多数情况下,开发人员不需要意识到他们正在构建的应用程序将部署在包括服务网格在内的环境中,因为服务网格会拦截网络流量。服务网格主要由系统操作员管理和部署。但是,Dapr构建块API旨在供开发人员在其代码中明确使用。

Dapr与服务网格共享的一些常见功能包括:


  • 使用mTLS加密实现安全的服务到服务通信

  • 服务到服务指标集合

  • 服务到服务分布式跟踪

  • 通过重试获得可恢复能力

重要的是,Dapr通过以开发人员为中心的关注点提供服务发现和调用。这意味着,通过Dapr的服务调用API,开发人员在服务名称上调用一种方法,而服务网格则处理网络概念,如IP和DNS地址。但是,Dapr不为路由或流量拆分等流量行为提供功能。流量路由通常使用应用程序的入口代理处理,并且不必使用服务网格。此外,Dapr还为状态管理、发布/订阅、Actor等提供了其他应用级别的构建块。

Dapr和服务网之间的另一个区别是可观察性(跟踪和指标)。服务网格在网络级别运行,并跟踪服务之间的网络调用。Dapr通过服务调用来达到此操作,但Dapr也使用写入CloudEvents信封的跟踪Id在发布/订阅调用上提供可观察性(跟踪和指标)。这意味着Dapr的指标和跟踪比使用服务到服务调用和发布/订阅进行通信的应用程序的服务网格更为广泛。

下图捕获Dapr和服务网格提供的重叠功能和独特功能:

温故知新,.Net Core遇见Dapr,为云原生而生的应用运行时 - 文章图片

Dapr构建块

Building Block构建块是可以从您的代码中调用的HTTP或gRPCAPI,并且由一个或多个Dapr组件组成。

构建块解决了构建弹性微服务应用程序中的常见挑战,并编纂了最佳实践和模式。Dapr由一组构建块组成,并且具有可扩展性以添加新的构建块。

下图显示了构建块如何公开了可被代码调用的公共API,并使用组件来实现构建块的能力。

温故知新,.Net Core遇见Dapr,为云原生而生的应用运行时 - 文章图片

以下是Dapr提供的构建块类型:

温故知新,.Net Core遇见Dapr,为云原生而生的应用运行时 - 文章图片

每个构建块都是独立的,这意味着您可以采用其中一个或多个或全部来构建应用。在当前Dapr的初始版本中,提供了以下构建块:






































构建块描述
服务间调用弹性的服务间调用能在远程服务上进行方法调用(包括检索),无论它们是否位于受支持的托管环境中的。
状态管理对于存储键/值对的状态管理,长时间运行,高可用性,有状态服务可轻松写入应用程序中的无状态服务。状态存储是可插拔的,可以包括AzureCosmosDB,AzureSQLServer,PostgreSQL,AWSDynamoDB或Redis等。
发布订阅发布活动并订阅主题
资源绑定带触发器的资源绑定通过接收和发送事件到任何外部源(如数据库、队列、文件系统等)来进一步构建事件驱动架构,以实现扩展性和弹性。
Actors一种用于有状态和无状态对象的模式,通过方法和状态的封装让并发变得简单。Dapr在其actor运行时提供了很多能力,包括并发,状态管理,用于actor激活/停用的生命周期管理,以及唤醒actor的计时器和提醒器。
可观测性Dapr可以发出度量,日志和跟踪以调试和监控Dapr和用户应用程序。Dapr支持分布式跟踪,通过使用W3C跟踪上下文标准和OpenTelemetry发送到不同的监控工具,以方便诊断和服务于生产中的服务间调用。
秘密Dapr提供秘密管理,并与公有云和本地秘密存储集成,以检索秘密,用于应用代码。

Dapr对应的DotNet Core SDK



  • Dapr SDK for .NET

  • dapr.io by Nuget


参考



  • https://dapr.io/

  • https://cloudevents.io/

  • 云原生社区 Dapr 特别兴趣小组

  • The Cloud Native Computing Foundation (CNCF)

  • CNCF Cloud Native Definition v1.0

  • 分布式应用程序运行时介绍

  • Dapr微服务应用开发系列0:概述

  • Software Architecture and Design InfoQ Trends Report—April 2020

  • 构建块



推荐阅读
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Tomcat安装与配置教程及常见问题解决方法
    本文介绍了Tomcat的安装与配置教程,包括jdk版本的选择、域名解析、war文件的部署和访问、常见问题的解决方法等。其中涉及到的问题包括403问题、数据库连接问题、1130错误、2003错误、Java Runtime版本不兼容问题以及502错误等。最后还提到了项目的前后端连接代码的配置。通过本文的指导,读者可以顺利完成Tomcat的安装与配置,并解决常见的问题。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • 单点登录原理及实现方案详解
    本文详细介绍了单点登录的原理及实现方案,其中包括共享Session的方式,以及基于Redis的Session共享方案。同时,还分享了作者在应用环境中所遇到的问题和经验,希望对读者有所帮助。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文分享了一位Android开发者多年来对于Android开发所需掌握的技能的笔记,包括架构师基础、高级UI开源框架、Android Framework开发、性能优化、音视频精编源码解析、Flutter学习进阶、微信小程序开发以及百大框架源码解读等方面的知识。文章强调了技术栈和布局的重要性,鼓励开发者做好学习规划和技术布局,以提升自己的竞争力和市场价值。 ... [详细]
author-avatar
张珮娟7063
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有