ABP VNext框架基础知识介绍(2)微服务的网关

摘要:
本篇随笔介绍一下网关的基本智知识,以及ABPVNext框在引入Ocelot来做网关后的架构图场景,介绍一下ABPVNext微服务的案例的基本情况。ABPVNext框架里面也采用了多网关的应用,其微服务的整体架构图如下所示。ABPVNext框架中的微服务,有各个模块的微服务组成一个集合,一起为各个应用

ABP VNext框架如果不考虑在微服务上的应用,也就是开发单体应用解决方案,虽然也是模块化开发,但其集成使用的难度会降低一个层级,不过ABP VNext和ABP框架一样,基础内容都会设计很多内容,如数据库都支持Oracle、SQLServer、MySql、PostgreSQL、SQLite,都有利用Redis作为分布式缓存,使用RabbitMQ作为事件总线的消息处理方式,使用MongoDB的NoSQL类型数据库作为特殊数据的存储服务,使用Quartz/HangFire作为定时任务的处理等。如果考虑引入微服务的话,会更需要了解IdentityServer服务,以及了解Ocelot库管理网关,使用Elasticsearch&Kibana来存储和可视化日志 (使用Serilog写日志),有时候感觉引入框架并非一件轻松的事情,各种知识点一股脑的涌来。

"作为面向服务架构(SOA)的一个变体,微服务是一种将应用程序分解成松散耦合服务的新型架构风格. 通过细粒度的服务和轻量级的协议,微服务提供了更多的模块化,使应用程序更容易理解,开发,测试,并且更容易抵抗架构侵蚀. 它使小型团队能够开发,部署和扩展各自的服务,实现开发的并行化.它还允许通过连续重构形成单个服务的架构. 基于微服务架构可以实现持续交付和部署."

ABP VNext 框架引入微服务后,就需要使用API网关来,ABP框架可以使用Ocelot来做网关统一处理上游的HTTP请求,并在内部网络上使用内部网关,处理微服务之间的调用,从而把微服务的调用接口统一为一个固定的模式处理。本篇随笔介绍一下网关的基本智知识,以及ABP VNext 框在引入Ocelot来做网关后的架构图场景,介绍一下ABP VNext 微服务的案例的基本情况。

1、网关和认证服务的介绍

API网关是系统暴露在外部的一个访问入口。就像一个公司的门卫承担着寻址、限制进入、安全检查、位置引导、等等功能。从面向对象设计的角度看,它与外观模式类似。API网关封装了系统内部架构,为每个客户端提供一个定制的API。它可能还具有其它职责,如身份验证、监控、负载均衡、缓存、请求分片与管理、静态响应处理等等。
API网关方式的核心要点是,所有的客户端和消费端都通过统一的网关接入微服务,在网关层处理所有的非业务功能。通常,网关也是提供REST/HTTP的访问API。

Ocelot是一个用.NET Core技术实现并且开源的API网关技术,它的功能包括了:路由、请求聚合、服务发现、认证、鉴权、限流熔断、并内置了负载均衡器、Service Fabric、Butterfly Tracing等的集成。而且这些功能都只需要简单的配置即可完成。

Ocelot首先通过配置将HttpRequest对象保存到一个指定的状态直到它到达用来创建HttpRequestMessage对象并将创建的HttpRequestMessage对象发送到下游服务中的请求构造中间件。通过中间件来发出请求是Ocelot管道中做的最后一件事。它不会再调用下一个中间件。下游服务的响应会存储在每个请求 scoped repository中,并作为一个请求返回到Ocelot管道中。有一个中间件将HttpResponseMessage映射到HttpResponse对象并返回给客户端。

单网关服务示意图如下所示。

ABP VNext框架基础知识介绍(2)微服务的网关第1张

API 网关一般放到微服务的最前端,并且要让API 网关变成由应用所发起的每个请求的入口。这样就可以明显的简化客户端实现和微服务应用程序之间的沟通方式。

ABP VNext框架基础知识介绍(2)微服务的网关第2张

ABP VNext框架基础知识介绍(2)微服务的网关第3张

上游和下游描述消息流:所有 消息从上游流动到下游。

网关作为上游会接收所有的客户端请求,并路由到对应的下游服务器进行处理,再将请求结果返回。而这个上下游请求的对应关系也被称之为路由。

我们的下游服务接口都是公开的,没有经过任何的认证,只要知道接口的调用方法,任何人都可以随意调用,因此,很容易就造成信息泄露或者服务被攻击。

