亿级数据毫秒级响应?

news2024/11/17 11:36:19

作为一名深陷在增删改查泥潭中练习时长三年的夹娃练习生,偶尔会因为没有开发任务不知道周报写什么而苦恼。

正愁这周写啥呢,组长过来交代了个跟进第三方公司性能测试报告的工作,我一寻思这活不最好干了吗,正愁不知道周报咋写呢,又能提现工作量又不累,本以为轻松拿捏的结果差点让老弟翻车。

由于我们组主要做数仓管理这块的业务,这次的性能测试上有一些数据服务并发相关的指标需要后端配合测试,让一天搞定,我寻思半天搞完还能去掘金狠狠的摸半天鱼,岂不美哉。拿到测试指标之后直接手心出汗了。

啥意思,亿级数据查询毫秒级响应还要100并发持续5分钟,家人们谁懂啊。。。关键我们负责的业务是tob的场景啊,哪有这么高并发。数据查询还在旧的python服务里,给提供的测试环境全是单机服务。

加缓存

既然是做性能测试那管数据对不对什么事,给你返回不就行了,在服务加个临时缓存,先把数据查询的耗时降下来再考虑其他的。

身为一个Javaboy,写python的代码10行代码得5行问chatGPT,好在是用redis加上了缓存。用jmeter浅试一下,

效果上看加上缓存查询速度的确变快了,但是平均耗时离预期还是差距较大,最大耗时要接近5s多,看来只加缓存是扛不住,耗时应该是服务扛不住并发,线程阻塞了。。。

nginx横向扩展

不得不吐槽下,服务真垃圾呐,时间紧任务重,赶紧想办法,直接把问题当成面试题,脑袋里直接开始翻阅八股文,什么高内聚、低耦合、高吞吐、月薪3000包吃住,第一个冲出来的想法就是扩展服务做负载。

怎么负载呢,部署三份数据查询服务,nginx做upstream负载,效果应该顶得住,开搞开搞。结果python代码不太熟,多进程的方式启动torando就是报错。整的我满头大汗,下午就得给人提供接口了这咋整啊,不行问问组长去吧。

结果组长直接说浪费那时间干啥啊,反正都是做做样子,在nginx里写个lua脚本,读一下本地文件返回数据不就可以了,第三方又不会管你咋实现的...都得都懂。

lua脚本

我仔细一想也是,整那么紧张干啥,先实现了再说,由于环境里的nginx已经安装了lua插件可以直接使用。

先提前把请求的返回数据保存到txt里,然后用lua实现一个读取本地文件的方法,请求打过来之后判断body里的数据是否是指定的数据id,如果是直接读取数据返回。

nginx和lua的性能别说100并发了1w并发也轻松拿捏。

lua读取本地文件内容

 

lua

复制代码

function getFile(file_name) local f = assert(io.open(file_name, 'r')) local string = f:read("*all") f:close() return string end

找到nginx配置对应的请求url,添加access_by_lua_block代码块,将getFile方法声明在这里,并且写一下匹配逻辑,如果body中包含file_id,直接调用getFile方法返回,不包含还是走正常的查询逻辑。

 

php

复制代码

