demo运行环境:Windows10,Docker(dapr_zipkin,dapr_redid,dapr_placement)


安装:dapr init

卸载:dapr uninstall,然后删除 C:\Users\当前用户\.dapr


dapr在部署时是通过给服务挂载一个sidecar,来辅助应用服务来完成一些额外的分布式工作,可以做到无侵入,本例是本地部署,sidecar和应用服务都是独立进程。通过如下代命令启动sidecar,appid为app1,应用服务端口是5000,dapr的端口为3500。

dapr ru n --app-id app1 --app-port 5000 --dapr-http-port 3500

这种完全的分离,对应用来说是无侵入的,即使把旧应用管理起来也是无缝的。

dapr的服务是通过下面这样的url调用的的:

http://localhost:3500/v1.0/invoke/app1/method/test

3500是dapr端口,其中appid是 app1,对应的接口是 /test ,其他部分就是相同的了,这样带来的好处是显而易见的,没有的IP或主机名,方便通过 XX应用的XX接口的方式调用其他服务。就像订单服务下单接口调用支付服务支付接口一样明确易用。

dpar的服务调用就这么简单,带来一个问题是,既然dapr可以通过appid做到服务发现,那么同一服务的多副本怎么实现?

这个问题我没有从dapr中找到答案(如果您有方案,请告知,十分感谢),可能也没有答案,因为dapr说它是应用开发运行时,而不是分布式基础设施,像负载均衡这种提高可用性的部署,不属于dapr的范畴。

于是我就用nginx搭建了个负载均衡,指向两个相同的服务。5000是nginx对外的端口,appid为app1;两个服务端口和appid分别是5001和app1-1,5002和app1-2,后然分别给这三个服务加上sidecar(当然,只对于服务调用来说,可以只给nginx加sidecar,但dapr的sidecar不只服务调用,还有别用,后续说明)

调用示意图如下,如果从浏览器调用到服务的话,是经过nginx的saidecar和nginx两层反向代理完成的。

经过两个反向代理,性能会差吗?为了了解调用的性能,下面进行了一个测试,1、直接调用服务Invock方法;2、经过sidecar代理调用服务SidecarInvoke;3、经过nginx的sidecar到nginx,再调用服务。下面是调用的代码:

using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;BenchmarkRunner.Run<TestInvock>();[MemoryDiagnoser]
public class TestInvock
{readonly HttpClient _invockClient;readonly HttpClient _sidecarClient;public TestInvock(){_invockClient = new HttpClient();_sidecarClient = new HttpClient();}[Benchmark]public async Task<string> Invoke(){var content = await _invockClient.GetStringAsync("http://localhost:5000/test");return content;}[Benchmark]public async Task<string> SidecarInvoke(){var content = await _sidecarClient.GetStringAsync("http://localhost:3500/v1.0/invoke/app1-1/method/test");return content;}[Benchmark]public async Task<string> LoadbalancingInvoke(){var content = await _sidecarClient.GetStringAsync("http://localhost:3500/v1.0/invoke/app1/method/test");return content;}
}

性能的测试结果:负载均衡后的调用还不错,没有想的那么性能差,为了提高性能,可以用gRPC。

所得:在学习过程中,一直错觉dapr能完成服务治理,但实践下来的结果是:dapr就是分布式开发的运行时。

所以使用dpar时,默念10次:dapr是分布式开发运行时!!!

