基于Asp.Net Core打造轻量级内部服务治理RPC(一)

      继之前的《Asp.Net Core + Docker 搭建》文章末尾说过的,将陆续编写基于asp.net core 打造一个内部服务治理的rpc框架。不过前端时间较忙,所以搁置了一段时间。闲话不多说,下面就来讲讲为什么需要去做一个该框架,以及想法的来源和设计思路。

一、产生背景

       公司技术栈是以微软栈为主。整个平台的业务并不是特别复杂。因此先前搭建每个子系统的时候都是以最简单的方式入手(时间较紧)。但是随着时间的推移,各个子系统之间的交互也是越来越多,当然,我们的做法也是很简单,就是通过暴露rest api ,然后客户端通过http调用进行交互,以至于现在很多系统都会配置其他系统的调用信息。日积月累,感觉系统越来月凌乱(有洁癖,遇到这种乱,就必须要去重构^_^,当然也是为后面维护减少成本),于是就产生了编写一个内部服务调用的框架。

二、想法来源

      本着遇到问题解决问题的目的,最开始也想直接使用开源的系统,如:sugring,orleans等.net 界非常著名的项目。但考虑到我的需求很简单(以及我的想法也是做一个非常简单,尽量不依赖其他重量级的框架,开发人员都认真阅读代码后,都能轻易维护的东西),且对上述的框架目前应用到生产环境的案例不是很知晓的情况下,于是还是忍痛割爱,最终放弃了。在这里,我想表达我的目标就是我需要像dubbo一样,调用方只需要引用服务提供者定义的相关接口库(.Net 中定义的接口eg:IUserService),就能直接调用。服务的调用方和提供方都注册到一个统一的注册中心(我以consul为注册中心,无需安装其他运行时,非常方便)。这样就不需要关心服务的具体地方。(该实现方式的想法在我今天(2018-12-16)看到的doteasy.rpc中的文章和我的想法几乎一致,但是我的实现还是略有不同,它是基于pb进行传输实现的,我是完全基于asp.net core 中的webapi进行实现)。

三、设计思路

      其实,asp.net core 已经是一个完善且高效的rpc框架,我们在调用每一个实现的web api实际就是一个rpc调用,只是它是基于http协议,大多数情况下,数据是通过json序列化和反序列化而已。(其他开源的优秀框架eg:surgin,oreans,dubbo...实现了自己高效的通信方式以及协议)。所以,基于asp.net core来实现,其实就是基于它来扩展,并且满足大多数公司的业务需求的性能要求应该不是问题(何况我们的spring boot实现微服务也是走rest方式^_^)。下面是我的整个想法构思图。

640?wx_fmt=jpeg

图 1

      场景:比如我有一个Service A的集群,依赖了Service B集群(可运行多个Service B的进程实例)的一个接口(IUserService,当然该接口在Service B中进行了实现UserService)进行数据获取(或操作)。就可以通过启动每个Service B实例时就将Service B要提供的服务发布出来(或叫导出),注册到Consul注册集群中,同样,Service A的实例也需要注册到注册中心(即使不发布供其他服务调用的接口)。此时,Service A要调用Service B的服务,首先,通过HttpServiceProxyFactory服务代理类生成IUserSerivice的代理实现类UserSeriviceImpl(通过Emit进行动态代理),再从注册中心获取到Service B的集群信息,根据一定的负载算法(负载是客户端进行负载实现,目前只实现了简单的循环负载),选择一个Service B的实例进行远程调用。其中UserSeriviceImpl代理实现类中核心的代码就是通过HttpClient进行数据的包装,然后请求到Service B中的UserService(其实就是一个Controller)实现类中。然后在解析UserService处理后返回过来的数据。

      以上就是我整个Rpc调用的总体思路。具体每个模块的详细设计与实现,接下来我会继续写出来,有兴趣的朋友可以留言交流也可以加qq:418237014交流。

 

原文地址: https://www.jianshu.com/p/c45f56d2aa21

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

