c语言sscanf函数的用法是什么
370
2022-10-02
通过Dapr实现一个简单的基于.net的微服务电商系统(二)——通讯框架讲解
今天来分享一下这套电商demo的通讯部分到底是如何工作的,看看它是如何屏蔽与dapr繁琐的沟通工作让开发者专注于解决业务问题的。
首先我们再回顾一下dapr的sidecar是如何与应用相互协同的。和istio类似,dapr的sidecar注入可以分为自动注册和手动注册,下面以手动加注解注册的方式我们来聊一聊dapr的工作逻辑。首先当我们设置一个应用(deployment)的时候,在template-metadata配置了dapr相关注解之后,凡是安装dapr集群的k8s会自动将dapr的sidecar注册到我们的pod中,如下图:
当服务启动后,我们可以用kubectl describe po xxx的方式看到当前该pod会产生两个容器:
凡是了解k8s的开发人员应该知道。在同一个pod之中,container实例之间的通讯应该是基于同一个虚拟内网的,通俗的说就是两者通讯可以直接通过localhost:port的方式,这是dapr与应用交互的基础。和istio通过iptables 来做流量劫持让Envoy代理可以拦截所有的进出Pod的流量,即将入站流量重定向到 Sidecar,再拦截应用容器的出站流量经过 Sidecar 处理的方案相比,dapr选择了一个更加灵活的方式,也就是它只是主动暴露一个端口(默认3500),将是否和dapr通讯的选择权留给了应用本身。
当我们发起一个rpc请求时,实际上我们是通过grpc这里不展开)的方式,访问了了这么一个地址。sidecar通过解析这个地址得到远程服务名{servicename},以及一个谓词{invoke}以及远程服务的endpoint:{path}。它会通过内部的dns服务名查询servicename得到一个该服务在集群内的实例列表,通过负载均衡的方式发起一个下游调用。这个下游调用也并非直接像普通k8s应用内通过调用service name的方式去调用下游pod的container,而是访问下游pod内的sidecar,通过sidecar再去访问pod内的应用实例。他们之间的调用关系如图所示:
所以剩下的事情就比较简单了,dapr通讯基于or grpc service/client即可简单快捷的接入dapr。首先我们还是看看整个repo(Tin, Task
整个请求收发流程如下:
1、当客户端通过IServiceProxyFactory.CreateProxy
2、实例解析各种参数后发起一个sdk需要继承BasicActor然后进行各种actor作业,我采用了另外一种方式,通过emit静态代理的方式创建了一个Actor服务,由其代为接收actor请求后再转发给具体的xxxServcice。同时这个Actor服务会启动一个timer,当timer到期时会进行一次model的版本检查,当版本变化后(一般是由于xxxServcice被调用),会通知xxxServcice继承自基类并重写的SaveData方法,由xxxServcice自身考虑是否需要做业务层的持久化(默认Actor代理服务会自动持久化到dapr的状态设备里),这一步是完全异步的并不会阻塞Actor代理原方法的执行,另外在Actor的使用中,我们也尽量避免在同步调用时去读取第三方的设备可能导致IO阻塞actor。在源码中涉及对actor调用xxxServcice异步的支持,我主要参考了async/await生成状态机的方式创建了一个ActorAsyncStateMachine,由该状态机来完成actor服务调用xxxServcice的async/await实现。
sample包含一对客户端/服务端案例包含上述涉及的所有远程call,大家可以多参考一下。
Dapr原始提供了一套sdk用于远程服务,该框架主要是用于实现rpc以及对dapr这些api的自定义封装,当使用这套框架后我们就可以不用再考虑创建具体的webapi控制器,由iapplicationservice申明远程服务后框架即可自动生成代理服务即可。
该框架的实现方式当然还有诸多不完善或者我没考虑到的地方,主要起到一个抛砖引玉的作用,另外也是通过这个来了解dapr是如何统一了我们网络编程模型的,只有更了解dapr才能更好的使用和推广它。惯例,欢迎fork+star:
https://github.com/sd797994/Oxygen-Dapr
https://github.com/sd797994/Oxygen-Dapr.EshopSample
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~