正如,我要找Wlling干活之前,我得先到 HR 部门那里登记并且拿到属于我自己的工卡,然后我带着我的工卡去找Wlling,亮出我是公司员工的身份,并且有权利要求他帮我完成一个任务。

IdentityServer4认证服务器有多种认证模式,包括用户密码、客户端等等。客户端需要先想IdentityServer4 请求认证,获得一个token,然后再带着这个token向下游服务发出请求。

ApiResources 为数组类型,表示identityserver管理的所有的下游服务列表。

  • Name: 下游服务名称
  • DisplayName: 下游服务别名

Clients为数组类型,表示identityserver管理的所有的上游客户端列表

  • ClientId: 客户端id
  • ClientSecret: 客户端对应的密钥
  • GrantType: 该客户端支持的认证模式
  • Scope: 该客户端支持访问的下游服务列表,必须是在apiresources列表中登记的

当接入ocelot网关时,我们要达到内外互隔的特性,于是就把identityserver服务也托管到ocelot网关中,这样我们就能统一认证和服务请求时的入口。

ABP VNext框架基础知识介绍(2)微服务的网关第4张

如ABP案例中的微服务网关【PublicWebSiteGateway.Host】项目中的配置内容,配置服务器上下游的信息如下所示。

  "Routes": [
    {
      "DownstreamPathTemplate": "/api/productManagement/{everything}",
      "DownstreamScheme": "https",
      "DownstreamHostAndPorts": [
        {
          "Host": "localhost",
          "Port": 44344}
      ],
      "UpstreamPathTemplate": "/api/productManagement/{everything}",
      "UpstreamHttpMethod": [ "Put", "Delete", "Get", "Post"]
    },
    {
      "DownstreamPathTemplate": "/api/blogging/{everything}",
      "DownstreamScheme": "https",
      "DownstreamHostAndPorts": [
        {
          "Host": "localhost",
          "Port": 44357}
      ],
      "UpstreamPathTemplate": "/api/blogging/{everything}",
      "UpstreamHttpMethod": [ "Put", "Delete", "Get", "Post"]
    }
  ],
  "GlobalConfiguration": {
    "BaseUrl": "https://localhost:44397"},

多网关服务示意图如下所示,这种模式是针对不同的客户端来实现一个不同的API网关。

ABP VNext框架基础知识介绍(2)微服务的网关第5张

ABP VNext 框架里面也采用了多网关的应用,其微服务的整体架构图如下所示。

其中网关包含了后台管理应用网关【BackendAdminAppGateway.Host】,以及公开的应用接入网关【PublicWebSiteGateway.Host】,而内部网关服务【InternalGateway.Host】,则是用于内部微服务之间调用的统一网关解析。

ABP VNext框架基础知识介绍(2)微服务的网关第6张

ABP VNext框架中的微服务,有各个模块的微服务组成一个集合,一起为各个应用提供不同的数据处理服务。

ABP VNext框架基础知识介绍(2)微服务的网关第7张

2、ABP VNext项目的微服务项目

前面说到,ABP VNext 框架里面也采用了多网关的应用,其中网关包含了后台管理应用网关【BackendAdminAppGateway.Host】,以及公开的应用接入网关【PublicWebSiteGateway.Host】,而内部网关服务【InternalGateway.Host】,则是用于内部微服务之间调用的统一网关解析。

ABP VNext框架基础知识介绍(2)微服务的网关第6张

ABP VNext的微服务项目如下所示。

ABP VNext框架基础知识介绍(2)微服务的网关第9张

生成的数据库包含两个部分,其中基础数据库包含IdentityServer4所需的基础表,以及用户、角色、租户、日志、组织机构、权限等权限模块的基础表;另外一个部分就是业务模块的数据库了,如下所示。

我们通过AuthServer.Host和ProductService.Host项目,初始化相关的数据库。

ABP VNext框架基础知识介绍(2)微服务的网关第10张

最后获得两个初始数据库,包含基础的表信息。

ABP VNext框架基础知识介绍(2)微服务的网关第11张

之前随笔也提到过,虽然ABP VNext的官方提供了构建权限系统的相关表信息,但是组织机构、用户、角色业务表和中间表的管理没有在其对应的Identity项目中提供,官方提供的Identity项目如下所示。

ABP VNext框架基础知识介绍(2)微服务的网关第12张

