[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权限验 ...
随机推荐
- CHIMA网络安全攻防大赛经验分享
比赛模式 第一轮:20分钟基础知识赛(50道题) 安全运维,法律法规,linux操作系统等 第二轮:50分钟CTF夺旗(5道题) 题目涵盖 密码学 运用多种工具,如ASCII对照,古典密码,凯撒密码, ...
- Flutter 路由传入中文参数报错无法push问题
flutter自带路由传递参数和使用第三方库fluro路由传递参数都可以通过一下方式解决问题 String jsonString = json.encode(mapValue); var jsons ...
- 开发环境下的 Kubernetes 容器网络演进之路
马蜂窝技术原创文章,更多干货请搜索公众号:mfwtech 使用 Docker+Kubernetes 来简化开发人员的工作流,使应用更加快速地迭代,缩短发布周期,在很多研发团队中已经是常见的做法. 如果 ...
- 【VS开发】开发最小化到托盘的功能
在VC++中,想实现最小化MFC程序的时候,最小化到系统托盘,需要调用NOTIFYICONDATA类 下面我们就来讲解一下如何简单实现一个系统托盘我们以对话框程序为列 第一步:在Dlg类中//定义一个 ...
- Flask 数据库连接
Flask拥有丰富的扩展组件,数据库管理方面Flask-SQLAlchemy简化了数据库管理的操作.SQLAlchemy是一个很强大的关系型数据库框架,支持多种数据库后台.其不但提供了高层ORM,而且 ...
- Ubuntu的apt命令详解()deepin linux是在Ubuntu基础上开发的
apt-cache和apt-get是apt包的管理工具,他们根据/etc/apt/sources.list里的软件源地址列表搜索目标软件.并通过维护本地软件包列表来安装和卸载软件. 查看本机是否安装软 ...
- AVR单片机教程——序言
我一直觉得现在的网络环境对电子技术的学习有一点问题,但始终无法确切地指出,更何况网络上相关资源已经那么丰富. 但我觉得是问题的,无论它到底是不是问题,对我来说总归是一个问题.我学习也不算深入,很多东西 ...
- 《MySQL数据库从入门到精通》 高级运维人才的必备书籍
众所周知,每年就业市场都会迎来千万量级的高校毕业生,然而企业招工难和毕业生就业难的矛盾却一直没有得到很好地解决.究其原因,主要矛盾还是在于传统的学历教育与企业实际需求相脱节.为了杜绝高校毕业生求职时常 ...
- linux学习之路(三)--centos7安装mysql(单点)
1.先检查系统是否装有mysql rpm -qa | grep mysql 返回空值,说明没有安装. 这里执行安装命令是无效的,因为centos-7默认是Mariadb,所以执行以下命令只是更新Mar ...
- ubuntu下使用eclipse调试jni无法获取环境变量,本地库(java.library.path,LD_LIBRARY_PATH)等问题的解决。
首先要把本地库全部配置到LD_LIBRARY_PATH中. 然后一定要采用命令行方式启动eclipse(也可以写一个启动shell,通过桌面启动器打开这个shell),这样环境变量才会有效. 打开终端 ...