640?wx_fmt=jpeg


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

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

相关文章

YBTOJ:前缀询问(trie树)

文章目录题目描述解析代码题目描述 解析 (没有做出来,这个ans的处理方式其实也不难想…qwq) 考虑把T都作为模板串加入trie树 加入每个模板串自然就是按照i顺序的 所以我们在插入t的时候沿途标记一下 新出现的未标记的i的间隔就是当前的i与上…

DP专练1( [NOIP 2003]加分二叉树 + 太空梯 )

我们先慢慢来加分二叉树题目题解简单讲解前序//中序//后序遍历代码实现太空梯题目题解代码实现加分二叉树 题目 题解 简单讲解前序//中序//后序遍历 其实说白了,这个*序就是根root的遍历顺序 先序就是root–>left–>right 中序就是left–>root–>rig…

YBTOJ:运动积分(trie树)

文章目录题目描述解析代码题目描述 解析 做了巨长时间… 进行了一次刺激的阅读理解竞赛… 感谢whh dalao! 那么让我们分析一下这道题 首先我们考虑单个求x选手的q值 不难发现 i 在第j天和x的大小关系只与a[x]与a[i]二进制下不同的最高位k有关 j的第k位与x相同时&am…

年终总结,我为什么离开舒适区?

当圣诞夜过去,也意味着这一年即将结束,迎来崭新的开始,一年时间既短暂,又漫长,当离开人生的舒适区,将迎来一个又一个的挑战。如果说一个人的优秀,取决于他天赋,以及他为之付出的额外…

NC16886 炮兵阵地

题目: n*m个网格,有平原,有山地,平原可以放部队,部队攻击范围如图(不受地形影响)(H为山地,P为平原) 题解: 确定状态: 因为每个炮可…

DP专练2 (大理石 + [ZJOI 2010]数字计数)

你肯定以为DP专练会有很多题, 但是请考虑一下本仙女的DP码力,一次性能更几个题。。。 来吧,别害怕呀~~ 文章目录大理石题目题解代码实现数字计数题目题解代码实现大理石 题目 林老师是一位大理石收藏家,他在家里收藏了n块各种…

YBTOJ:斐波拉契(矩阵快速幂)

