网站首页 > 博客文章 正文
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是分布式开发运行时!!!
猜你喜欢
- 2024-11-06 Pr*da厚底牛津鞋(tpr牛津鞋底的优缺点)
- 2024-11-06 Dapr云原生应用开发系列6:绑定构建块
- 2024-11-06 洞悉微服务:从 PaaS 到 Serverless 的演进
- 2024-11-06 微软为云端和边缘计算应用程序开发引入了新的开源规范
- 2024-11-06 分布式应用运行时框架dapr(分布式框架图)
- 2024-11-06 一分钟,快速学习#干货分享(怎么快速的学)
- 2024-11-06 Docker Compose 与 Nestjs 构建基于 Dapr 的 Redis 发布/订阅分布式应用
- 2024-11-06 .NET 7 轻松上手Dapr之服务调用(服务器启用net framework 3.5)
- 2024-11-06 Dapr牵手.NET学习笔记:跨物理机负载均衡服务调用
- 2024-11-06 高德 Serverless 平台建设及实践(高德地图服务器)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)