深度win10- 绿色安全免费的win10系统下载站

今日更新 | 一键重装系统

当前位置: > 系统教程

qq空间刷访客-空间刷访客平台免费

认证系统 时间:2023-04-16 人气: 147

自助下单地址(拼多多砍价,ks/qq/dy赞等业务):点我进入

满足基本要求的业务网关

Spring Cloud Gateway 是 Spring Cloud 生态系统中的一个 API 网关,基于 Spring Boot 和 Spring WebFlux 框架构建,提供了一个基于路由的、非阻塞式的 API 网关解决方案。

下面是 Spring Cloud Gateway 网关的优劣势分析:

优势非阻塞式异步编程模型:Spring Cloud Gateway 是基于 Spring WebFlux 框架构建的,使用了 Reactive Stream 的异步编程模型,能够提供更高的并发能力和更低的延迟。基于路由的请求处理:Spring Cloud Gateway 的核心功能是基于路由的请求处理miui10 内存优化级别,能够将不同的请求路由到不同的后端服务上,并提供丰富的路由配置选项。高度可扩展:Spring Cloud Gateway 提供了丰富的扩展点和插件机制,可以自定义路由、请求转发、限流等功能。集成 Spring Cloud 生态系统:Spring Cloud Gateway 能够无缝集成 Spring Cloud 的各种组件,如 Eureka、Ribbon、Hystrix、Zipkin 等,提供全面的服务治理和监控能力。劣势学习成本高:Spring Cloud Gateway 采用了基于函数式编程的 Reactive Stream 异步编程模型,需要对相关概念、框架和 API 有一定的理解和掌握才能使用和定制。性能瓶颈:Spring Cloud Gateway 的性能瓶颈主要集中在 CPU 和内存上,处理高并发请求时需要保证机器资源充足。无法完全替代传统 API 网关:Spring Cloud Gateway 虽然提供了基于路由的请求处理能力,但无法完全替代传统的 API 网关,如 Nginx 和 Kong 等,因为一些传统 API 网关的功能,如高级的负载均衡、缓存和安全性等,还未完全支持。

综上所述,Spring Cloud Gateway 是一款强大的 API 网关解决方案,能够提供高并发、低延迟、可扩展、易集成的优势,但需要承担一定的学习成本,并面临一些性能和功能上的限制。

业务量达到一定量级后性能不足

上面已经提到,Spring Cloud Gateway 无法替代传统网关,其原因也是因为是JVM。

JVM优劣势优势跨平台性

JVM 提供了一种统一的、跨平台的执行环境,使得基于 JVM 的编程语言具有跨平台性。只要有支持 JVM 的平台,就可以运行基于 JVM 的应用程序,不需要针对不同的平台进行编译和部署。

垃圾回收

nubia z7 miui_志鸿优化系列丛书·高中同步测控优化训练_miui10 内存优化级别

JVM 提供了自动的垃圾回收机制,可以自动管理内存,避免了程序员手动管理内存所带来的诸多问题,如内存泄漏和野指针等。

高效的即时编译

JVM 采用即时编译技术,可以将 Java 代码在运行时动态编译成本地机器码,从而提高了程序的执行效率。

劣势启动时间较长

基于 JVM 的应用程序启动时间相比于一些其他的编程语言,如 Go、Node.js 等,要长一些,因为需要先启动 JVM,再加载应用程序和类库。

内存占用较大

JVM 的内存占用较大miui10 内存优化级别,因为 JVM 需要加载和管理大量的类和对象,并且需要维护一些额外的信息,如堆栈和异常信息等。

并发性能问题

志鸿优化系列丛书·高中同步测控优化训练_nubia z7 miui_miui10 内存优化级别

在高并发场景下,JVM 存在一些并发性能问题,如锁竞争、线程上下文切换等。虽然 Java 语言提供了一些并发编程技术,如锁、原子操作等,但使用不当容易引发性能问题。

由于需要较多的内存以及启动时间较长等问题,被很多程序员所吐槽。换句话说同等级的应用,JVM可能需要更多的资源。但是我相信 Java 会越来越强大,会将这些劣势慢慢优化掉。

