重新整理 .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余节,因为博客园一天只能放一篇,故而持续放出。