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

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是分布式开发运行时!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/298158.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

老婆晚上不想睡?这个操作你要会!

1 会跪键盘吗&#xff1f;2 吃鸡时捡装备的你3 这是个失败之作4 是时候让你见识什么叫真正的技术了 5 别人的老师 6 陷入僵橘7 恐高者慎看你点的每个赞&#xff0c;我都认真当成了喜欢

java中JOptionPane类_java:JOptionPane类消息框总结

最近在写projet时经常用到JOptionPane的消息提示框&#xff0c;今天在这里做一个总结。主要用到四种消息提示框方法&#xff1a;showMessageDialog()&#xff1a;消息对话框showOptionDialog()&#xff1a;选择对话框showInputDialog()&#xff1a;输入对话框showConfirmDialog…

ACPI知识学习笔记

ACPI table之FACP(Fixed ACPI Description Table). 在代码里面&#xff1a;Resources\AcpiTables\Fadt\Fadt3.0.act 定义了EFI_ACPI_3_0_FIXED_ACPI_DESCRIPTION_TABLE Fadt. 列举出比较重要且常用的几项&#xff1a; INT_MODEL, //System Interrupt ModelSCI_INT_VEC…

Linux实战考试题:批量创建用户和密码-看看你会么?

批量创建10个用户stu01-stu10&#xff0c;并且设置随机8位密码&#xff0c;要求&#xff1a;不能用shell循环&#xff08;例如&#xff1a;for,while等&#xff09;&#xff0c;只能用linux命令及管道实现。此题考察的是基础命令的熟练运用&#xff0c;因此&#xff0c;限制了使…

python继承方式是基于原型吗_基于原型与基于类的继承

小编典典这里大约有一百个术语问题&#xff0c;大多数是围绕某人(不是您)试图使他们的想法听起来像是“最好的”。所有面向对象的语言都必​​须能够处理以下几个概念&#xff1a;数据封装以及对数据的关联操作&#xff0c;除其他外&#xff0c;各种操作被称为数据成员和成员函…

【视频】CCNA——telnet和SSH的配置

链接失效请E-MAIL&#xff1a;loguis-iehotmail.com地址&#xff1a;http://u.115.com/file/f4e6e095f3转载于:https://blog.51cto.com/loguis/332652

每天扫扫扫,二维码会被我们扫完吗?

全世界只有3.14 % 的人关注了爆炸吧知识支付码、名片码、健康码、校园码、复学码、乘车码、挪车码码码码码码码码码码码码码码码码码码码码码码码码码码&#xff0c;这么多码&#xff1f;光疫情期间&#xff0c;就用掉了 1400亿个二维码&#xff0c;那么就有同学来问了&#xf…

高级SQL注入拿shell,一般黑客不知道。哈客

服务器只有一个站,又找不到注入点怎么办? 你可以试试在搜索框,登陆,任何框框里放个单引号,看看是否报错 初级部分 加个单引号,后面随便,随便填个密码,点击登陆 典型的SQL注入判断权限: and user>0-- 明显的sa权限获取数据库名字: and db_name()>0-- 很…

使用 SVG 动画实现弹性的页面元素效果

Codrops 分享了一些给SVG元素加上弹性动画的灵感。实现的思路是把一个SVG元素整合成一个组件&#xff0c;然后从一个路径弹性动画到另一个。这种效果可以应用到像菜单&#xff0c;按钮或其它元素&#xff0c;使得交互更有趣&#xff0c;看起更原生与自然的感觉。 在线演示 …

CCNA,CCNP资料

CCNA资料、、、、、、、、、、、、、、、、、、、、转载于:https://blog.51cto.com/youye/334779

虚拟ip工具_针对游戏防封换IP有用吗?

如今的网游有的有局限ip地址登录&#xff0c;就是说1个ip地址只可以登录1个或是两个客户端&#xff0c;可是也不是全部的游戏都局限&#xff0c;那麼针对ip限制怎样游戏多开呢&#xff1f;游戏局限针对许多用户而言是很不太好的&#xff0c;由于它们需用非常好号来挂&#xff0…

万万没想到,刷1000道题目,还不如搞懂这几个机械动图!

▲ 点击查看 著名教育家蒙台梭利曾说&#xff1a;“孩子成长中最重要、最基本的就是注意力集中”。而乔布斯也曾说&#xff1a;“专注和简单一直是我的秘诀之一。观察一下你家的孩子&#xff0c;会不会经常出现这种情况:孩子上课坐不住、总跑神&#xff0c;小动作不断&#xf…

Mysql日期

2019独角兽企业重金招聘Python工程师标准>>> create view fin1 as select o.code, s.organization_name,s.name,s.sex,s.identity_card_number,date_format(s.final_into_association_time,%Y-%m-%d),s.number_of_worked_in_association,(year(now())-year(s.begin_…

复制一个文件夹中的所有文件和文件夹的java程序实现

使用java程序实现了对文件夹的复制功能&#xff1a; package demo.io; import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileInputStream;import j…

Silverlight 2.5D RPG游戏技巧与特效处理:(十六)动态资源

即开即玩是网页游戏相比传统客户端游戏的最大优势。如果说在每台电脑安装上G的客户端是一种资源浪费及时间污染&#xff1b;那么Silverlight作为RIA界的新宠儿&#xff0c;在继承祖辈优秀血统的前提下拥有更加卓越的性能及更为曼妙的动态表现&#xff0c;势将引领网络未来世界进…

python pp模块_Python模块--Pexpect

探索 Pexpect&#xff0c;第 1 部分&#xff1a;剖析 Pexpect概述Pexpect 是 Don Libes 的 Expect 语言的一个 Python 实现&#xff0c;是一个用来启动子程序&#xff0c;并使用正则表达式对程序输出做出特定响应&#xff0c;以此实现与其自动交互的 Python 模块。 Pexpect 的使…

mysql root密码忘记2018_2018-03-28设置及修改mysql用户密码学习笔记

退出mysql方法quit或者exit设置及修改mysqlroot用户密码安装mysql后&#xff0c;默认管理员root密码为空&#xff0c;这很不安全&#xff0c;需要设置一个密码&#xff0c;在安装mysql单实例后&#xff0c;有个初始优化的一些安全措施&#xff1a;为root设置了密码删除无用的my…

如何机智的弄坏一台电脑?

全世界只有3.14 % 的人关注了爆炸吧知识原文&#xff1a;http://litten.me/2015/07/06/hack-in-localstorage/作者&#xff1a;Litten很多人都在说&#xff1a;“技术领域当中&#xff0c;前端最没有技术含量&#xff0c;且容易被替代。”有人说&#xff0c;前端的能力界限顶多…

局域网屏幕监控软件

选择一款好的局域网屏幕监控软件要注意哪些问题&#xff1f;相信这是很多企业老板、网管都关心的问题之一。网上各种监控软件那么多&#xff0c;万一下载一个不好用的软件&#xff0c;不仅浪费的是时间&#xff0c;甚至因为软件稳定性不好&#xff0c;影响员工工作效率就不好了…

android 学习查阅笔记

给自己一个链接地址方便找http://www.cnblogs.com/TerryBlog/archive/2010/06/25/1764821.htmlAndroid与IIS身份验证——基本验证http://www.cnblogs.com/GoodHelper/archive/2011/08/17/android_iis_01.html转载于:https://www.cnblogs.com/yjrl/archive/2011/08/14/2137692.h…