在Dapr 文档和实践案例中多是推荐采用k8s, 其实我目前也是在k8s 上操作的,有公有云TKE,AKS,还有私有云的Rancher ,它并没有传闻中的那么难,而且我认为它非常容易上手。不过,我还是有很多人不愿意使用k8s 。那么在虚拟机场景下如何使用Dapr呢? 当然也有虚拟机部署的案例,比如2021年第一届DaprConf 上分享的Dapr case study: Man Group:https://blog.dapr.io/posts/2021/10/05/join-us-for-daprcon-october-19th-20th-2021/

如果我们脱离K8s 的 虚拟机环境下会碰到什么问题?

  1. 你需要安装 Docker 来运行 Dapr
  2. 使用Invoke API进行名称解析时无法在其他服务器上找到 Dapr 应用程序

除了这两个问题,应该没有什么其他问题,因为根据 Dapr 的配置文件,它使用了外部服务器或者服务。

我们先来看一下第一个问题,在没有 Docker 的情况下使用 Dapr ,官方文档里已经给我们了答案:入门指南: 不使用 Docker 在自托管模式下运行 Dapr

Dapr CLI 提供了使用 slim init 初始化 Dapr 的选项,而无需默认创建依赖于 Docker 的开发环境。 要使用 slim init 初始化 Dapr ,请在安装 Dapr CLI 后使用以下命令:

dapr init –slim

在此模式下安装了两个不同的二进制文件 daprd 和 placement。在此模式下,不会为状态管理或发布/订阅安装任何默认组件,例如Redis 和 Zipkin 不会安装,但是如果需要的话会单独设置,所以没有问题。

那么第二个问题是 名称解析 ,我们还是来看一下官方文档里的 使用 服务调用概述-mDNS 轮询负载均衡:https://docs.dapr.io/zh-hans/developing-applications/building-blocks/service-invocation/service-invocation-overview/,Dapr 使用 mDNS 协议提供轮询负载均衡的服务调用请求,例如用于本地或多个联网的物理机器。但是mDNS只能在可以使用多播的环境中使用,这在云环境下通常是不可用的,在云环境下还有一个选择,官方文档里有 :详细介绍了关于 HashiCorp Consul 服务发现组件的信息,它既可以用于虚拟机也可以用于k8s 环境下,文章开头提到的案例就是用Consul 。

说到这里,如果你是在用Azure,在Azure上有 Managed HashiCorp Cosul ServiceAzure,简称HCS, 客户可以通过Azure Marketplace将 HCS直接配置到他们的 Azure 环境中,而 HashiCorp 则负责服务的维护和运营。使用 HCS 允许用户在云、混合和本地场景中使用各种环境(包括虚拟机和 Kubernetes)。所以我尝试了一下,但是我使用的账号用不了,需要额外付费:

AWS 上也有,具体可以看  Consul on Amazon ECS 0.3 Adds Extended Configuration

上面这两个问题我们都解决了,总结一下:

  • Docker 对于 Dapr 来说并不是必需的。
  • 如果你的环境支持使用多播,则可以使用 mDNS 在多台服务器上运行 Dapr。
  • 虚拟机环境下推荐使用Consul 作为名称解析服务。

针对这个问题 陈一狮同学很早就写了一篇文章, Dapr + .NET Core实战(十四)虚拟机集群部署 mDNS + Consul。他还特别录制一个系列的视频课程放在腾讯课堂里。

我们再回到开篇时提到的那个使用Consul 部署的案例 ,他们开发了一个 Dapr 的轻量级生命周期管理组件:https://github.com/man-group/dapr-sidekick-dotnet,Sample 目录下有Consul的演示示例:https://github.com/man-group/dapr-sidekick-dotnet/tree/main/samples/AspNetCore,也可以看视频:https://www.bilibili.com/video/BV1br4y167u6?share_source=copy_web

最新文章

  1. Java中分割字符串
  2. php中echo(),print(),print_r()之间的区别
  3. 关于document.getElement获取元素返回值的问题
  4. Node.js之Promise维护(同步)多个回调(异步)状态
  5. 第20章 使用LNMP架构部署动态网站环境
  6. thinkphp 使用过程中遇到的一个小函数
  7. c#转义字符串中的所有正则特殊字符
  8. 【转】HTML5游戏开发经典视频教程、电子书汇总
  9. js输入框只能输入数字和小数点
  10. Introducing Regular Expressions 学习笔记
  11. FileOutputStream flush()
  12. iOS UI控件总结(全)
  13. SSM框架搭建——我的第一个SSM项目
  14. Python入门 - 面向对象
  15. POJ - 2253 Frogger 单源最短路
  16. [AH/HNOI2017]大佬
  17. JVM的垃圾回收机制 总结(垃圾收集、回收算法、垃圾回收器)
  18. event.target解析
  19. spring自带的定时任务功能@EnableScheduling
  20. CodeBlocks中去掉下划线的方法

热门文章

  1. LeetCode 每日一题 458. 可怜的小猪
  2. Android编译implement、api 和compile区别【转】
  3. listview界面显示
  4. 关于 BSGS 以及 ExBSGS 算法的理解
  5. weblogic12c安装笔记
  6. MXNet学习-第一个例子:训练MNIST数据集
  7. Solution -「Gym 102956B」Beautiful Sequence Unraveling
  8. Solution -「COCI 2014-2015 #2」「洛谷 P6406」Norma
  9. php发送邮件 (phpmailer)
  10. k8s集群节点ping不通其他主机的ip