微服务网关租户(微服务 租户)

网友投稿 286 2022-12-29


本篇文章给大家谈谈微服务网关租户,以及微服务 租户对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 今天给各位分享微服务网关租户的知识,其中也会对微服务 租户进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

微服务网关层

API网关是所有客户端的统一入口。路由服务可以被用于很多目的,例如日志、限流、认证,从而做到应用无感知。API网关对于任意一种处理请求有两种方式处理。一部分请求只要简单路由到相应的服务;还有一些请求需要拆分到多个服务。API Gateway是实现微服务重要的组件之一,常用的网关Zuul, Nginx, Spring Cloud, Linkerd,Envoy,UnderTow。

为了评估API网关各自的性能,我们使用Apache的ab作为压测工具。(另外还可以用Gatling做性能测试)

测试结果和心得如下:

如何使用API 网关做服务编排?

服务编排/数据聚合 指的是可以通过一个请求来依次调用多个微服务微服务网关租户,并对每个服务的返回结果做数据处理,最终整合成一个大的结果返回给前端。

例如一个服务是“查询用户预定的酒店”,前端仅需要传一个订单ID,后端会返回整个订单的信息,包括用户信息、酒店信息和房间信息等。

这个服务背后可能对应着以下几个操作微服务网关租户

微服务架构上对功能做微服务网关租户了解耦,使用服务编排可以快速从各类服务上获取需要的数据,对业务实现快速响应。总的来说,编排有以下几点优势:

Goku API Gateway (中文名:悟空 API 网关)是一个基于 Golang 开发的微服务网关,能够实现高性能 HTTP API 转发、服务编排、多租户管理、API 访问权限控制等目的,拥有强大的自定义插件系统可以自行扩展,并且提供友好的图形化配置界面,能够快速帮助企业进行 API 服务治理、提高 API 服务的稳定性和安全性。

Goku API Gateway支持一个编排API对应多个后端服务,每个后端服务的请求参数可以使用前端传入的参数,也可以在编排里自定义(写静态参数或从返回数据里获得)。每个后端服务的返回数据支持过滤、删除、移动、重命名、拆包和封包等操作;编排API能够设定编排失败时的异常返回。

Goku API Gateway 的社区版本(CE)同时拥有完善的使用指南和二次开发指南,内置的插件系统也能够让企业针对自身业务进行定制开发。

项目地址: https://github.com/eolinker/goku-api-gateway

官网地址: https://www.eolinker.com

微服务网关租户我们将编排的整个操作放到网关进行,由网关对数据做处理与转换,这样无需对后端服务做改动。一个请求到达网关,网关调用多个后端服务,并且在网关上对各个服务的返回数据做处理(操作有过滤、移动、重命名、封包、拆包,后面会对各操作做详细解释),最后由网关将数据整合好返回给前端。

网关将编排过程中对 API的转发处理过程 (转发-获取返回数据-数据处理)称为一个 Step 。

添加一个转发服务,该服务为 查询订单详情API,配置相应的转发地址、传入的参数、对返回数据做何种处理等。

由于篇幅原因,后续的Step(查询用户详情、查询酒店详情、查询房间详情)就不一一展示了。

网关将编排过程中对 API的转发处理过程 (转发-获取返回数据-数据处理)称为一个 Step。

我们将处理查询订单详情API称为 Step1 ,其中Step1的返回数据有:用户ID、酒店ID、房间ID。同理,将查询用户信息这步称为 Step2 ,将查询酒店信息称为 Step3 ,将查询房间信息称为 Step4 。

传参规则:

以下为转发路径的传参写法:

Step2中需要接收Step1里返回的userID作为参数,同时需要接收前端传入的Authorization参数

在网关里Step2的请求参数配置如下所示,请求参数存在多个的话用换行表示:

1.查询订单详情的API,返回数据称为json1,内容如下:

2.查询用户详情的API,返回数据称为json2,内容如下:

3.查询酒店详情的返回数据,称为json3,内容如下:

4.查询房间详情的返回数据,称为json4,内容如下:

5.可以在每一个Step里对返回Json做处理,网关会将处理过的数据最后整合起来,再返回前端,例如这是通过网关返回的最终数据:

这里以查询酒店详情API的返回数据json3为例,讲解网关如何在编排过程中对返回数据做处理。

查询酒店详情API返回的原始数据如下:

从网关返回给前端的数据中截取酒店信息的数据如下:

从原始数据到处理后的数据需要经过以下操作:

字段黑名单的作用是排除某些字段,支持数组形式。

在网关的Step3里配置如下:

经过网关处理后,实际的返回数据如下,可以看到data对象里的id字段已经被过滤掉:

拆包是指将指定对象的内容提取出来作为该步骤(step)的返回结果。其中匹配目标只能为object,匹配目标为空时,结果为 {},可用于清除数据。

在网关的Step里配置如下:

经过网关处理后,实际的返回数据如下,可以看到data对象被拆开,最终数据仅保留了data对象里面的字段:

字段封包会将当前的数据整体打包为最终返回数据中的一个对象,不支持*,不支持数组。

在网关的Step里配置如下:

经过网关处理后,实际的返回数据如下,数据被整体打包为hotelinfo对象:

经过三个步骤,就可以将原始数据变成最终的数据。

本文仅列举了编排过程中部分数据处理的操作,如需了解更多编排细则,可通过文末给出的教程链接。

相关链接

微服务网关

1、路由转发:接收一切外界请求,转发到后端的微服务上去;
2、 过滤器 :在服务网关中可以完成一系列的横切功能,例如权限校验、限流以及监控等,这些都可以通过过滤器完成(其实路由转发也是通过过滤器实现的)。

