精易论坛

标题: 易语言POST请求时速突破百万请求的优化建议讨论 [打印本页]

作者: 黑骑士ol    时间: 2022-5-21 16:21
标题: 易语言POST请求时速突破百万请求的优化建议讨论
  如题,本贴针对POST时速突破百万请求 吞吐量进行讨论和研究。这里选用了  度娘.com 的网站下某无加密接口测试,目的为突破每小时百万的吞吐量!!  那么影响速度的程序方面探索原因:1.多线程+代理架构  2.网站接口服务响应时间  3.冗余代码 4.I/O硬件影响的线程
  这里的多线程架构 采用鱼刺官方开源多线程 + api代理架构,网站接口服务相应时间在 156ms 冗余代码进行整理 如无必要的低代码,硬件方面采用了I7 英特尔 CPU,本身计算机环境是 4核16G、网页访问对象作为本次的httpAPI选型
   针对代理进行一次检测过滤了大于 2s的垃圾代理IP,网页访问对象设置 2s的超时,最后进行一次500W目标测试,发现时速仅仅在13W左右
   能想到的 软件 解决方案基本应该都想到了,硬件就不太懂了,如题向各位大佬发问,也欢迎各位进行技术讨论!


补充内容 (2022-5-21 16:24):
时速计算策略:完成数/[ (当前时间戳-开始时间戳) / 1000]*3600

补充内容 (2022-5-21 16:30):
测试线程数为:30
作者: 顶级娱乐·    时间: 2022-5-21 18:03
多线程+集群=200万时速都可以
作者: 你送的花开了    时间: 2022-5-21 18:09
比较好奇的一点是   在不使用超级列表框的情况下   文本导入至软件内怎么在多线程操作时批量分割并操作  尝试过这种实际发现这样操作结果还是单线程一样
作者: 黑骑士ol    时间: 2022-5-21 18:21
顶级娱乐· 发表于 2022-5-21 18:03
多线程+集群=200万时速都可以

我又换了一台24核的服务器 每小时60W 速度..
作者: 黑骑士ol    时间: 2022-5-21 18:26
第二轮测试:24核服务器 吞吐量每小时 60W...
作者: 顶级娱乐·    时间: 2022-5-21 19:31
你送的花开了 发表于 2022-5-21 18:09
比较好奇的一点是   在不使用超级列表框的情况下   文本导入至软件内怎么在多线程操作时批量分割并操作  尝 ...

取文本总行数÷分割数,分给各线程执行
举例 总行数100
我想开十个线程 我就设定分割数为10
100÷10=10 就得到每个分割数
然后分十条线程执行 第一条线程执行1-10第二条执行11-20以此类推  分割数递增通过判断和算法或累加都可实现

补充内容 (2022-5-21 19:33):
分割数不一定必须和开多少线程成正比  这只是举例 可以举一反三去理解
作者: 你送的花开了    时间: 2022-5-22 01:53
顶级娱乐· 发表于 2022-5-21 19:31
取文本总行数÷分割数,分给各线程执行
举例 总行数100
我想开十个线程 我就设定分割数为10

原来如此  谢谢解惑
作者: 黑骑士ol    时间: 2022-5-22 12:51
问题已经解决了,解决思路和流程如下分享出来经验给新人和其他爱好者吧
问题:如何提升多线程时速?
分析1:1.假想目标是200W/h 那么我们需要多少线程?每个线程最大执行时间是多少毫秒?每分钟需要完成多少次?
论证分析1:目标200W每小时那么公式如下,因1小时=60分*60秒,故200W / 3600秒 得到每秒需要完成数为:555条,那么每秒需要完成555条,则需要保证一个前提,将单线程耗时优化至:1秒耗时,排查代码后发现具体优化点有两个地方的严重耗时:第一处为获取代理,第二处为提交POST,那么提交POST优化方案为先设置超时时间为500ms(这里因为目标服务非常活跃),然后再次测试POST是否正常发现完全正常,那么继续缩短寻找最佳临界点,最后定为:300ms,那么开始优化获取代理,这里的获取代理使用了鱼刺的代理池,我的优化方案如下:启动线程前提前获取线程数3倍的代理进代理池后允许,并且设置动态补充阈值为2000,设置验证时间为1s高于1s的垃圾IP统统不要了!接下来整个线程耗时为:400ms。那么我们最初其实面临一个问题如下

问题2:什么样的机器能够支撑555线程且稳定运行几个小时线程没有一个阻塞?
论证分析2:几乎没有那样的机器,这里机器配置调整为 24核CPU,555发现也会有问题 严重阻塞,此时我们发现 400ms最快一个线程 我们预计的是 每秒一个 几乎浪费我们优化至 每秒2个,怎么做呢?其实已经做到了 我们放低线程数为300 即可 ,此时速度已经飙升至 将近 300W

如上就是我的整个优化过程,希望对读者 有所帮助
作者: coini    时间: 2022-5-25 16:41
你送的花开了 发表于 2022-5-21 18:09
比较好奇的一点是   在不使用超级列表框的情况下   文本导入至软件内怎么在多线程操作时批量分割并操作  尝 ...

比方说你导入到程序内的数据存储到数组里了  你可以在每个子线程开始时  用许可证 去递增一个索引 然后用此索引来取数组内的对应值
作者: 国际机票    时间: 2022-7-5 22:58
黑骑士ol 发表于 2022-5-22 12:51
问题已经解决了,解决思路和流程如下分享出来经验给新人和其他爱好者吧
问题:如何提升多线程时速?
分析1 ...

谢谢,,,有点启发。。
作者: 黑骑士ol    时间: 2022-7-9 19:15
已自行解决麻烦管理版主进行删贴




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4