基于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方式^_^)。下面是我的整个想法构思图。
图 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
- ASP.NET5 REST API使用示例——基于云平台+云服务打造自己的在线翻译工具
- Asp.Net Core 轻松学-基于微服务的后台任务调度管理器
- 开发基于ASP.NETWebService的图片验证码服务
- ASP.NET MVC 下打造轻量级的 Theme 机制
- 搭建基于asp.net的wcf服务,ios客户端调用的实现记录
- 5.2基于JWT的令牌生成和定制「深入浅出ASP.NET Core系列」
- AspNet Core Api Restful +Swagger 实现微服务之旅(四)
- ASP.NET WEB服务和Flash打造MP3播放器
- Asp.Net Core 2.0 项目实战(11) 基于OnActionExecuting全局过滤器,页面操作权限过滤控制到按钮级
- 阿里云容器服务与ASP.NET Core部署:用 docker secrets 保存 appsettings.Production.json
- 开发基于ASP.NET WebService的图片验证码服务
- Asp.Net Core2.0 基于QuartzNet任务管理系统
- 基于DotNet Core的RPC框架(一) DotBPE.RPC快速开始
- 使用ASP.NET Web Api构建基于REST风格的服务实战系列教程【八】——Web Api的安全性
- 基于Asp.Net Core Mvc和EntityFramework Core 的实战入门教程系列-5
- 使用ASP.NET Web Api构建基于REST风格的服务实战系列教程【三】——Web Api入门
- (7)学习笔记 ) ASP.NET CORE微服务 Micro-Service ---- 利用Polly+AOP+依赖注入封装的降级框架
- 一步步打造基于ASP.NET的CMS内容管理系统--Step2 系统配置(附源代码)
- 使用ASP.NET Web Api构建基于REST风格的服务实战系列教程【外传】——Attribute Routing