前言

简单整理一下网关。

正文

在介绍网关之前,介绍一下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余节,因为博客园一天只能放一篇,故而持续放出。

重新整理 .net core 实践篇————网关[三十六]的更多相关文章

  1. 重新整理 .net core 实践篇—————HttpClientFactory[三十二]

    前言 简单整理一下HttpClientFactory . 正文 这个HttpFactory 主要有下面的功能: 管理内部HttpMessageHandler 的生命周期,灵活应对资源问题和DNS刷新问 ...

  2. 重新整理 .net core 实践篇————网关中的身份签名认证[三十七]

    前言 简单整理一下网关中的jwt,jwt用于授权认证的,其实关于认证授权这块https://www.cnblogs.com/aoximin/p/12268520.html 这个链接的时候就已经写了,当 ...

  3. 重新整理 .net core 实践篇—————文件系统[二十二]

    前言 简单介绍一下文件系统. 正文 文件系统,主要是下面3个接口组成: IFileProvider IFileInfo IDirectoryContents 那么他们的实现是: physicalFil ...

  4. 重新整理 .net core 实践篇—————grpc[三十三]

    前言 简单整理一下grpc. 正文 什么是grpc? 一个远程过程调用框架,可以像类一样调用远程方法. 这种模式一般来说就是代理模式,然后都是框架自我生成的. 由google 公司发起并开源,故而前面 ...

  5. 重新整理 .net core 实践篇——— filter[四十四]

    前言 简单介绍一下filter 正文 filter 的种类,微软文档中写道: 每种筛选器类型都在筛选器管道中的不同阶段执行: 授权筛选器最先运行,用于确定是否已针对请求为用户授权. 如果请求未获授权, ...

  6. 重新整理 .net core 实践篇————配置应用[一]

    前言 本来想整理到<<重新整理.net core 计1400篇>>里面去,但是后来一想,整理 .net core 实践篇 是偏于实践,故而分开. 因为是重新整理,那么就从配置开 ...

  7. 程序员编程艺术第三十六~三十七章、搜索智能提示suggestion,附近点搜索

    第三十六~三十七章.搜索智能提示suggestion,附近地点搜索 作者:July.致谢:caopengcs.胡果果.时间:二零一三年九月七日. 题记 写博的近三年,整理了太多太多的笔试面试题,如微软 ...

  8. NeHe OpenGL教程 第三十六课:从渲染到纹理

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  9. centos shell脚本编程2 if 判断 case判断 shell脚本中的循环 for while shell中的函数 break continue test 命令 第三十六节课

    centos  shell脚本编程2 if 判断  case判断   shell脚本中的循环  for   while   shell中的函数  break  continue  test 命令   ...

随机推荐

  1. Linux USB ECM Gadget 驱动介绍

    ​1 USB ECM介绍 USB ECM,属于USB-IF定义的CDC(Communication Device Class)下的一个子类:Ethernet Networking Control Mo ...

  2. index详解

    jQuery的 index 1.index() 获得向匹配的元素,从0开始计数.不给传递参数,返回值是 jQ对象的所有同辈的索引位置 :如果传递选择器代表,在该选择器下的所有索引位置:如果传递具体的j ...

  3. Docker Swarm(二)常用命令

    # 管理配置文件 docker config     # 查看已创建配置文件     - docker config ls     # 将已有配置文件添加到docker配置文件中     - dock ...

  4. Zookeeper——Docker下安装部署

    单节点安装 一. 环境说明 docker: 18.09.9-ce zookeeper: 3.5.6 二. 拉取 zookeeper 镜像 拉取镜像 docker pull zookeeper 默认是摘 ...

  5. SQL注入和XSS攻击

    SQL注入 定义:黑客通过在请求的数据中填入特殊字符,影响服务器数据库操作程序正常执行,从而达到攻击的目的. 形式: 拼接SQL: 登录验证:前台输入 username:yan password:12 ...

  6. mysql简单教程-(转自wid)

    21分钟 MySQL 入门教程 目录 一.MySQL的相关概念介绍 二.Windows下MySQL的配置 配置步骤 MySQL服务的启动.停止与卸载 三.MySQL脚本的基本组成 四.MySQL中的数 ...

  7. Java安全之Cas反序列化漏洞分析

    Java安全之Cas反序列化漏洞分析 0x00 前言 某次项目中遇到Cas,以前没接触过,借此机会学习一波. 0x01 Cas 简介 CAS 是 Yale 大学发起的一个开源项目,旨在为 Web 应用 ...

  8. 写Bug时,需要注意的几点3

    在对象之间搬移特性 类往往会因为承担过多责任而变得臃肿不堪. (Move Method)搬移函数 含义:在程序中,里面的一个函数与其类外面的一个类或函数有着紧密的调用或者被调用,则需要对其函数内部的表 ...

  9. ubuntu16.04服务自启动(弹控制台)

    一.设置root桌面用户登录 1.vim  /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf 在最后一行添加greeter-show-manual-lo ...

  10. Go语言基础包之net/http

    Go语言基础包之net/http Go语言内置的net/http包十分的优秀,提供了HTTP客户端和服务端的实现. net/http介绍 Go语言内置的net/http包提供了HTTP客户端和服务端的 ...