首页 > 其他分享 >httpclient&WebClient--4次迭代,让我的 Client 优化 100倍!

httpclient&WebClient--4次迭代,让我的 Client 优化 100倍!

时间:2024-08-08 19:27:50浏览次数:18  
标签:迭代 -- Client 线程 CompletableFuture 100 WebClient

4次迭代,让我的 Client 优化 100倍!

https://www.cnblogs.com/crazymakercircle/p/17136216.html

 

在大家的生产项目中,经常需要通过Client组件(HttpClient/OkHttp/JDK Connection)调用第三方接口。

在一个高并发的中台生产项目中。有一个比较特殊的请求,一次请求,包含 10个 Web 外部服务调用,每个服务调用的预定时间200ms。

为了并行,使用了一个很大的线程池,最大100个线程。

 

第1轮迭代,是通过CompletableFuture进行代码的优化。

这个环节,对性能没有本质的提升,但是CompletableFuture 这种 函数式编程的风格,为后面的迭代打下来一些技术基础。

使用CompletableFuture 并发10个远程api 接口,有两个方法

  • 方法1:CompletableFuture 和 CountDownLatch
  • 方法2:CompletableFuture.allOf 算子

第2次迭代:响应式 Flux 流进行异步回调改造。

什么分析一下,发现一个秘密:执行一次WEB调用操作所需的实际工作非常少。实际的工作就2点:

  • 生成并触发一个请求
  • 等等一段时间,会收到一个响应。

而且,其中有一个节非常低性能,这个环节是:在请求和响应之间,线程根本没有做任何工作,而且在等待,等待200ms。

线程资源是宝贵的。咱们一个java应用不能开始太多的线程,一般最多就400个左右。如果开启太多,很多的cpu资源就用去做线程上下文切换了。

如何要让这些线程不等待,去干别的工作,该当如何?这是使用异步框架。使用异步框架发出 Web 请求的核心优势之一,在请求进行中时您不会占用任何线程。

 

第3次迭代:响应式 parallel Flux 流进行并行异步回调改造

 

第4次迭代:响应式 WebClient 组件去掉底层的io线程阻塞

httpclient底层的io线程是阻塞式的

Netty这样的reactor反应器线程模型,底层的io线程是非阻塞式的

如果底层的io传输,也需要使用反应器线程,怎么办? 3个措施:

  • 那么要么使用netty,
  • 要么使用基于netty的http组件。
  • 或者基于netty自己进行封组

这里,使用了响应式的http组件,WebClient组件。使用 WebClient 进行了第四次迭代。

 

标签:迭代,--,Client,线程,CompletableFuture,100,WebClient
From: https://www.cnblogs.com/clarino/p/18349577

相关文章

  • 1392、STM32单片机温湿度检测阈值报警4个继电器加4个负载风扇等无线蓝牙远程(程序+原
    毕设帮助、开题指导、技术解答(有偿)见文未 目录方案选择单片机的选择显示器选择方案一、设计功能二、实物图三、原理图四、程序源码五、PCB图资料包括:需要完整的资料可以点击下面的名片加下我,找我要资源压缩包的百度网盘下载地址及提取码。方案选择单片机的选......
  • 暑假集训CSP提高模拟16
    \(\color{skyblue}9-nine-\)专场(小阳历最水的一回。日常RE挂分。我这是不是风水不好?(逃)9-nine-九次九日九重色赛时以为是连续的...大样例模了半天没模懂...按连续的思路打了个二分上去...还骗了30pts?(官方题解按照官方题解写的Code,但WA#1,不知道哪错了...intn,a[N],b[N......
  • MySQL——数据库的设计、事务、视图
    文章目录数据库的设计1.多表之间的关系2.实现关系3.数据库设计的范式事务1.事务的基本介绍2.事务的四大特征ACID3.事务的隔离级别(了解即可)视图1.什么是视图?2.视图创建及使用方法3.注意事项4.为什么使用视图数据库的设计1.多表之间的关系一对一(了解)如:人和身份证......
  • 分布式项目 使用技术点拆解
    分布式项目使用技术点拆解一.项目主要内容:分库分表,读写分离分布式事务全局唯一性ID分布式session分布式链路跟踪日志收集与展示商品搜素分布式锁服务降级/限流/熔断/隔离页面静态化分布式任务调度数据迁移方案数据同步方案多级缓存,缓存预热高并发秒杀实现二.需......
  • basic_pentesting_2靶机
    主机发现端口目录扫描可能有弱口令九头蛇爆破,armandohydra-ljan-P/home/kali/Desktop/password1.txt192.168.42.189ssh查看用户家目录下,在kay目录下发现pass.pak和ssh公私钥文件,没有权限查看pass.pak在kay/.ssh下发现公私钥文件将私钥rsa文件内......
  • DzzOffice 网盘插件的文件属性中显示文件位置、直链地址
    文件:dzz\explorer\template\ajax.htm在代码<!--{if$propertys[fdateline]}--><divclass="file-natureclearfix"><labelclass="col-md-4col-sm-4col-xs-4">{langcreate_time}</label><divclass=&......
  • DzzOffice系统与插件更新日志
    2024/07/23PDFTron1.支持将编辑后的PDF文件保存到Dzz中:实现了编辑与存储的无缝对接,简化了文件处理流程,减少了用户的操作步骤,提高了工作效率。2.对接Dzz的文件权限管理:用户在保存PDF文件时,可以自动应用DzzOffice中设置的文件权限规则。这意味着文件的查看、编辑、下载等权......
  • DzzOffice 新闻插件查看页面添加水印
    文件:\dzz\news\template\news_view.htm这里以显示用户名水印为示例<scripttype="text/javascript">//需要用到的地方调用就好watermark({watermark_txt:'$_G[username]'})functionwatermark(settings){//默认设置vardefaultSettings={......
  • spring操作数据库
    xml版程序结构配置文件dbUtil-阿帕奇提供操作数据库的插件核心类:QueryRunner.query()查询.update()增删改<dependencies><!--spring--><dependency><groupId>org.springframework</groupId><artifactId>spri......
  • C# 设计模式之模板方法模式
    总目录前言在日常的工作中,有时候我们做PPT,做合同,做简历,如果我们自己从头去写这些文档,不免有些太过耗时耗力;大多时候都是去找相关的PPT模板,合同模板,简历模板,拿过来直接用。为什么可以使用模板,因此这些资料大部分的信息和信息框架都是一致的,我们只需要将自己差异化的内容填......