[Abp vNext微服务实践] - 框架分析
一、简介
abp vNext新框架的热度一直都很高,于是最近上手将vNext的微服务Demo做了一番研究。我的体验是,vNext的微服务架构确实比较成熟,但是十分难以上手,对于没有微服务开发经验的.net人员来说几乎是看不懂的,所以研究一番后再这里做一些简单的分析便于新手能够快速理解并使用。
二、难点
在开始分析前先介绍下该框架中的难点,没有微服务开发经验的可能要对以下难点进行研究。
难点分析
难点一:identity server4身份验证框架,该框架是根据.net core identity身份机制扩展的框架,vNext微服务中身份验证服务就是基于该框架。官方文档:http://docs.identityserver.io/en/latest/
难点二:ocelot网关框架,vNext中使用该框架提供统一的网关地址,vNext中给网关进行了分类,分为内部网关、后台管理网关、公共网关,这些网关分别代理了下游不同的微服务。官方文档:https://ocelot.readthedocs.io/en/latest/
难点三:docker容器化管理,微服务开发中普遍应用到了容器化技术,基于该技术可实现快速构建和部署,大大提高微服务团队协作效率,如果要选型微服务技术,该项难点必须攻克。
难点总结
以上列举了vNext中重要的难点,其中identity server4身份服务是框架中最为重要的,也相当有难度。目前关于该框架的文档还不是很多,所以想要使用vNext实际开发,ids4框架应该首先研究。ocelot网关配置相对要简单些,也没有单独的ocelot数据库需要配置,只要配置好相应的下游微服务地址就可以了,上手比较快。docker容器和构建部署属于DevOps,如果公司有钱可以买Azure服务器,Azure非常的专业但是价格昂贵,如果购买普通的云服务那就只有用Jenkins自己搭建了。
三、MicroserviceDemo微服务架构分析
abp vNext微服务Demo提供多个公共微服务和一个产品服务,分别是身份授权服务(AuthServer),后台管理网关服务(BackendAdminAppGateway),内部网关服务(InternalGateway),门户网站网关服务(PublicWebSiteGateway),博客服务(BloggingService),用户管理服务(IdentityService),产品服务(ProductService)。在这些服务的基础上可以做各种业务开发,目前vNext的文档还不够完善,建议业务开发暂时集成在产品服务中。下面开始为以上服务分别介绍,MicroserviceDemo中还有其他几个服务,因为用不上所以就不介绍了。
服务分层
MicroserviceDemo对微服务进行了分层,分为微服务层(microservices)、网关层(gateways)、应用层(applications)和模块层(modules)。
微服务层(microservices):
MicroserviceDemo微服务层中提供了三个微服务,分别是:IdentityService(用户)、BloggingService(博客)、ProductService(产品)。IdentityService提供了用户和角色信息管理,但是接口并不在该服务中,vNext将接口实现在底层module中,也就是volo包中,这种实现方式可能在以后的定制开发中有些不灵活。BloggingService服务提供了博客管理,管理接口也不再服务中实现。ProductService服务提供的是产品服务,同样,该服务也没有任何的接口实现,只是将模块层中product模块的接口发布出来,相当于ProductManagement的Host宿主。
这三个微服务可以单独部署,也可以通过docker集群部署,服务中发布的接口可以直接调用,但是建议不要单独调用服务中的接口,最好通过网关调用。docker部署效果:

实际开发中这些工程基本无需改动,因为工程内没有任何业务代码,仅有全局Autofac依赖注入框架注册和身份以及.net core管道注册。
网关层(gateways):
gateway服务都是网关服务,如果要开发后台管理系统(B端),只需提供auth-server和backend-adminapp-gateway端口给前端即可。public-website-gateway是门户网站网关服务提供博客和前台(C端)网站统一网关;internal-gateway是内部网关服务提供微服务系统调用,该服务并没有提供api接口,仅仅在系统内部可以调用;backend-adminapp-gateway是后台管理系统网关提供B端系统统一网关。网关的工程结构非常简单,在了解ocelot配置后,对下游服务做好配置就可以使用。
应用层(applications):
MicroserviceDemo中还提供了简单的应用服务实现,分别是:AuthServer.Host(身份服务)、BackendAdminApp.Host(后端web应用)、ConsoleClientDemo(控制台应用)、PublicWebSite.Host(公共web应用)。其中AuthServer最重要,也是整个微服务中的核心所在,AuthServer集成了identity server4框架,提供微服务统一的身份授权认证。AuthServer提供了简单的登录页面和跳转服务,但这些都是基于mvc开发,如果想要改为spa开发就要对.net core身份机制和ids4框架十分了解。由于我打算直接改为spa项目,所以后面的应用就不再介绍了,如果对mvc比较有兴趣的可以深入了解。
模块层(modules)
模块层中是业务代码的实现层,该层中可以根据需要实现各种业务系统,如CRM、OMS、ERP等等。模块层使用的是ddd架构风格,和aspnet zero风格一致,有了ddd的保驾护航,相信后面的业务开发也会非常的顺畅,后面我会介绍模块中的实际业务开发。
四、总结
到这里abp vNext微服务框架基本介绍完了,能够成功的部署和实际开发说明的框架本身的完善和强大,最近也将vue-element-admin框架登录与vNext接入了,后续会有更多完善的全端介绍,感兴趣的朋友可以持续关注下。总之万丈高楼平地起,只要想办法就没有实现不了的,对于想要进入微服务领域的.net攻城狮,abp vNext是学习的最佳选择。
文章目录:https://www.cnblogs.com/william-xu/p/12047529.html
[Abp vNext微服务实践] - 框架分析的更多相关文章
- [Abp vNext微服务实践] - 文章目录
简介 ABP vNext是volosoft的新一代框架,ABP(vNext)完全使用.NET CORE和DDD(领域驱动)打造,目前GitHub已有6K+次提交,发布版本超过40次,Nuget包下载量 ...
- [Abp vNext微服务实践] - 前后端分类
一.前景 abp vNext是ABP 开源 Web应用程序框架,是abp的新一代开源web框架.框架完美的集成.net core.identity server4等开源框架,适用于构建web应用程序和 ...
- [Abp vNext微服务实践] - 服务通讯
简介 服务通讯是微服务架构中必不可少的功能,服务通讯的效率决定了微服务架构的优略.常用的微服务通讯策略有两种,分别是rpc.http,其中rpc以gRpc框架为代表使用者最多.abp vNext微服务 ...
- [Abp vNext微服务实践] - vue-element-admin管理Identity
一.简介 abp vNext微服务框架中已经提供通用权限和用户角色管理模块,管理UI使用的是MVC模式,不适用于国内主打的MVVM开发模式.在前端框架选型后笔者决定改造abp vNext微服务框架中原 ...
- [Abp vNext微服务实践] - 启动流程
前几篇分别介绍了abp vNext微服务框架和微服务CI/CD环境搭建,本篇开始介绍vNext微服务框架的开发环境搭建. 环境准备 官方介绍的系统架构图如下: 上图中身份服务和网关服务已经集成在系统中 ...
- [Abp vNext微服务实践] - 业务开发
前几篇分别介绍了abp vNext微服务框架.开发环境搭建和vue element admin前端框架接入,在vue element admin中实现用户角色管理基本功能后就可以开始进行业务开发了,本 ...
- [Abp vNext微服务实践] - 租户登录
简介 Abp vNext微服务授权验证基于ids4,实现租户登录需要在授权服务中获取token,和之前的介绍的登录方式一样,只是多了tenant参数.本篇将介绍在Abp vNext授权服务中启用多租户 ...
- [Abp vNext微服务实践] - 添加中文语言
简介 abp vNext中提供了多语言功能,默认语言是英文,没有提供中文语言包.在业务开发中,定义权限后需要用中文的备注提供角色选择,本篇将介绍如何在abp vNext中加入中文语言. step1:添 ...
- [Abp vNext微服务实践] - vue-element-admin登录二
简介: Vue Element Admin是基于vue.element ui开发的后台管理ui,abp vNext是abp新一代微服务框架.本篇将会介绍如何改造Vue Element Admin权限验 ...
随机推荐
- 【Leetcode_easy】883. Projection Area of 3D Shapes
problem 883. Projection Area of 3D Shapes 参考 1. Leetcode_easy_883. Projection Area of 3D Shapes; 完
- K8S - 容器编排工具Kubernetes简介
1 - Kubernetes Kubernetes(简称K8s,用8代替8个字符"ubernete")是Google开源的一个容器编排引擎. 目前最为广泛且流行的容器编排调度系统, ...
- CF1266C Diverse Matrix
思路:构造题. 实现: #include <bits/stdc++.h> using namespace std; ][]; int main() { int r, c; while (c ...
- console.log()和alert()的区别
一直都是知道console.log()和alert()是有区别的,但是具体有什么区别就不清楚了,后来在权威指南里注意到了说alert()具有侵入性才来查一查两者的具体区别. 查询到的区别: alert ...
- shell学习及脚步编写
目录: shell基础变量逻辑运算符 scp基础用法脚本 while+for+case基础用法脚本 内核优化脚本 自动修改本机ip脚本 for+case 查询日志脚本 一键yum安装lamp脚本 源码 ...
- Ajax基本概念
一. Ajax 1. 什么是ajax Ajax: asynchronous javascript and xml (异步js和xml) 其是可以与服务器进行(异步/同步)交互的技术一. ajax ...
- .NET Core IOC AOP
IOC简介 IOC思想 把类当做组件或服务来看待,组件内一定要高内聚,组件之间一定要低耦合,既然要保持低耦合,那就一定不要轻易的去new什么对象. 那组件之间的交互怎么处理呢?那最好的方式就是把new ...
- laravel框架视图中常用的逻辑结构forlese,foreach,ifelse等
if 和else @if($name === 1) 这个数字是1 @else 这个数字非1 @endif switch @switch($name) @case(1) 变量name == 1 @bre ...
- (未完成)ARM-linux 移植 SDL
ref : https://blog.csdn.net/u012075739/article/details/24877639 2. 交叉编译SDL 编译SDL前先要编译其依赖库 tsl ...
- Codeforces Round #415 (Div. 1) (CDE)
1. CF 809C Find a car 大意: 给定一个$1e9\times 1e9$的矩阵$a$, $a_{i,j}$为它正上方和正左方未出现过的最小数, 每个询问求一个矩形内的和. 可以发现$ ...