Spring Cloud Gateway 路由原理

之所以上面简单说了一下JVM的优劣势,是因为JAVA做网关或者中间件,确实需要高的CPU和内存资源。下面我简单减少一下Spring Cloud Gateway路由的原理,相信等我介绍完之后,大家就会发现其路由的性能瓶颈在哪了。

让我们打开编译器,找到RoutePredicateHandlerMapping#getHandlerInternal 这个方法的源码。我已经将源码摘出来了。

志鸿优化系列丛书·高中同步测控优化训练_nubia z7 miui_miui10 内存优化级别

route1.png

志鸿优化系列丛书·高中同步测控优化训练_nubia z7 miui_miui10 内存优化级别

miui10 内存优化级别_nubia z7 miui_志鸿优化系列丛书·高中同步测控优化训练

route2.png

从上面查找路由的方法中,我们就可以发现其性能瓶颈在逐条遍历上,如果当前有几千个API,可能看不出性能差距,当有上万条API时,该方法的性能可能会大幅度降低。抛去遍历的时间复杂度 O(n) ,同时还要去每个路由内去做条件过滤,才能找到符合条件的路由返回,进行下一步操作。这样即使我们有更高的内存以及性能更好的CPU也没办法发挥出其硬件的实力。因为从根本上,Spring Cloud Gateway的路由策略就限制了瓶颈。

Spring Cloud Gateway 路由优化思路

我们知道了其性能瓶颈所在,下一步就是如何去优化。 由于之前研究了很多的网关,比如Kong,Zuul,APISIX, 发现APISIX所使用的的路由算法非常的高效且稳定。他所使用的的算法就是我上一篇提到的基数树。如果感兴趣可以去复习一下。我们也可以模仿APISIX,将Path的路由提取出来以基数树的数据结构保存,保存其他前置路由过滤方法。大致的流程图如下:

nubia z7 miui_志鸿优化系列丛书·高中同步测控优化训练_miui10 内存优化级别

diagram-flow.jpg

这样我们不仅可以更搞笑的利用内存(基数树需要更多的内存去存储节点) ,并且提高了查询的时间复杂度,由O(n)变为 O(m),其中m是键的长度。这样查找的效率不会随着API的增多更降低。从而提高路由效率。

优化路由后性能对比

nubia z7 miui_志鸿优化系列丛书·高中同步测控优化训练_miui10 内存优化级别

在这里我使用了Jmeter工具在本地电脑上进行了简单的3分钟压测。 我本地电脑的配置是

CPURAM

i3-10100F( 3.6GHz) 4核8线程

64G

直接压测原应用

志鸿优化系列丛书·高中同步测控优化训练_nubia z7 miui_miui10 内存优化级别

test1.png

压测原生Spring Cloud Gateway

nubia z7 miui_志鸿优化系列丛书·高中同步测控优化训练_miui10 内存优化级别

志鸿优化系列丛书·高中同步测控优化训练_nubia z7 miui_miui10 内存优化级别

test2.png

志鸿优化系列丛书·高中同步测控优化训练_nubia z7 miui_miui10 内存优化级别

jvm1.png

压测优化后的Spring Cloud Gateway

志鸿优化系列丛书·高中同步测控优化训练_nubia z7 miui_miui10 内存优化级别

test3.png

志鸿优化系列丛书·高中同步测控优化训练_nubia z7 miui_miui10 内存优化级别

jvm2.png

小结

由此可见,当使用基数树做URL Path的路由查找的数据结构的时候,成倍的提高了Spring Cloud Gateway 的吞吐量。并且我们通过Jconsole 观察其运行状态后,后者更无论是垃圾回收和CPU的使用率都是更优。 后续我会详细讲解优化细节。


更多精彩:虐杀原形2www.xitongtiandi.net

win7系统

win10系统

网友热搜

站长推荐

电脑软件

关于本站 | 下载声明 | 广告合作 | 网站地图 | RSS

Copyright 2019-2020 sdwin10.com 深度win10 版权所有 浙ICP备20007169号-11

声明: 本站非windows官方网站 所有软件和文章来自互联网 如有异议 请与本站联系