这部分完善的应用接口及管理,他们是在ABP VNext商业版中进行开发并提供的,因此我们开发具体的应用所需的权限基础内容,需要自己进行项目模块的扩展,然后完善组织机构、角色、用户、菜单、日志(审计日志、对象修改日志)、权限点的管理和维护等内容。

3、微软的eShopOnContainer微服务架构

eShopOnContainer是基于Docker技术微服务架构demo,由微软架构师利用.net core技术实现并在github上开源,同时发布的还有关于微服务架构的白皮书(点这里),微服务架构是一个比较新的架构模式,通读白皮书并结合该demo代码,可以做到按图索骥的作用,对理解.net core技术实现微服务架构可以做到事半功倍。

在Github中的微软eShopOnContainer 项目地址:https://github.com/dotnet-architecture/eShopOnContainers

eShopOnContainer 的开发架构示意图如下所示。

ABP VNext框架基础知识介绍(2)微服务的网关第13张

包含网关的架构架构图如下图所示,其中包含多个网关服务处理客户端的请求。

ABP VNext框架基础知识介绍(2)微服务的网关第14张

4、微服务的模块拆分

微服务根据功能或者应用场景进行拆分,如把一个大型复杂的系统应用,拆分为多个微服务应用模块,然后进行整合使用。

ABP VNext框架基础知识介绍(2)微服务的网关第15张

或者按下面界限上下文进行划分

ABP VNext框架基础知识介绍(2)微服务的网关第16张

不过微服务也不是拆分的越细越好,一般根据实际情况进行度量,引入微服务虽然能够解决一些技术上和性能上的问题,不过拆分过多可能会导致开发和维护上灾难。

免责声明:文章转载自《ABP VNext框架基础知识介绍(2)微服务的网关》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Eclipse 4.3 Kepler最快汉化方法QQ空间开放平台开发教程-SDK和API的使用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

电子商务系统+java+web+完整项目+包含源码和数据库Java实用源码

鸿鹄云商大型企业分布式互联网电子商务平台,推出PC+微信+APP+云服务的云商平台系统,其中包括B2B、B2C、C2C、O2O、新零售、直播电商等子平台。 分布式、微服务、云架构电子商务平台 java b2b2c o2o 技术解决方案 开发语言:java、j2ee 数据库:mysql JDK支持版本:JDK1.6、JDK1.7、JDK1.8版本 通用框架...

【微信】新闻推送步骤

微信公众平台主页 准备群发素材 这里演示多图文消息情况—— 群发消息 在素材中找之前编辑好的内容 补充:微社区后台设置 进入微社区后点击【话题管理】-【发新话题】,然后进行复制粘贴即可(注意:图片需要下载后上传到微社区里,无法粘贴) 记得把标签改为【七院动态】 编辑好后提取网页链接 补充:编辑器用法略讲 所有编辑器基本都差不多,...

基于SAP的中国式数据分析浅谈

大数据时代,虽然多数企业数据的应用并不能称得上是“大数据”,但也证实了数据应用的重要性和影响力。确实,数据作为企业发展的信息沉淀,已成为企业的重要资产,如何有效利用数据是每个企业必须面临的课题。 这里我们分享一个波司登集团通过改进信息系统,加强数据运营管理来提升企业效益的案例,原文是波司登集团软件研发经理孙健在帆软大数据巡展上的演讲。 从2012年到201...

浅析b站2021/7/13日晚服务崩溃问题

14日凌晨,B站发布消息称: 昨晚,B站的部分服务器机房发生故障,造成无法访问。技术团队随即进行了问题排查和修复,现在服务已经陆续恢复正常。耽误大家看视频了,对不起! 已知: Bilibili,Acfun,豆瓣都出现崩溃404. 豆瓣和Acfun很快恢复,Bilibili大约用了一个小时让用户能够正常访问。 Bilibili直播是可以正常观看的,朋友看吃鸡...

3、zabbix配置入门

Zabbix模板zabbix组件:zabbix-serverzabbix-databasezabbix-webzabbix-agentzabbix-proxyzabbix逻辑组件:主机组、主机item(监控项)、appliction(应用)graph(图形)trigger(触发器)event(事件)actionnoticecommandmediauser...

WebSocket与消息推送

目录 一、Socket简介 二、WebSocket简介与消息推送 三、WebSocket客户端 四、WebSocket服务器端 五、测试运行 六、小结与消息推送框架 6.1、开源Java消息推送框架 Pushlet 6.2、开源DotNet消息推送框架SignalR B/S结构的软件项目中有时客户端需要实时的获得服务器消息,但默认HTTP协议...