在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

在 k8s 以外的分布式环境中使用 Dapr的更多相关文章

  1. ZooKeeper学习第五期--ZooKeeper管理分布式环境中的数据

    引言 本节本来是要介绍ZooKeeper的实现原理,但是ZooKeeper的原理比较复杂,它涉及到了paxos算法.Zab协议.通信协议等相关知识,理解起来比较抽象所以还需要借助一些应用场景,来帮我们 ...

  2. ASP.Net Core 中使用Zookeeper搭建分布式环境中的配置中心系列一:使用Zookeeper.Net组件演示基本的操作

    前言:马上要过年了,祝大家新年快乐!在过年回家前分享一篇关于Zookeeper的文章,我们都知道现在微服务盛行,大数据.分布式系统中经常会使用到Zookeeper,它是微服务.分布式系统中必不可少的分 ...

  3. 分布式环境中,模块数据交互协议分析 (百度brpc)

    1. 背景 之前听到同事说,要为自己的模块考虑写个数据协议.今天有空想了一下.写出来,方便后续使用. 开源代码brpc中可以支持多种协议,nshead.redis.mongo等20多种协议. 2. 什 ...

  4. 【Zookeeper系列】ZooKeeper管理分布式环境中的数据(转)

    原文地址:https://www.cnblogs.com/sunddenly/p/4092654.html 引言 本节本来是要介绍ZooKeeper的实现原理,但是ZooKeeper的原理比较复杂,它 ...

  5. Java多线程编程——并发编程原理(分布式环境中并发问题)

    在分布式环境中,处理并发问题就没办法通过操作系统和JVM的工具来解决,那么在分布式环境中,可以采取一下策略和方式来处理: 避免并发 时间戳 串行化 数据库 行锁 统一触发途径 避免并发 在分布式环境中 ...

  6. ZooKeeper系列(5):管理分布式环境中的数据

    引言 本节本来是要介绍ZooKeeper的实现原理,但是ZooKeeper的原理比较复杂,它涉及到了paxos算法.Zab协议.通信协议等相关知 识,理解起来比较抽象所以还需要借助一些应用场景,来帮我 ...

  7. ZooKeeper管理分布式环境中的数据

    Reference: http://www.cnblogs.com/wuxl360/p/5817549.html 本节本来是要介绍ZooKeeper的实现原理,但是ZooKeeper的原理比较复杂,它 ...

  8. 分布式服务框架 Zookeeper — 管理分布式环境中的数据

    本节本来是要介绍ZooKeeper的实现原理,但是ZooKeeper的原理比较复杂,它涉及到了paxos算法.Zab协议.通信协议等相关知识,理解起来比较抽象所以还需要借助一些应用场景,来帮我们理解. ...

  9. 高并发分布式环境中获取全局唯一ID[分布式数据库全局唯一主键生成]

    需求说明 在过去单机系统中,生成唯一ID比较简单,可以使用MySQL的自增主键或者Oracle中的sequence, 在现在的大型高并发分布式系统中,以上策略就会有问题了,因为不同的数据库会部署到不同 ...

随机推荐

  1. 带你读AI论文:NDSS2020 UNICORN: Runtime Provenance-Based Detector

    摘要:这篇文章将详细介绍NDSS2020的<UNICORN: Runtime Provenance-Based Detector for Advanced Persistent Threats& ...

  2. C字符串倒置-中部对称

    问题如图 Code #include<stdio.h> #include<string.h> #define MAX_LENGTH 10//最大字符串长度 void inver ...

  3. json解析出现:java.lang.ClassCastException: net.sf.ezmorph.bean.MorphDynaBean cannot be cast to XXX

    感谢大佬:https://blog.csdn.net/one_ink/article/details/99817676 一.出错原因 当我们利用json解析中的toBean方法时,如果它的属性里面包含 ...

  4. MySQL索引类型一览 让MySQL高效运行起来(转)

    转自:http://www.php100.com/html/webkaifa/database/Mysql/2010/0409/4279.html 索引是快速搜索的关键.MySQL索引的建立对于MyS ...

  5. 【BZOJ3545】Peaks(Kruskal重构树 主席树)

    题目链接 大意 给出有\(N\)个点\(M\)条边的一张图,其中每个点都有一个High值,每条边都有一个Hard值. 再给出\(Q\)个询问:\(v\) \(x\) \(k\) 每次询问查询从点\(v ...

  6. MySQL基本命令语法之select

    目录 MySQL基本命令语法之select 查询去重以及常数 空值与着重号 着重号 空值 运算符 算术运算符 比较运算符 符号型 非符号型 逻辑运算符 优先级 排序分页 排序 分页 拓展 多表查询 等 ...

  7. 敲出的第一个python程序

    学习python第二天,终于照猫画虎编辑出第一个程序.程序要求如下: 1.输入用户名.密码 2.认证成功后显示欢迎信息 3.输错三次后锁定 源代码如下: username = 'jackson'pas ...

  8. 经纬坐标(BLH)数据创建.kml文件小工具设计 Java版

    技术背景 KML,是标记语言(Keyhole Markup Language)的缩写,最初由Keyhole公司开发,是一种基于XML 语法与格式的.用于描述和保存地理信息(如点.线.图像.多边形和模型 ...

  9. redis(一)-----初识redis

    Redis是一种基于键值对(key-value)的NoSQL数据库 因为Redis会将所有数据都存放在内存 中,所以它的读写性能非常惊人.不仅如此,Redis还可以将内存的数据利 用快照和日志的形式保 ...

  10. CPU优化之平均负载率之辅助工具

    前面介绍了平均负载均衡的一些内容,那实际应用中如何查看,分析性能瓶颈呢?下面介绍相关的辅助工具. 一.stress stress是Linux 系统压力测试工具,其通过异常进程模拟平均负载升高的场景(前 ...