首页 » 网站推广 » 问道PHP网关源码技巧_Spring Cloud 网关

问道PHP网关源码技巧_Spring Cloud 网关

duote123 2024-11-03 0

扫一扫用手机浏览

文章目录 [+]

看了看韶光,等公交车还有一下子,顺便就和小齐互换一下,便问道:“你在学习Spring Cloud网关吗?”

小齐听到声音后转过身来,便看到老张拉了一把椅子坐下。
恰好自己有一些迷惑的地方,也想找人互换学习一下。

问道PHP网关源码技巧_Spring Cloud  网关

“是啊,我最近不是在学习微做事这部分知识吗,现在学到网关这部分了。
实在我不是特殊明白,为什么我们的微做事须要网关呢?”

问道PHP网关源码技巧_Spring Cloud  网关
(图片来自网络侵删)
什么是网关

老张神秘一笑,说道:“我给你看两张图你就明白了。
”然后在小齐的电脑上搜出了这篇文章里面的两张图。

“我们假设你现在要做一个电商运用,前端是移动真个APP,后端是各种微做事。
那你可能某个页面须要调用多个做事的数据来展示。
如果没有网关,你的系统看起来便是这个样子的:”

“而如果加上了网关,你的系统就会变成这个样子:”

“嗯,这看起来是一个‘高内聚,低耦合’的思想,如果不该用网关,可能有什么坏处呢?”小齐问道。

“这个实在从刚刚的第一张图你就看得出来,如果没有网关,你的客户端就会变得非常麻烦。
对每一个微做事,可能都要做权限认证、负载均衡等事情;而且后真个微做事可能还利用了不同的通信协议;最主要的是,如果你想对微做事进行重构,比如拆分或者合并为做事器,那也必须得修正客户端,增加了繁芜性。

网关的技能选型

小齐:“那看来网关确实是至关主要,现在市情上有哪些微做事网关呢?”

“我们在实现网关的时候,须要考虑到的是它的性能和可扩展性。
对付现成的产品来说,NGINX Plus是一个很不错的选择,NGINX Plus 供应了一个成熟的、可扩展的、高性能 web 做事器和一个易于支配的、可配置可编程的反向代理。
NGINX Plus 可以管理身份验证、访问掌握、负载均衡要求、缓存相应,并供应运用程序可感知的康健检讨和监控。
除此之外,你还可以利用Node.js或者Netty根据自己的需求去自己写一个网关。
而且Spring Cloud也供应了一些已经写好的微做事网关框架,你知道有哪些吗?”

“我查了一下,彷佛Spring Cloud Gataway和Netflix的Zuul都挺不错的。
但Netflix的套件停息开拓了,以是我现在紧张在看Spring Cloud Gateway。

老张点点头,道:“是的,Netflix很多组件到停滞开拓了。
前两天我们谈论的Hystrix也是,但是Hystrix的替代产品还在孵化中。
但网关方面,Spring Cloud Gateway已经孵化完成了,可以用来替代Zuul。
那你知道Spring Cloud Gateway的事理吗?”

Spring Cloud Gateway

小齐把刚刚自己正在看的官方文档打开,然后给老张看了官网文档的这个图,一边说道:“Spring Cloud Gateway是基于Spring Boot 2.0, Spring WebFlux, Reactor项目构建的,底层是Netty。
它的流程实在和Zuul很相似,利用一系列的过滤器去处理要求,达到我们自己想要的定制化。

老张问:“那里刚刚看完了官方文档,可以跟我总结一下它有哪些功能吗?”

“Spring Cloud Gateway险些可以知足绝大多数网关的需求。
它紧张有下面一些功能:”

断言 Predicate

断言可以指定在什么情形下可以匹配某个路由。
断言是基于Java 8供应的Predicate接口。
Gateway(以下简称Spring Cloud Gateway为Gateway)供应了一些默认的断言。
你可以在官方文档查看详细有哪些断言以及它们的用法。

支持韶光、Cookie、Header、Host、HTTP Method、相对路径、URL查询语句、远程IP等来做断言。
比如:

spring: cloud: gateway: routes: - id: method_route uri: https://example.org predicates: - Method=GET

网关过滤器 GatewayFilter

Gateway也供应了一些已经写好的过滤器。
可以查看官方文档。
紧张有重写request或者response的header、parameter、body、session、安全、重写路径、重试以及对熔断的一些支持。

全局过滤器 Global Filters

全局过滤器与网关过滤器类似,只是默认会给所有的要求都添加上全局过滤器。
当然,也可以自己定义全局过滤器。
过滤器的顺序可以通过@Order表明来指定:

@Bean@Order(-1)public GlobalFilter a() { return (exchange, chain) -> { log.info("first pre filter"); return chain.filter(exchange).then(Mono.fromRunnable(() -> { log.info("third post filter"); })); };}​@Bean@Order(0)public GlobalFilter b() { return (exchange, chain) -> { log.info("second pre filter"); return chain.filter(exchange).then(Mono.fromRunnable(() -> { log.info("second post filter"); })); };}​@Bean@Order(1)public GlobalFilter c() { return (exchange, chain) -> { log.info("third pre filter"); return chain.filter(exchange).then(Mono.fromRunnable(() -> { log.info("first post filter"); })); };}其它功能

Gateway还供应了其它很多功能,比如说SSL方面的配置、基于netty的access log、跨域、actuator端点等等。
详细的用法可以参考官方文档。

尤其是actuator端点,它可以让我们利用HTTP要求去动态地获取、新增、删除路由。
详细的利用方法和参数查看官方文档。

定制化

除此以外,Gateway供应了一些接口和抽象类。
用户还可以自己定制化断言、Filter、路由等,实现更个性化的哀求。
参考文档在这里,但是目前文档还不完善,可以自己看看源码。

与注册中央合营

老张:“嗯,上面基本上把Spring Cloud Gateway的功能总结全了。
它还可以与Spring Cloud的注册中央无缝集成。

小齐接着老张的话,说道:“是的,Gateway可以很方便地与注册中央合营起来利用,默认利用Ribbon实现了负载均衡。
你只须要加入某个注册中央的依赖,比如consul-discovery,然后把配置打开就行了:”

spring.cloud.gateway.discovery.locator.enabled=true

“这样你就可以要求Gataway的/service-id/path来访问做事名叫service-id的某个微做事的/path路径了。
比如:”

http://gateway:8080/service-user/hello

->

http://service-user:8080/hello

也可以对某个微做事做个性化的配置,参考文档。

网关本身的负载均衡

说完后,小齐问道:“那所有微做事就只有一个网关,万一并发量上去了,网关承受不住怎么办?”

老张笑道:“正如你上面所说,Spring Cloud Gateway底层是Netty的,它本身就能承受比较大的并发。
如果还是承受不了并发量,那可以注册多个Gateway实例,然后在前面弄一个Nginx或者F5等负载均衡器。
大概图是这样:”

老张看了看韶光,差不多该去赶车了。
“本日就到这吧,下次再互换~”

关于作者

微信"大众年夜众号:编了个程

个人网站:https://yasinshaw.com

笔名Yasin,一个有深度,有态度,有温度的程序员。
事情之余分享编程技能和生活,如果喜好我的文章,可以顺手关注一下"大众号,也欢迎转发分享给你的朋友~

在"大众号回答“口试”或者“学习”可以领取相应的资源哦~

标签:

相关文章