文章目录题目描述题目描述代码题目描述 题目描述 关键在于如何转化为本题的题目。。。 设 y(1-根号5)/2$$ 再令: A(n)xn yn 通过尝试可以发现,A其实就是一个1,3为前两项的斐波拉契数列 则 xnA(n)-yn A的值可以用矩阵快速幂来求 而y是在(-1,…

ABP 框架 数据库底层迁移 Mysql 集群

技术交流,请加QQ群:538327407我的各种github 开源项目和代码:https://github.com/linbin524背景笔者 目前架构的IOT 项目是使用abp 框架作为后台,虽然abp的框架适用于中小型项目框架,但由于架构优美,笔者认为还是可以经…

数论练习1 ( 曹冲养猪 + [POJ 2891]Strange Way to Express Integers + 乘法逆元【带证明】)

虽然作业还没有做完,但是我还是放不下它,对此,我只想说: 今天你对作业爱理不理,明天它就让你补到飞起 DP先放放,我们要雨露均沾练习上手:乘法逆元题目题解代码实现曹冲养猪?(互质的…

开发.NET Core NuGet包并实现CI/CD

实际开发中我们需要对一些公共类库进行开发,并基于Jenkins进行CI/CD(CI:持续集成,CD:持续部署),其他项目通过NuGet引用。上文讲述了如何搭建本地NuGet服务器并发布NuGet包,这里不再赘述。CI/CD流程如下图:首…

acwing221 龙哥的问题

acwing221 龙哥的问题 文章目录题目&#xff1a;题解&#xff1a;代码&#xff1a;题目&#xff1a; 题解&#xff1a; 代码&#xff1a; #include <bits/stdc.h> using namespace std; typedef long long ll;int phi(int x) {int ansx;for(int i2;(ll)i*i<x;i)if(x%…

DP专练3:征途

虽然只有1道题&#xff0c;但是含金量还是够够di 文章目录题目题解代码实现题目 题解 我们直接对答案输出格式进行处理&#xff1a;设第 iii 天走的路程为 aia_iai​&#xff0c;总路程为 S∑i1nleniS\sum_{i1}^nlen_iS∑i1n​leni​&#xff0c;那么 v∑i1m(ai−Sm)2mv∑_{i1…

云时代的.NET

编程语言从最初的0101机器码到汇编语言再到面向对象的编程&#xff0c;不断的发展&#xff0c;整个发展趋势呈现高内聚、低耦合、可重用、可理解的特点。最早编程是用机器码&#xff0c;人的大脑不像电脑&#xff0c;无法处理0101&#xff1b;后来汇编语言还是太费解&#xff0…

研究性学习:APP的隐私问题

文章目录写在前面背景&#xff08;problem&#xff09;一个实例(example)手机App用户输入隐私数据的识别与检测技术研究&#xff08;solution&#xff1f;&#xff09;&#xff08;官方&#xff09;概览背景介绍4.系统设计隐私政策引言1.收集信息2. 信息使用3. 信息披露4. 信息…

DP专练4:[SCOI 2010]股票交易(单调队列优化dp)

昨天晚上&#xff0c;初见它时&#xff0c;月黑风高&#xff0c;一个电脑&#xff0c;一支笔&#xff0c;一个人 今天秋高气爽&#xff0c;再一瞥&#xff0c;回眸间 我又来了&#xff0c;honey题目题解代码实现题目 题解 首先这种 iii 天与前面 jjj 天有关联&#xff0c;而…

【做题记录】[NOIP2016 普及组] 魔法阵

P2119 魔法阵 2016年普及组T4 题意&#xff1a; 给定一系列元素 \(\{X_i\}\) &#xff0c;求满足以下不等式的每一个元素作为 \(a,b,c,d\) 的出现次数 。 \[\begin{cases}X_a<X_b<X_c<X_d \\ X_a-X_b2\times (X_d-X_c) \\X_b-X_a<\dfrac{X_c-X_b}{3}\end{cases} \]…

“被狗啃”的按钮引发的开源社区信任危机

昨天&#xff0c;在国外民众还在欢度圣诞期间&#xff0c;开发者社区却对 Antd 开发团队发起了连番的炮轰。一觉醒来&#xff0c;他们发现由自己参与设计的、公司内网、办事系统等网页上&#xff0c;有一些按钮的上面多了一团白色的“积雪”&#xff0c;在白背景下&#xff0c;…

[COCI2017-2018#5] Pictionary(并查集+dfs)

贼ex的一道&#xff0c;卡了本仙女整整7个小时orz 思路容易理解&#xff0c;but码力very重要orz 我愿意花五毛钱提升我的码力&#xff0c;换个脑子也行&#xff0c;不换脸这张脸生得俊俏 luogu传送door 题目 在宇宙一个不为人知的地方&#xff0c;有一个星球&#xff0c;上面…

Docker最全教程——从理论到实战(九)

在本系列教程中&#xff0c;笔者希望将必要的知识点围绕理论、流程&#xff08;工作流程&#xff09;、方法、实践来进行讲解&#xff0c;而不是单纯的为讲解知识点而进行讲解。也就是说&#xff0c;笔者希望能够让大家将理论、知识、思想和指导应用到工作的实际场景和实践之中…

[2019CSP多校联赛普及组第五周] 调度CPU (贪心)

来来来&#xff0c;走过路过不要错过题目题解代码实现1代码实现2题目 ⼩Y同学有⼀块超级CPU&#xff0c;它有两个超级核⼼A和B。 A核⼼可以同时处理多项任务&#xff0c;每项任务处理时间为x&#xff0c;B核⼼只能同时处理⼀项任务&#xff0c;每项任务处理时间为y。 这⼀天…