当前位置: 首页 > 科技观察

微服务平台网关架构及应用

时间:2023-03-15 18:18:30 科技观察

前言:API网关的出现,是微服务架构的出现。不同的微服务一般有不同的网络地址,外部客户端可能需要调用多个服务接口来完成一个业务需求,如果客户端直接和各个微服务通信,会存在以下问题:1.客户端会多次请求不同的微服务次,这增加了客户端的复杂性。2、存在跨域请求,在某些场景下处理相对复杂。3、鉴权复杂,每个服务都需要独立鉴权。4.重构困难。随着项目迭代,可能需要重新划分微服务。例如,可以将多个服务合并为一个或将一个服务拆分为多个。如果客户端直接与微服务通信,重构将难以实施。5、部分微服务可能使用了对防火墙/浏览器不友好的协议,直接访问会很困难。以上问题都可以借助API网关来解决。API网关是客户端和服务端之间的中间层,所有外部请求都会先经过API网关层。换句话说,网关的作用是作为一个API框架来保护、增强和控制对API服务的访问。内容:1.API网关的定义2.为什么选择网关3.部分Predicate的实现4.朴元EOS8的网关架构5.朴元EOS8的网关应用6.未来展望1.API网关的定义网关的作用是作为API架构来保护、增强和控制对API服务的访问。API网关是应用或服务之前的一个系统(提供RESTAPI接口服务),用于管理授权、访问控制和流量限制等,使RESTAPI接口服务受到API网关的保护和对所有来电者透明。因此,隐藏在API网关后面的业务系统可以专注于创建和管理服务,而不是处理这些战略基础设施。网关Request接入的作用:作为所有API接口服务请求的接入点。业务聚合:作为所有后端业务服务的聚合点。中介策略:实现安全、认证、路由、过滤等策略。统一管理:统一管理所有API服务和策略。主要功能主要功能大致分为稳定性和安全性,在两个方面提供更好的服务:稳定性和安全性:全局流控日志统计,防止SQL注入,防止Web攻击屏蔽工具扫描黑白IP列表证书/加密处理提供更好的服务:服务级流控服务降级与熔断路由与负载均衡、灰度策略服务过滤、聚合发现权限验证与用户级策略业务规则与参数验证多级缓存策略2、为什么选择GatewaySpring云网关可以看作是一个Zuul1.x的升级换代,比Zuul2更早的使用Netty实现异步IO,从而实现了一个比Zuul1.x更高效且与SpringCloud紧密配合的简单API网关。SpringCloudGateway明确区分了Router和Filter,一个很大的特点是它内置了很多开箱即用的功能,并且都可以通过SpringBoot配置或者手动编码链调用来使用。例如内置了10个路由器,这样我们就可以直接配置它们根据Header、Path、Host或Query进行路由。比如区分通用Filter和全局Filter,内置20种Filter和9种全局Filter,也可以直接使用。当然自定义Filter也很方便。几个重要的概念:路由:网关的基本构建块。它包括一个ID、一个目标URL、一组断言和一组过滤器。如果谓词的计算结果为真,则路由匹配。断言:这是Java8的新特性,输入类型是Spring框架的ServerWebExchange。它可以匹配HTTP请求中的任何内容,例如请求标头或参数。Filter:是Spring框架的GatewayFilter,请求和响应都可以通过Filter进行修改。3、Predicate的部分实现Predicate来自Java8,是Java8中引入的一个函数,Predicate接受一个输入参数,返回一个布尔结果。该接口包含各种默认方法,用于将Predicates组合成其他复杂逻辑(例如:AND、OR、NOT)。可用于接口请求参数校验,判断新旧数据是否有变化需要更新。在SpringCloudGateway中,Spring利用Predicate的特性实现了各种路由匹配规则,以Header、请求参数等不同条件作为条件匹配到对应的路由。下面举几个匹配转发的例子:1.时间匹配Predicate支持设置时间。请求转发时,可以判断是在这个时间之前还是之后转发。比如我们现在设置只在2020年1月1日转发到我的网站,如果在那之前没有转发,我可以这样配置:Spring使用ZonedDateTime来比较时间,ZonedDateTime是中的日期Java8中的时间函数,用来表示带时区的日期时间信息的类。ZonedDateTime支持通过时区设置时间。中国的时区是:亚洲/上海。AfterRoutePredicate表示这个时间之后的请求被转发到目标地址。上面的例子表示所有请求时间在2020年1月1日6点以后的请求都转发到地址http://www.primeton.com。+08:00表示距UTC时间八小时,时区为Asia/Shanghai。添加路由规则后,访问地址http://gatewayIP:PORT会自动转发到http://www.primeton.com。BeforeRoutePredicate正好相反,转发某个时间之前的所有请求。我们把上面路由规则中的After改为Before,如下:表示在这个时间之前可以进行路由,在这个时间之后停止路由。修改后重启项目,再次访问地址http://gatewayIP:PORT,页面会404addressnotfound。Gateway也支持在某个时间段内限制路由请求,可以使用BetweenRoutePredicate来实现:2.通过Cookie匹配CookieRoutePredicate可以接收两个参数,一个是Cookie名称,一个是正则表达式,路由规则会通过获取对应的cookie名称值来匹配正则表达式,匹配则执行路由,不匹配则不执行。使用curl测试,命令行输入:会返回页面代码,如果去掉--cookie"primeton=eos.primeton",后台会提示404错误HeaderRoutePredicate和CookieRoutePredicate一样,同样接收2个参数,一个header属性名和一个正则表达式,属性值和正则表达式匹配会被执行。使用curl测试,在命令行输入:,返回页面代码,证明匹配成功。将参数-H"X-Request-Id:88888"改为-H"X-Request-Id:zero",再次执行时返回404证明不匹配。3、通过Host匹配HostRoutePredicate,得到一组参数和匹配域名列表。这个模板是一个ant分隔的模板,并且.符号用作分隔符。它将参数中的主机地址作为匹配规则传递。使用curl测试,命令行输入:经测试,以上两台主机都可以匹配host_route路由,如果去掉host参数,会报404错误。四、朴元EOS8网关架构EOS8网关架构图1、在微服务治理平台中,一个系统会部署一组网关。系统内部应用前端访问后端,或者其他系统的应用需要访问本系统应用提供的接口,请求必须经过网关。2.网关为治理数据提供rest接口,治理平台通过该接口将治理数据发送给网关。3.网关可以部署多个对等实例来扩展其性能。4.网关收到治理数据后,通过统一存储接口存储到持久化存储中,然后通过存储的通知机制通知所有网关实例。5.为了提高性能,避免频繁从持久化存储中查询数据,在网关内部设计了一个基于内存的缓存。当网关启动时,它们将自动从持久存储中加载治理数据。6、网关缓存还支持通过懒加载的方式按需加载需要的治理数据。7.每次过滤后,LBPredicate会决定请求发送给哪些应用实例,LBPredicate会根据请求头中携带的应用实例组码过滤应用实例。8、EOS8的网关将不再与Coframe共用一个持久化存储,而是使用应用自己的存储,大大降低了访问成本。9、鉴权业务的插件化改造,只需要实现网关提供的鉴权接口即可快速完成鉴权鉴权,用户也可以逐步实现按需扩展的需求。EOS8网关设计要点1.EOS8网关将不再与Coframe共享一个持久化存储,而是使用应用自身的存储,大大降低了访问成本。2、认证业务的插件化改造,只需要实现网关提供的认证接口即可快速完成认证授权,用户也可以逐步实现按需扩展的需求。实现细节1.创建插件项目项目名格式建议以gateway-plugin-开头,如gateway-plugin-handle-eos8为了统一第三方jar包依赖,防止版本冲突,项目父pom必须是网关的pom2。实现gateway-core中UserService接口参数说明:3.插件构建部署在插件的pom中,需要添加构建相关的配置gateway。部署介质结构如下:EOS_Microservices_API_Gateway/├──bin│├──shutdown.sh│└──startup.sh├──config│├──application.yml│└──logback-spring.xml├───gateway-boot-5.0.0-GA-SNAPSHOT.jar├──lib│└──plugins│└──gateway-plugin-handle-eos8-8.1.0-LA-SNAPSHOT.jar└──logs├──eos-dap-gateway│└──eos-dap-gateway.pid├──eos-dap-gateway.out├──gateway.log└──gateway-trace.log插件打成jar包后,需要复制到lib/plugins目录下,然后重启网关。5.普源EOS8网关应用为了方便用户更好的了解和使用我们的EOS8网关,在EOS8的Governor平台上提供了一套完整的可视化操作。主要分为网关详情、白名单配置、API发布与授权(跨系统访问)、路由、日志、统计查询、Top查询等功能1.白名单配置网关上线后,如果开启token合法性校验,根据自己的业务需要一个可以配置发布的白名单(如果配置了路由转发,白名单的请求接口也需要添加相应的url前缀)2.API发布和授权同网关调用系统,只需要请求头X-EOS-SourceSysKey与当前系统凭证一致,不需要API发布和授权。当本系统中的接口需要被其他系统调用时,需要使用API??发布和API授权功能。Governor会自动读取获取系统中所有对外的EOS服务接口,点击Published,进入API授权功能,添加指定订阅者,对新发布的接口进行授权,完成API授权功能。在调用方创建一个实体类,实现SDKApiSubscriberProvider接口。3、路由配置在路由配置界面,我们提供了可视化的路由配置功能,提供了三种不同的路由模板,方便用户快速完成路由配置。4、运行日志查询网关后,可以在日志页面查询所有系统日志。5.统计查询所有经过网关的请求都会被记录下来,并产生统计数据,方便日后定位分析。6、TOP查询我们还会对请求数、平均响应时间、错误数、错误率进行TOP查询,方便用户准确定位,及时跟踪。六、未来展望1、通过我们的规则制定,在插件中可以为网关添加各种RoutePredicateFactory、GatewayFilterFactory、Filter、Predicate等,扩展网关在路由匹配、请求过滤、负载均衡等方面的能力等,并支持各种A个性化改造。2、在Governor的网关管理界面,提供了一套完整的网关插件管理功能。3、同时可以实现高效的插件热部署。以上就是小编为大家带来的EOS服务网关架构介绍。希望对您有所帮助。如有不足之处,请多多指教,谢谢。