前言

简单整理一下网关。

正文

在介绍网关之前,介绍一下BFF,BFF全称是Backend For Frontend,它负责认证授权,服务聚合,目标是为前端提供服务。

说的通透一点,就是有没有见过这种服务。

上述就是buff通过代理其他服务来让前端访问。这时候就有人说了,这不就是网关吗?

是的,个人理解这本来就属于一种网关。以前网关只负责数据协议的转发,现在变得高级了,功能更多了。

但是如果只负责数据协议的转发,那么就有一个专门的认证服务。每次用户访问网关的时候,网关要转到认证服务去认证,然后才能到后面具体访问的服务。

这就变得非常麻烦了,故而就把认证授权移到了网关中,这样系统的复杂性就减少了。

那么什么聚合服务呢?

上文中服务2和服务3进行了聚合,就是某个服务调用了服务2和服务3的接口实现了新的接口,暴露出去了。

同样,如果服务2和服务3的聚合的接口比较少,且改动性比较少的情况下,也可以直接放到网关中,这样避免系统复杂性。

其实现实中很多东西没有必要全部分开,一般是考虑到安全性和稳定性,安全性没得说,必须的东西,稳定性就是改动该服务后影响的服务节点是多少,如果是高频改动,那么即使是一个接口也要独立出去。

像下面的,因为如果有不同领域的应用,那么最好分开来,因为一个网关的改动会影响到其他不同领域的应用。

然后这里有一个详细的介绍演化的:https://blog.csdn.net/yang75108/article/details/86987404.

那么来看一下.net core如何打造网关吧。

  1. 添加Ocelot

  2. 添加配置文件 ocelot.json

  3. 添加配置读取代码

  4. 注册Ocelot 服务

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

最新文章

  1. 分布式理论之一:Paxos算法的通俗理解
  2. Git及Github入门笔记
  3. mac下mysql的安装
  4. bzoj题解汇总(1017-1020)
  5. shell中实现自动登录(bash环境脚本中)
  6. Django基础篇之数据库选择及相关操作
  7. 【转】prototype扩展的JavaScript常用函数库
  8. virtenv 0.8.6 发布,虚拟桌面配置工具 - 开源中国社区
  9. 直读Innodb datafile
  10. 单词计数,杭电0j-2072
  11. 快速傅里叶变换 &amp; 快速数论变换
  12. 讨论MMU
  13. Java的深拷贝和浅拷贝
  14. 使用IntelliJ IDEA的小技巧快乐编程(1)
  15. 【转】sqlserver使用sql导出索引
  16. 问题 Duplicate entry &#39;0&#39; for key &#39;PRIMARY&#39;
  17. node.js核心技术
  18. Hexo+Github 搭建属于自己的博客(Mac下安装 其他操作系统大同小异)
  19. 使用路由和远程访问服务为Hyper-V中虚拟机实现NAT上网
  20. tensorflow初始化函数变更

热门文章

  1. SUSE 11sp3镜像制作
  2. REST 架构风格详解
  3. 调试备忘录-SWD协议解析
  4. K8s之二进制安装高可用集群
  5. unity editor模式下读取文件夹资源
  6. 拉仇恨!webhook + 企业微信给同事做了个代码提交监听工具
  7. Zabbix企业分布式监控工具
  8. [论文阅读笔记] Unsupervised Attributed Network Embedding via Cross Fusion
  9. [leetcode] 75. 分类颜色(常数空间且只扫描一次算法)
  10. 华为MDC自动驾驶