location = /api/data/preview { set $upstream 'fe_full_long'; access_by_lua_block { function getFile(file_name) local f = assert(io.open(file_name, 'r')) local string = f:read("*all") f:close() return string end ngx.req.read_body() local data = ngx.req.get_body_data() if ngx.re.match(ngx.var.request_body, "file_id") then ngx.say(getFile(string.format("/nginx/conf/conf.d/a.txt", f))); return end } proxy_pass http://$upstream; proxy_set_header Host $host:$server_port; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }

保存nginx -t,先检查后重启,防止手心冒汗,简单测了一下性能直接起飞,直接提供给第三方测试了。

亿级数据毫秒级响应?

晚上下班前发过来了初版的测试报告,组长一看,直接给我阅起兵来了,"你这也太快了,搂着点啊,管家指标还一样,快改改"。

我一看好家伙,亿级数据28毫米返回,雀氏有点尴尬了。。。。赶紧改改。在lua脚本里sleep随机几百毫秒就真实了。

 

lua

复制代码

-- 定义睡眠函数 local function sleep(ms) ngx.sleep(ms / 1000) end -- 随机睡眠一段时间(1毫秒到100毫秒之间) math.randomseed(ngx.now()) local sleepTime = math.random(1, 100) sleep(sleepTime)

重启下nginx重测,结果很合理,必须得在周报浓墨重彩一波。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/707336.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

github上传文件及其问题解决

文章目录 1. github上上传文件夹2. <filename> does not have a commit checked out3. this exceeds GitHubs file size limit of 100.00 MB4. error: src refspec master does not match any 1. github上上传文件夹 首先在github上create a new repository&#xff0c;…

C语言王国探险记之字符串+注释

王国探险记系列 文章目录&#xff08;3&#xff09; 前言 一&#xff0c;什么是字符串呢&#xff1f; 1&#xff0c;那C语言是怎么表示字符串的呢? "hello world.\n" 2&#xff0c;证明字符串的结束标志是一个 \0 的转义字符 3&#xff0c;证明字符串的结束标…

云原生之深入解析Flink on k8s的运行模式与实战操作

一、概述 Flink 核心是一个流式的数据流执行引擎&#xff0c;并且能够基于同一个 Flink 运行时&#xff0c;提供支持流处理和批处理两种类型应用。其针对数据流的分布式计算提供了数据分布&#xff0c;数据通信及容错机制等功能。Flink 官网不同版本的文档flink on k8s 官方文…

linux-2.6.22.6内核网卡驱动框架分析

网络协议分为很多层&#xff0c;而驱动这层对应于实际的物理网卡部分&#xff0c;这也是最底层的部分&#xff0c;以cs89x0.c这个驱动程序为例来分析下网卡驱动程序框架。 正常开发一个驱动程序时&#xff0c;一般都遵循以下几个步骤&#xff1a; 1.分配某个结构体 2.设置该结…

IDEA将java项目打包为jar包

方法 首先在src -> resources目录下建立一个文件夹&#xff0c;然后再在新建文件夹里面建立META-INF文件夹&#xff08;不推荐直接建立META-INF&#xff0c;否则后面打包完的jar包需要手动修改配置&#xff09; 然后点击File -> Project Structure -> Artifacts -&g…

第三章:Faster R-CNN网络详解(《Faster R-CNN: 基于区域提议网络的实时目标检测》)

(目标检测篇&#xff09;系列文章目录 第一章:R-CNN网络详解 第二章:Fast R-CNN网络详解 第三章:Faster R-CNN网络详解 第四章:YOLO v1网络详解 第五章:YOLO v2网络详解 第六章:YOLO v3网络详解 文章目录 系列文章目录技术干货集锦前言一、摘要二、正文分析 1.引入库2.读…

Mysql的逻辑架构_读写锁_事物

概览 一. MySql的逻辑架构1. 逻辑架构图2. 连接管理与安全性 二. 并发控制1. 读写锁2. 锁粒度 三. 事务1. 特性2. 隔离级别3. 死锁4. 事物日志&#xff1f;5.MySql中的事物 mysql最与众不同的特性&#xff1a;存储引擎架构 架构的设计&#xff1a; 将查询处理(Query Processin…

7、注解与自定义注解

1 注解 注解很厉害&#xff0c;它可以增强我们的java代码&#xff0c;同时利用反射技术可以扩充实现很多功能。它们被广泛应用于三大框架底层。 传统我们通过xml文本文件声明方式(如下图,但是XML比较繁琐且不易检查)&#xff0c;而现在最主流的开发都是基于注解方式&#xff0c…

房贷计算器——新增选择还款方式

房贷计算器——新增选择还款方式 #!/usr/bin/env python # coding: utf-8# In[4]: 文字‘房贷计算器’ 文字‘贷款总金额’&#xff1a;输入框 文字‘贷款期限’&#xff1a;输入框 文字‘年利率’&#xff1a;输入框 按钮‘开始计算’ 返回&#xff1a; 月供 总利息 from tki…

【Framework】bindService启动流程

前言 在【Service启动流程之startService】 中&#xff0c;我们已经分析了startService的流程&#xff0c;这篇就继续讲bindService的流程&#xff0c;他们两有很多相似之处。同样&#xff0c;流程图在总结处。 我们在调用bindService方法时候&#xff0c;实际调用的是Contex…

台庆|三联开关怎么接线?

三联开关是一种常见的开关类型&#xff0c;通常用于控制一个电路中的三个不同的电器或灯具。它的用途非常广泛&#xff0c;因此了解如何正确接线是非常重要的。在本文中&#xff0c;我们将详细讨论三联开关的接线方法。 我们先来看看三联开关实物图与线路图&#xff1a; 接下来…

【音视频处理】FFmpeg详解,命令行、源码、编译安装

大家好&#xff0c;欢迎来到停止重构的频道。 本期我们讨论FFmpeg。 这里先提一个问题&#xff0c;FFmpeg命令行功能如此强大&#xff0c;为什么还需要舍近求远地调用库函数呢 &#xff1f; 我们按这样的顺序讨论 &#xff1a; 1、 FFmpeg命令行说明 2、 FFmpeg代码结构…

如何在 JavaScript 中压缩字符串

在 JavaScript 中&#xff0c;可以有范围很广的压缩&#xff0c;比如 gzip 之类的文件压缩等等。 在这里&#xff0c;我们将讨论两种压缩字符串的方法。 最初&#xff0c;我们将重点介绍霍夫曼算法。 稍后&#xff0c;我们将介绍解决任务的 LZString 方法。 在 JavaScript 中使…

主成分分析系列(一)概览及数据为何要中心化

一、概览 主成分分析&#xff08;Principle Component Analysis&#xff0c;PCA&#xff09;算法属于数据降维算法里面的一种。数据降维算法的主要想法是从高维度数据中找到一种结构&#xff0c;这种结构蕴含了数据中的大部分信息&#xff0c;从而将高维数据降维到低维数据&am…

Apikit 自学日记:参数构造器

构造器是测试时系统提供的快速生成请求数据的工具。一般用于快速对数据进行加密和生成随机数值。可在请求参数中某个字段的右侧选择构造器操作&#xff0c;通过构造器生成该字段的参数值。构造器由两种类型的操作组成&#xff1a;设置初始数据和多重操作。 设置初始数据 其中初…

基于C语言的开源csv解析库:MiniCSV使用示例

文章目录 MiniCSV简介官方示例csv文件解析示例CodeBlocks工程下载 MiniCSV简介 之前写了一篇基于C语言字符串操作函数的csv文件解析&#xff1a;C语言解析csv格式文件&#xff0c;本文介绍一个开源简洁的csv解析库的使用&#xff1a;MiniCSV&#xff0c;使用标准C语言设计。 …

Spring Boot 中的 Redis 的数据操作配置和使用

Spring Boot 中的 Redis 的数据操作配置和使用 Redis 是一种高性能的 NoSQL 数据库&#xff0c;它支持多种数据结构&#xff0c;包括字符串、哈希、列表、集合和有序集合。Redis 还提供了丰富的命令&#xff0c;可以对数据进行快速的 CRUD 操作。Spring Boot 是一个基于 Sprin…

数据结构--栈的引用--前中后缀表达式(前部分)

数据结构–栈的引用–前中后缀表达式(前部分) 常见的算数表达式 由三个部分组成: 操作数、运算符、界限符 \color{red}操作数、运算符、界限符 操作数、运算符、界限符 ps:界限符是必不可少的,反映了计算的先后顺序 波兰表达式(让计算机更容易识别的算数表达式) Reverse Po…

高性能分布式缓存Redis(一) 快速实战

一、缓存发展史&缓存分类 1.1、大型网站中缓存的使用 访问量越大&#xff0c;响应力越差&#xff0c;用户体验越差。 引入缓存、示意图如下&#xff1a; 读写策略&#xff1a; Cache Aside Pattern&#xff08;旁路缓存模式&#xff09;Read/Write Through Pattern&am…

AA-TransUNet github: 用于预测任务的注意力增强的TransUNet

文章目录 来源AA_TransUNet架构数据集和预训练模型使用作者 来源 github地址 AA_TransUNet架构 数据集和预训练模型 如果你对本文中使用的数据集&#xff08;降水图和云量数据集&#xff09;感兴趣&#xff0c;请访问SmaAt-UNet了解更多细节。 对于预训练的AA_TransUNet模型…