Dapr牵手.NET学习笔记:想入非非的服务调用相关推荐

  1. Dapr牵手.NET学习笔记:状态管理之docker-compose发布

    Dapr牵手.NET学习笔记:想入非非的服务调用 Dapr牵手.NET学习笔记:跨物理机负载均衡服务调用 Dapr牵手.NET学习笔记:用docker-compose部署服务 说明:为了给出demo的 ...

  2. Dapr牵手.NET学习笔记:开篇

    dapr,一个为分布式应用程序的运行时,为开发者在对接分布式组件时,提供了便利.使用dapr带来的好处可扩展性,因为它是通过sidecar的理概念来集成其他运行时的.同时dapr还提供了多种语言的SD ...

  3. Dapr牵手.NET学习笔记:用docker-compose部署服务

    上一篇聊到用两个物理机(一个win,一个mac)来部署dapr和服务 ,实现order调用pay的负载均衡.本篇说一下在windows上的docker部署这三个服务,达到与上一篇的效果. 三个服务的部 ...

  4. Dapr牵手.NET学习笔记:跨物理机负载均衡服务调用

    dpar在同一台电脑上不能run 相同appid,这个在上篇说过,所以就用外部负载均衡nginx来对应,那在不同的host中跑同一服务,看看dapr内部的负载均衡是怎么实现的. 说说现有的服务,两个服 ...

  5. Dapr牵手.NET学习笔记:可观测性-分布式跟踪

    分布式跟踪在dapr里是开箱即用的,不需要对应用作任何一丁点的侵入式编程.之前的开发,如果想实现分式跟踪,就得在应用中埋点,这是一个与业务无关系的动作.dpar通过sidecar可以轻松做到这点,从而 ...

  6. Dapr牵手.NET学习笔记:绑定

    绑定有点像订阅发布,但又不一样,绑定更简单,绑定输出(调用方)-绑定输入(被调用方). 本例是用docker compose编排,并且用rabbitMQ来支持,因为rabbitMQ支持输入和输出绑定. ...

  7. Dapr牵手.NET学习笔记:状态管理进阶(二)

    为了防止并发对数据修改造成差异,dapr使用了etag标签来作为版本号,对数据修改进行验证. 下面是对etag的一个demo appsettings.json中的url配置 "StateUr ...

  8. Dapr牵手.NET学习笔记:状态管理进阶(一)

    在上一篇文章中说到,dapr默认的状态是不可能跨appid的,也就是只能在相同的应用内访问自己设置的状态数据,dapr支持三种状态的共享配置:appid,nam,none,是通过修改component ...

  9. Dapr牵手.NET学习笔记:Actor一个场景

    接上一篇最后的场景,为了解决相同帐户并发引起的数据库行级锁,可以引入Actor的串机制,相同ActorID的实例,串行,这样就能在应用层把读取余额的资源争抢解决掉,剩下的工作就是一定时间间隔,把内存中 ...

最新文章

  1. Deep Learning简明深度学习方法概述
  2. python 让异常名称显示出来
  3. Activity Intent相关FLAG介绍
  4. 现代软件工程讲义 目录
  5. 34 年了,“杀”不死的 Perl!
  6. 从入门到入土(三)RocketMQ 怎么保证的消息不丢失?
  7. python pip国内源_Python pip配置国内源 (转载)
  8. 知识图谱构建流程原型、工具、数据、表示、推理以及可视化
  9. android 我叫mt 插件,叉叉我叫MT助手
  10. R语言入门(1)时间序列分析
  11. Mac VSCode OpenGL环境搭建
  12. 雷军 50 岁身价破 1000 亿:决定人生胜负的,是这 5 条规律
  13. 基于量子计算的无收益标的资产欧式看涨期权定价和delta风险分析
  14. php图片特效,css3实现图片头像扫光高亮效果
  15. 第七章 马斯洛金字塔模型
  16. L2-032 彩虹瓶——栈
  17. 计算机专业毕业自我鉴定800字,计算机专业毕业自我鉴定范文
  18. GADRCRERCERRHRGDWQGKQRCLMECRRREQEED|2243219-65-8
  19. 年轻就要勇敢闯荡校园招聘会PPT模板
  20. 1、Socket网络编程之建立Server、Client连接

热门文章

  1. linux__ftp
  2. Apache 重写规则的常见应用 (rewrite)
  3. 四、构建Node Web程序
  4. Python第一天学习---基础语法
  5. jenkins没安装git报错
  6. WebRTC 音频模块单独编译 --【转载】
  7. 通过邮箱远程控制电脑
  8. 公布一个软件,轻新视频录播程序,H264/AAC录制视音频,保存FLV,支持RTMP直播...
  9. COM 组件设计与应用(七)
  10. scss2css vscode设置_VSCode下让CSS文件完美支持SCSS或SASS语法方法