https://zhuanlan.zhihu.com/p/101341556
https://blog.csdn.net/ztemt_sw2/article/details/106208946
https://studygolang.com/articles/13254
https://blog.csdn.net/micl200110041/article/details/82013032

微服务核心组件 Zuul 网关原理剖析

Zuul 网关是具体核心业务服务的看门神,相比具体实现业务的系统服务来说它是一个边缘服务,主要提供动态路由,监控,弹性,安全性等功能。在分布式的微服务系统中,系统被拆为了多套系统,通过zuul网关来对用户的请求进行路由,转发到具体的后台服务系统中。

本 Chat 主要内容如下:

网关是具体核心业务服务的看门神,相比具体实现业务的系统服务来说它是一个边缘服务,主要提供动态路由,监控,弹性,安全性等功能,下面我们从单体应用到多体应用的演化过程来讲解网关的演化历程。

一般业务系统发展历程都是基本相似的,从单体应用到多应用,从本地调用到远程调用。对应单体应用架构模式(如下图1),由于只需一个应用,所有业务模块的功能都打包为了一个 War 包进行部署,这样可以减少机器资源和部署的繁琐。

图1 单体应用

在单体应用中,网关模块是和应用部署到同一个jvm进程里面的,当外部移动设备或者web站点访问单体应用的功能时候,请求是先被应用的网关模块拦截的,网关模块对请求进行鉴权、限流等动作后在把具体的请求转发到当前应用对应的模块进行处理。

随着业务的发展,网站的流量会越来越大,在单体应用中简单的通过加机器的方式可以带来的承受流量冲击的能力也越来越低,这时候就会考虑根据业务将单体应用拆成若干个功能独立的应用,单体应用拆为多个应用后,由于不同的应用开发对应的功能,所以多应用开发之间可以独立开发而不用去理解对方的业务,另外不同的应用模块只承受对应业务流量的压力,不会对其他应用模块造成影响,这时候多体的分布式系统就出现了,如下图2。

图2 多体应用

如上图在多体应用中业务模块A和B单独起了个应用,每个应用里面有自己的网关模块,如果业务模块多了,那么每个应用都有自己的网关模块,这样复用性不好,所以可以考虑把网关模块提起出来,单独作为一个应用来做服务路由,如下图3:

如上图当移动设备发起请求时候是具体发送到网关应用的,经过鉴权后请求会被转发到具体的后端服务应用上,对应前端移动设备来说他们不在乎也不知道后端服务器应用是一个还是多个,他们只能感知到网关应用的存在。

Zuul是Netflix开源的一个网关组件,在Netflix内部系统中Zuul被用来作为内部系统的门面,如下图是Zuul在Netflix内部使用的一个架构图:

如上图最上层的移动设备或者网站首先通过aws负载均衡器把请求路由到zuul网关上,zuul网关则负责把请求路由到具体的后端service上。

Zuul开源地址 https://github.com/Netflix/zuul

Zuul网关的核心是一系列的过滤器,这些过滤器可以对请求或者响应结果做一系列过滤,Zuul 提供了一个框架可以支持动态加载,编译,运行这些过滤器,这些过滤器是使用责任链方式顺序对请求或者响应结果进行处理的,这些过滤器直接不会直接进行通信,但是通过责任链传递的RequestContext参数可以共享一些东西。

虽然Zuul 支持任何可以在jvm上跑的语言,但是目前zuul的过滤器只能使用Groovy脚本来编写。编写好的过滤器脚本一般放在zuul服务器的固定目录,zuul服务器会开启一个线程定时去轮询被修改或者新增的过滤器,然后动态进行编译,加载到内存,然后等后续有请求进来,新增或者修改后的过滤器就会生效了。

在zuul中过滤器分为四种:

如下图为zuul1.0的工作原理:

如上图,当zuul接受到请求后,首先会由前置过滤器进行处理,然后在由路由过滤器具体把请求转发到后端应用,然后在执行后置过滤器把执行结果写会到请求方,当上面任何一个类型过滤器执行出错时候执行该过滤器。

本节作者使用zuul的版本:

...

....

总结:zuul1.0时候当zuul接受到一个请求后会同步执行前置过滤器、路由过滤器、后置过滤器,等执行完毕后在同步把结果返回为调用方,调用方在整个过程中是阻塞的。其实SpringBoot集成的zuul就是自己实现了个前置过滤器做选择路由,然后自己实现了个路由过滤器根据前置过滤器选择的路由具体做路由转发。

Netty作为高性能异步网络通讯框架,在dubbo,rocketmq,sofa等知名开源框架中都有使用,如下图zuul2.0使用netty server作为网关监听服务器监听客户端发来的请求,然后把请求转发到前置过滤器(inbound filters)进行处理,处理完毕后在把请求使用netty client代理到具体的后端服务器进行处理,处理完毕后在把结果交给后者过滤器(outbound filters)进行处理,然后把处理结果通过nettyServer写回客户端。

...
总: 在zuul1.0时候客户端发起的请求后需要同步等待zuul网关返回,zuul网关这边对每个请求会分派一个线程来进行处理,这会导致并发请求数量有限。而zuul2.0使用netty作为异步通讯,可以大大加大并发请求量。

关于微服务网关租户和微服务 租户的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。 微服务网关租户的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于微服务 租户、微服务网关租户的信息别忘了在本站进行查找喔。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:三剑客接口测试工具(三剑客接口测试工具在哪)
下一篇:Spring中循环依赖的解决方法详析
相关文章

 发表评论

暂时没有评论,来抢沙发吧~