重新整理 .net core 实践篇————网关[三十六]
前言
简单整理一下网关。
正文
在介绍网关之前,介绍一下BFF,BFF全称是Backend For Frontend,它负责认证授权,服务聚合,目标是为前端提供服务。
说的通透一点,就是有没有见过这种服务。
上述就是buff通过代理其他服务来让前端访问。这时候就有人说了,这不就是网关吗?
是的,个人理解这本来就属于一种网关。以前网关只负责数据协议的转发,现在变得高级了,功能更多了。
但是如果只负责数据协议的转发,那么就有一个专门的认证服务。每次用户访问网关的时候,网关要转到认证服务去认证,然后才能到后面具体访问的服务。
这就变得非常麻烦了,故而就把认证授权移到了网关中,这样系统的复杂性就减少了。
那么什么聚合服务呢?
上文中服务2和服务3进行了聚合,就是某个服务调用了服务2和服务3的接口实现了新的接口,暴露出去了。
同样,如果服务2和服务3的聚合的接口比较少,且改动性比较少的情况下,也可以直接放到网关中,这样避免系统复杂性。
其实现实中很多东西没有必要全部分开,一般是考虑到安全性和稳定性,安全性没得说,必须的东西,稳定性就是改动该服务后影响的服务节点是多少,如果是高频改动,那么即使是一个接口也要独立出去。
像下面的,因为如果有不同领域的应用,那么最好分开来,因为一个网关的改动会影响到其他不同领域的应用。
然后这里有一个详细的介绍演化的:https://blog.csdn.net/yang75108/article/details/86987404.
那么来看一下.net core如何打造网关吧。
添加Ocelot
添加配置文件 ocelot.json
添加配置读取代码
注册Ocelot 服务
注册Ocelot 中间件
可以先看下文档哈。https://github.com/ThreeMammals/Ocelot
这里就演示一下getStart。因为如果演示复杂的,不一定用的上,而且整理的混乱,有需求才有实践。千万级之所以是千万级应用,是因为用户千万级。
首先安装好Ocelot。
添加服务:
services.AddOcelot(Configuration);
注册中间件:
app.UseOcelot().Wait();
app.UseOcelot().Wait(); 应该放在中间件的最后,为什么呢?
因为网关内可能有一些其他api,比如说认证授权的,那么让那些api先生效,最后才执行到Ocelot网关处理部分。
"ReRoutes": [
{
"DownstreamPathTemplate": "/api/order/get",
"DownstreamScheme": "http",
"DownstreamHostAndPorts": [
{
"Host": "localhost",
"Port": 9001
}
],
"UpStreamPathTemplate": "/api/order/get",
"UpstreamHttpMethod": [ "Get" ]
}
],
"GlobalConfiguration": {
"BaseUrl": "http://localhost:5000"
},
然后在9001中加入请求:
[HttpGet("Get")]
public async Task<string> Get()
{
return "我是一个内部请求.";
}
log如下:
我们可以直接通过配置来实现网关,当然这是大部分,这些看文档就好,有些需要做其他处理的,那么就可以自己在网关中写api了。
结
下一节在网关中实现JWT来完成身份认证和授权。后面系列中,本系列50余节后,因为涉及到docker和k8s,故而整理了一下k8s的东西,共40余节,因为博客园一天只能放一篇,故而持续放出。
重新整理 .net core 实践篇————网关[三十六]的更多相关文章
- 重新整理 .net core 实践篇—————HttpClientFactory[三十二]
前言 简单整理一下HttpClientFactory . 正文 这个HttpFactory 主要有下面的功能: 管理内部HttpMessageHandler 的生命周期,灵活应对资源问题和DNS刷新问 ...
- 重新整理 .net core 实践篇————网关中的身份签名认证[三十七]
前言 简单整理一下网关中的jwt,jwt用于授权认证的,其实关于认证授权这块https://www.cnblogs.com/aoximin/p/12268520.html 这个链接的时候就已经写了,当 ...
- 重新整理 .net core 实践篇—————文件系统[二十二]
前言 简单介绍一下文件系统. 正文 文件系统,主要是下面3个接口组成: IFileProvider IFileInfo IDirectoryContents 那么他们的实现是: physicalFil ...
- 重新整理 .net core 实践篇—————grpc[三十三]
前言 简单整理一下grpc. 正文 什么是grpc? 一个远程过程调用框架,可以像类一样调用远程方法. 这种模式一般来说就是代理模式,然后都是框架自我生成的. 由google 公司发起并开源,故而前面 ...
- 重新整理 .net core 实践篇——— filter[四十四]
前言 简单介绍一下filter 正文 filter 的种类,微软文档中写道: 每种筛选器类型都在筛选器管道中的不同阶段执行: 授权筛选器最先运行,用于确定是否已针对请求为用户授权. 如果请求未获授权, ...
- 重新整理 .net core 实践篇————配置应用[一]
前言 本来想整理到<<重新整理.net core 计1400篇>>里面去,但是后来一想,整理 .net core 实践篇 是偏于实践,故而分开. 因为是重新整理,那么就从配置开 ...
- 程序员编程艺术第三十六~三十七章、搜索智能提示suggestion,附近点搜索
第三十六~三十七章.搜索智能提示suggestion,附近地点搜索 作者:July.致谢:caopengcs.胡果果.时间:二零一三年九月七日. 题记 写博的近三年,整理了太多太多的笔试面试题,如微软 ...
- NeHe OpenGL教程 第三十六课:从渲染到纹理
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- centos shell脚本编程2 if 判断 case判断 shell脚本中的循环 for while shell中的函数 break continue test 命令 第三十六节课
centos shell脚本编程2 if 判断 case判断 shell脚本中的循环 for while shell中的函数 break continue test 命令 ...
随机推荐
- 并发王者课 - 青铜 2:峡谷笔记 - 简单认识Java中的线程
在前面的<兵分三路:如何创建多线程>文章中,我们已经通过Thread和Runnable直观地了解如何在Java中创建一个线程,相信你已经有了一定的体感.在本篇文章中,我们将基于前面的示例代 ...
- CocoaPods 构建自己的 Pod 库
构建一个自己的库供其它人使用是不是一件很酷(苦)的事情,通过CocoaPods 可以快捷的构建自己库,并向全世界分享你的成果 一.创建 Podspec 有两种方式: 使用命令 pod lib crea ...
- [bug] Maven:No valid Maven installation found.maven
原因 从别处复制来的项目,maven路径没有改过来 参考 https://blog.csdn.net/qq_40846086/article/details/81252736
- Jmeter 设置中文
1.正常启动jmeter.bat 2.点击[Options]选项,弹出下拉菜单选择[Choose Language]选项3.选择[Choose Language]选项,弹出下一级菜单选择[Chines ...
- [Java] Git
版本控制 VCS(Version Control System):版本控制系统 主要功能:版本控制.主动提交.中央仓库 中央仓库功能:保存版本历史.同步团队代码 DVCS(Distributed VC ...
- Win10 禁用摄像头的方法及注意事项
Win10 禁用摄像头的方法及注意事项 windows教程 2020-03-04 223 最新的Windows10系统中应该如何禁用摄像头呢?下面MS酋长与大家分享一下.当然,如果你说用个便利贴把摄 ...
- 强哥node.js学习笔记
node后端语言: nodejs学习大纲:1.node安装2.node repl开发3.node sublime开发4.node 使用5.node 中创建第一个应用6.node 回调函数7.node ...
- Lua中的基本函数库--(转自忧郁的加菲猫)
基本函数库为Lua内置的函数库,不需要额外装载assert (v [, message])功能:相当于C的断言,参数:v:当表达式v为nil或false将触发错误,message:发生错误时返回的信息 ...
- S11 Linux系统管理命令
11.1 lsof:查看进程打开的文件 11.2 uptime:显示系统的运行时间及负载 11.3 free:查看系统内存信息 11.4 iftop:动态显示网络接口流量信息 11.5 vmstat: ...
- MyBatis 缓存机制(十三)
什么是缓存 缓存就是内存中的一个对象,用于对数据库查询结果的保存,用于减少与数据库的交互次数从而降低数据库的压力,进而提高响应速度. MyBatis 缓存机制原理 Mybatis 缓存机制原理是将第一 ...