zoukankan      html  css  js  c++  java
  • 初学 dapr 使用总结 (.net core)

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

        一个个拆开来理解:

         可移植: 可以运行在windows,docker环境中,主要目标应该还是k8s

         事件驱动:还没想明白怎么事件驱动,可以知道的是支持消息的通知和订阅。(如果是消息驱动的话就可以理解了,因为各sidecar之间都是通过消息来通知的)

         运行时: 说明其实是一个运行环境,应用程序运行在这个运行时之上,那么应用程序的启动同时也要启动dapr

         弹性的:应该是可以随着应用程序的容器一起扩充或减少的意思,主要还是在k8s上弹性增减了

         无状态和有状态:应该指的是dapr其中的状态管理组件,可以使用也可以不使用。

         云平台:支持在各家的云平台上运行吧,而云平台大概就是k8s吧。

         支持多种编程语言和开发框架:虽然是微软开发的,但是官方文档用例竟然不是C#语言。。。因为使用到了sidecar模式,而应用程序与sidecar的交互都是通过消息通知,所以可以做到不限语言和开发框架。微软也出

    了不同语言的sdk做支持,python,php,node.js等等,貌似不用sdk的话直接通过http 或者grpc调用也是可以的。

         sidecar模式:目前使用下来的感觉sidecar跟一个网关差不多,应用程序跟外部应用的交互都由这个sidecar来处理。

     其次,dapr的功能:dapr集成了 rpc调用,状态调用(我的理解是缓存),发布/订阅消息,绑定(还没测),actor,可观测性(还没测),密钥管理 模块,使得应用程序只需专注于业务代码,这些外部交互功能则交给dapr管理,

    减少了外部组件的代码侵入,对组件的切换可以对应用程序透明(比如消息组件从rabbitmq切换成redis,应用程序不用改任何代码)。但是我觉得应用程序还是侵入了dapr的代码,这在本机调试的时候需要启动相关服务才能

    完整把应用程序跑起来,还是有点麻烦。比如我现在虽然用的是 self-hosted mode(自托管模式?),但是还是得启动docker才能完整跑起来,因为dapr需要用到 zipkin 容器的功能。

      dapr的使用:可以参考官方文档,我说说我在windows 自托管模式下使用的经验,因为还没上k8s环境,所以还没熟悉k8s下的部署和使用。

        关于调试应用程序和dapr的交互,官方运行程序与dapr的命令是这样

      

    dapr run --app-id DaprCounter dotnet run

       这样子会同时启动一个 sidecar 和  应用程序,sidecar 默认的端口是3500,同时应用程序会自动配置好sidecar相关的信息(http、grpc端口)。缺点是不好调试,可以通过vs附加进程的方式进行调试。

      另一种方式是指定端口先把 sidecar启动起来,监听应用程序端口,则可以使用vs直接运行程序,不受 dapr命令的影响。

    dapr run --app-id myapp1 --dapr-http-port 12302 --dapr-grpc-port 11288 --app-port 5103  
    app-port是应用程序的运行端口

    接着在应用程序中配置  上边 http-port 和grpc-port的端口

        services.AddControllersWithViews().AddDapr(cfg =>
                {
                    cfg.UseHttpEndpoint("http://localhost:12302");
                    cfg.UseGrpcEndpoint("http://localhost:11288");
    
                });

    如果使用actor,actor里面的HttpEndpoint端口也需要配置,否则默认是3500

    如此,便能照平常的方式使用vs开发dapr应用程序了。

    一些思考:

      前面写了,dapr的sdk对应用程序的逻辑还是有侵入性的,那么,如何解耦呢?目前想到的是使用依赖注入的方式,通过注入接口的方式在service层隐藏服务之间的交互逻辑。服务调用,actor,状态调用都可以使用这个方式,事件驱动貌似还不行,因为mq的sdk是通过event,

    dapr是通过 rpc调用来发送通知,这两个方式差别挺大,等再深入学习dapr后再思考如何封装不同的消息组件。

    相关文章:

      Dapr 文档库   dapr官方文档

     Dapr for .NET Developers   .net 使用dapr的文档

  • 相关阅读:
    ubuntu下python的错误
    Zookeeper(二) zookeeper集群搭建 与使用
    Zookeeper(一) zookeeper基础使用
    MapReduce(五) mapreduce的shuffle机制 与 Yarn
    MapReduce(四) 典型编程场景(二)
    Mysql(一) 基本操作
    MapReduce(三) 典型场景(一)
    MapReduce(二)常用三大组件
    MapReduce(一) mapreduce基础入门
    Hive(六)hive执行过程实例分析与hive优化策略
  • 原文地址:https://www.cnblogs.com/jidanfan/p/15350443.html
Copyright © 2011-2022 走看看