您当前的位置:首页 > 新闻 > 科技

传统REST API构建缺点太多?那用Spring Web Flux试试,内附案例

时间:2020-07-30 09:45:40  来源:  作者:

此次文章介绍如何用Spring WebFlux来构建响应式REST API,在了解这个之前,必须先对系统的开发、传统REST的常见问题和API的普遍需求有一定的了解基础,我在网上找到了关于介绍传统应用和现代应用特点的分类图:

传统REST API构建缺点太多?那用Spring Web Flux试试,内附案例

 

从图中可以看出,现代应用更偏向于分布式应用、云原生、高可用性和可扩展性,所以这就在系统有效资源利用上需要特别关注。

传统REST API请求处理的工作原理图:

传统REST API构建缺点太多?那用Spring Web Flux试试,内附案例

 

从上面的工作原理可以分析得到:

  1. 无背压支持。传统的REST API是很难支持从客户端或服务器位置施加背压的,所以通常会造成负载过大的问题影响运行。这就意味着它不能支持短时间的大量请求,容易造成服务器崩溃,进而无法访问。
  2. 阻塞和同步。一般情况下,请求的线路释放会在I/O阻塞结束后,最后将响应返回给调用方。
  3. 单个请求的线程数。web容器会用到基于请求的线程模型,这个模型是存在影响API性能的,因为该模型会限制发请求的数量,让其成为一种“排队”的效果。
  4. 限制高并发用户的处理。正是因为上段提到的模型限制, 所以对于高并发量时无法处理。
  5. 对系统资源的浪费。I/O会造成线路阻塞,这就会让web容器没办法再处理更多的需求,对于系统资源的处理处于浪费阶段。
传统REST API构建缺点太多?那用Spring Web Flux试试,内附案例

 

为什么响应式的优势可以解决上述问题:

  1. 异步无阻塞。响应式编程极大的为写异步和无阻塞应用程序提升了灵活性。
  2. 事件、消息驱动。系统可以对应活动产生相呼应的事件或者消息。打个比方,来自数据库的就会被看作事件流。
  3. 支持背压。通过背压,我们可以避免拒绝服务的出现,因为它可以很方便的处理掉一个系统到另一个系统的压力。
  4. 应用响应的时间可以预测。由于线程属于异步非阻塞,所以对于负载下应用的响应时间可以做到比较详细的预测。
  5. 系统资源利用率高。它可以支持更多的用户请求,因为其线路异步且非阻塞,因此各种线程不会被I/O所占用,其系统资源利用率就更高。
  6. 基于负载的扩容方式。
  7. 脱离基于请求的线程。借助于异步线程,基于请求的线程模型限制就可以得到脱离,因为模型会和服务器同时创建事件,并通过请求线程,处理其他请求。

了解了具体的优势,那么到底响应式编程流程是怎么样的?我在网上找到的图片解释的非常详细,如果应用数据调用了数据源获取数据的操作,就回立刻有一个线程返回,这是让自来该数据源的数据作为数据流出现。当数据流完成的时候,就是onComplete事件触发的时候。

传统REST API构建缺点太多?那用Spring Web Flux试试,内附案例

 

当过程中出现了异常情况,则会出发onError事见。

传统REST API构建缺点太多?那用Spring Web Flux试试,内附案例

 

有一些特殊的例子,比如删除一个来自数据库中的内容时,oncomplete/onError事件就会立即被触发,因为它本身没有数据可以返回来,所以调用onNext事件并不现实。

传统REST API构建缺点太多?那用Spring Web Flux试试,内附案例

 

对上面部分了解之后,我们可以接着对背压进行了解并考虑如何将其应用到响应流。举个例子,假如说我们的客户端在向另一个服务请求数据,假设这个服务发布的速率可以达到1000TPS,但是客户端处理该应用的事件却很低。正是为了应对这种情况的产生,客户端需要利用缓冲来处理,也正因为如此,在缓冲过程中对于内存的占用会更大。这就造成了级联效应,造成其他应用程序出问题,为了避免此类情况,可以调用服务在末尾缓冲,然后让用客户端应用去推送事件,这就是背压。

之前看过的一篇关于响应流的文章写的很好,我此次简单介绍一下。先从发布者和订阅者开始说明:

发布者:拥有无限数量顺序元素的提供者称之为发布者,它可以根据订阅者要求发布。

订阅者:无限数量顺序元素相对应的使用者。

订阅:订阅者向发布者订阅的某个一对一的周期。

处理器:订阅者和发布者之间根据约定进行的处理阶段。

明确了上述的定义后,在说回响应规范流,比如常见的Project Reactor是其中的一种,它的优点在于可以实现无阻塞、高效的请求管理,也可以提供响应式可组合的API。这可组合的API广泛实现了响应式的拓展,而且提供了非阻塞的背压式网络引擎、TCP和UDP给HTTP,这对架构微服务是非常有效果的。

由于Reactor实施时大多数时候都需要涉及Spring 5.x,根据这个可以尝试通过Spring servlet栈的命令式编程来构架REST API。

在这里举例一个响应式REST API应用,在应用中使用到了带有WebFlux的Spring Boot、具有响应式支持的Spring数据和Cassandra数据库。

传统REST API构建缺点太多?那用Spring Web Flux试试,内附案例

 

在构建响应式API的时候,我们可以不使用RestController,改为使用功能性样式编程模型来构建API,当然,你需要拥有router和handler组件。到这个地步,对公布响应式REST API已经了解了不少。



Tags:REST API   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
此次文章介绍如何用Spring WebFlux来构建响应式REST API,在了解这个之前,必须先对系统的开发、传统REST的常见问题和API的普遍需求有一定的了解基础,我在网上找到了关于介绍传...【详细内容】
2020-07-30  Tags: REST API  点击:(87)  评论:(0)  加入收藏
近日,Github公布了一项无服务器计算调查,有近600位Github用户参与了这项调查。结果显示,AWS是最受关注的无服务器选择,部署REST API是无服务器计算最普遍的用例。 通过无服务器...【详细内容】
2020-07-20  Tags: REST API  点击:(109)  评论:(0)  加入收藏
REST 是一种现代架构风格,它定义了一种设计 Web 服务的新方法。和之前的 HTTP 以及 SOA 不同,它不是一个协议(即:一套严格的规则),而是一些关于 Web 服务应该如何相互通信的一些建...【详细内容】
2020-02-01  Tags: REST API  点击:(40)  评论:(0)  加入收藏
REST 是一种现代架构风格,它定义了一种设计 Web 服务的新方法。和之前的 HTTP 以及 SOA 不同,它不是一个协议(即:一套严格的规则),而是一些关于 Web 服务应该如何相互通信的一些建议和最佳实践。按照 REST 最佳实践开发的服...【详细内容】
2020-01-02  Tags: REST API  点击:(59)  评论:(0)  加入收藏
当涉及到REST API时,JSON(JavaScript对象表示法)已经成为数据交换的格式。很久以前,开发人员放弃了XML,转而支持JSON,因为JSON紧凑,无模式,易于阅读且易于在线传输。JSON的无模式性...【详细内容】
2019-12-16  Tags: REST API  点击:(87)  评论:(0)  加入收藏
学习一门新语言并不容易,但是如果有具体的例子和手把手指导教程,就很容易上手了。因此,我决定编写一系列分步指导教程。...【详细内容】
2019-12-10  Tags: REST API  点击:(57)  评论:(0)  加入收藏
▌简易百科推荐
就在今天,腾讯方面宣布将在2022年1月31日下架企业QQ和营销QQ,其实这一消息的降临并不让笔者意外,因为早在今年的10月28日20点之后,企业QQ和营销QQ就被停止了续费服务。相信很多...【详细内容】
2021-12-27  科技探险家    Tags:企业QQ   点击:(4)  评论:(0)  加入收藏
日前,上海交通大学发布《全球电竞之都评价报告》,对全球15个致力于发展电竞之都的城市进行评价,上海作为中国城市电竞发展的排头兵,其拥有众多优质电竞企业及完整产业集群,因此排...【详细内容】
2021-12-27  经济日报    Tags:电竞   点击:(2)  评论:(0)  加入收藏
为优化网络氛围环境,微博又开始整顿用户信息了。本月月初,微博官方发布公告,要求昵称中带有如“二货”“SB”“瘪三”“娘炮”等明显低俗或侮辱性词汇的用户尽快修改,否则将面临...【详细内容】
2021-12-24  运了个营    Tags:微博   点击:(10)  评论:(0)  加入收藏
昨日谷歌宣布,自2022年12月19日开始停止对OnHub的软件支持,OnHub路由器仍将提供Wi-Fi信号,但用户无法用谷歌Home应用程序管理它。无法更新Wi-Fi网络设置、添加额外的Wifi设备或...【详细内容】
2021-12-22  雷峰网    Tags:Google OnHub   点击:(5)  评论:(0)  加入收藏
IT之家 12 月 20 日消息,百度网盘青春版 iOS 客户端今日晚间率先开启内测,安卓客户端将在稍后内测。使用苹果 iPhone 的IT之家小伙伴可以点此下载内测版,需要先下载 TestFlight...【详细内容】
2021-12-21  IT之家    Tags:百度网盘   点击:(9)  评论:(0)  加入收藏
对于拼车单,是接还是不接,不少网约车司机表示很矛盾。接吧,钱少事多,常常跑了个寂寞,不接吧,车多客少,挑三拣四没饭吃。 在平台大力推广拼车单之下,不少司机迫于生活压力,最终还是打...【详细内容】
2021-12-17  网约车情报分享    Tags:滴滴   点击:(7)  评论:(0)  加入收藏
蓝鲸TMT频道12月16日讯,据饿了么官方微信公众号,近日,在圆桌会上,蓝骑士与平台交流了配送安全问题。饿了么表示,线上将技术手段融入安全防护;线下将持续进行安全培训,并试点智能头...【详细内容】
2021-12-17    金融界  Tags:饿了么   点击:(23)  评论:(0)  加入收藏
开源最前线(ID:OpenSourceTop) 猿妹编译项目地址: https://github.com/restic/restic全球知名代码托管平台 GitHub 今天就重磅发布了今年的年度报告——《2021 年度 O...【详细内容】
2021-12-17  Python部落    Tags:   点击:(9)  评论:(0)  加入收藏
新京报快讯 据中国网络视听节目服务协会网站消息,12月15日,中国网络视听节目服务协会发布了《网络短视频内容审核标准细则》(2021)。中国网络视听节目服务协会组织有关短视频平...【详细内容】
2021-12-16    新京报  Tags:短视频   点击:(11)  评论:(0)  加入收藏
今年以来,国家网信办针对一些粉丝量大、关注度高的网站平台“头部账号”法纪意识淡薄,滥用网上影响力,传播错误导向内容,污染网络生态等突出问题,会同相关部门,指导各地网信办,要求...【详细内容】
2021-12-16    网信中国微信公众号  Tags:网信办   点击:(8)  评论:(0)  加入收藏
相关文章
    无相关信息
最新更新
栏目热门
栏目头条