基准测试工具 Wrk 的使用
基准测试工具 Wrk 的使用背景
wrk is a modern HTTP benchmarking tool capable of generating significant load when run on a single multi-core CPU.
Wrk 是一个轻便、高性能的、基于 C 编写的 HTTP 基准测试工具。使用它能轻松对 Web 端口进行一系列压力测试。
安装Wrk 只能在类 Unix 系统下安装,Windows 用户建议使用 WSL。以下以 Ubuntu 为例。
编译工具/环境安装确保安装以下包:
12345sudo apt install gitsudo apt update gcc # 可选sudo apt install libssl-devsudo apt install makesudo apt install build-essential
安装 Wrk在希望安装 wrk 的目录中,执行:
123git clone https://github.com/wg/wrk.gitcd wrkmake
make 操作耗时相对较长,需要耐 ...
Pandas 中判断某个元素是否存在的问题
Pandas 中判断某个元素是否存在的问题在使用 Pandas 处理数据的时候,常常需要判断某个元素在 DataFrame 或其中特定的行/列中是否存在,下面给出一个例子以便详细说明:
1234567import pandas as pddata = {'language': ['Java', 'PHP', 'Python'], 'number': [1995, 1995, 1991]}df = pd.DataFrame(data)print(1991 in df['number'])print(1 in df['number'])
你觉得这个程序会输出什么?答案可能让你大吃一惊
123[root@localhost test]# python pandas_test.pyFalseTrue
查找了相关资料后,我发现在 Pandas 中,类似 1 in df['number'] 的输出,实际上等价于 ...
云原生时代下链路追踪的最终形态:OpenTelemetry
云原生时代下链路追踪的最终形态:OpenTelemetry
本文部分内容参考 https://opentelemetry.io/
基本概念分布式链路追踪分布式链路追踪(Distributed Traces),更常见的说法是链路追踪(Trace),用于记录由应用程序或最终用户提出的请求在多服务架构(如微服务或 serverless 应用程序)中所传播的路径。
如果没有链路追踪,要想找出分布式系统中性能问题的原因是很困难的。
链路追踪提高了我们的应用或系统健康状况的可见性,让我们能够调试难以在本地重现的行为。链路追踪对于分布式系统来说是必不可少的,因为这些系统通常有非确定性的问题,或者过于复杂而无法在本地重现。
链路追踪使调试和理解分布式系统变得不那么困难,因为它分解了一个请求在分布式系统中流动时发生的情况。
一个链路追踪是由一个或多个 Span 组成的。第一个 Span 代表根 Span。每个根 Span 代表一个请求从开始到结束。父级 Span 下面的 Span 提供了一个更深入的背景,即在一个请求中发生了什么(或者说哪些步骤构成了一个请求)。
许多提供链路观测的后端将一个 Trac ...
一个函数实现 Python 超大文件的流式下载与断点续传
一个函数实现 Python 超大文件的流式下载与断点续传在做项目的时候有了超大文件连续高速下载这个需求,然后上网查了不少资料。最后总结并在项目中不断迭代,实现了这个函数。
函数接口非常简单,性能却出人意料的好,因此这个函数无论是用在项目里,还是平时写写脚本下点大东西都非常好用。
这个函数主要的亮点是在于信号量 signal 的使用。requests 库的 timeout 参数实际上是针对请求阶段的超时进行处理,不能通过设置 timeout 限制整个请求下载过程的时间 。而我们在下载大文件时,往往有这样的需求:当一个大文件下载时间过长(例如超过 10 分钟),我们更倾向于放弃此次下载,转而重新开始一次新的下载。因此,我们需要一个能够限制整个下载过程的时间的方法。
为此,我采用了 Python 的 signal 模块,通过设置信号量 signal.alarm() 来限制整个下载过程的时间。当下载时间超过设定值时,会抛出 TimeoutException 异常,从而中断下载。
1234567891011121314151617181920212223242526272829303132333 ...
如何通过 Docker 部署 n2n
如何通过 docker 部署 n2n在以往,部署 n2n 往往需要通过 make 进行源码编译,或是通过包管理器下载安装。安装过程繁琐且难以迁移,配置也容易造成混乱
我在 docker hub 上找到了一个制作水平很高的 n2n v2.9 docker,仅仅只有 7 MB 且运行良好。下面介绍如何通过这个镜像实现 n2n 的 docker 部署。
镜像获取与测试首先需要下载镜像,通过以下代码将镜像从 docker hub 下载到本地:
1docker push yingftf/n2n
运行以下指令就能在不运行容器的情况下测试镜像是否可用及其 n2n 版本:
123docker run --rm --network host yingftf/n2n supernode -hdocker run --rm --cap-add=NET_ADMIN --cap-add=NET_RAW --device=/dev/net/tun --network host yingftf/n2n edge -h
n2n 的容器化部署在 docker hub 页面上,作者介绍了通过映射卷操作配置文件部署的方 ...
如何利用 Screen 运行后台任务
如何利用 Screen 运行后台任务在很多文档中,建议我们使用以下方法后台运行代码以便 ssh 退出后服务器仍然能继续执行命令
123nohup <cmd> &ornohup <cmd> & >> outfile.out
然而,这有两个缺点
nohup 后台运行会在 nohup.out 或是你所指定的重定向文件中,实时打印程序的标准输出和标准错误输出。它的大小是无限量增长的,但一旦直接删除了 nohup.out ,该任务进程就再也无法输出任何内容。更重要的是,项目中已经有了一个独立的较为成熟的日志系统,nohup.out 的内容对我们来说实际上几乎没有作用
停止 nohup 任务很不直观,需要 ps -def | grep "<target_file_name>" 找到 pid ,然后 kill 掉
因此,可以使用大部分 linux 自带的 screen 指令来实现后台运行任务,无视 ssh 的退出。
咱们服务器这个版本的 CentOS 属于那些小部分的 linux :),因此先需要执行 yum ...
如何将 Python 项目打包为 Docker
如何将 Python 项目打包为 Docker编写 requirement.txt在封装打包为 docker 镜像前,需要确定 Python 项目所需要的 pip 依赖,并且必须确定该依赖的包的版本。浏览各个 .py 文件,检查 import 语句后的包是否非 Python 自带。以 requests 为例,确定项目引用了 requests 后,在控制台输入 pip list | grep requests 即可查看其版本。
请注意,并非每个 Python 包版本都能用该方法查询。例如 import yaml 指代的就是 PyYAML 包,然而 “yaml” 和 “PyYAML” 二者没有一个字母是相同的。在这种情况下,只能直接输入 pip list 手动查看包版本
确认了第三方包及其版本后,编写 requirement.txt ,下方是一个例子:
12PyYAML==6.0requests==2.28.1
整理项目文件夹将项目文件全部复制到一个新的文件夹中,此处我取名为 /docker 文件夹。复制时需要注意:
清空 /data 、/config 、/logs 文件夹
无需复 ...
如何将 Vue 项目打包为 Docker 镜像并运行容器
如何将 Vue 项目打包为 docker
本文在安装了 Docker 的 Linux 或 WSL 环境下可用
配置文件Vue 配置首先需要在 Vue 项目的 .env 文件中配置项目路径,以保证建项目后资源路径正确。同时特别关注配置的端口号,接下来将用 Nginx 监听该端口
12345678# port 端口号VITE_PORT = 8888# open 运行 npm run dev 时自动打开浏览器VITE_OPEN = false# public path 配置线上环境路径(打包)、本地通过 http-server 访问时,请置空即可VITE_PUBLIC_PATH = ./
然后,在 Vue 项目目录输入 npm run bulid ,随后会生成 dist 文件夹,内容是 Vue 项目的静态文件,拷贝该文件到你喜欢的任意目录文件夹下。下文假设该文件夹叫做 /docker-bulid
Nginx 配置在 docker-bulid 文件夹中新建 nginx.conf 文件,内容配置如下
注意,Nginx 监听的端口号必须与你在 Vue 项目中配置的一致
1234567891 ...
我的 2022 年
三个词总结我的 2022,大概就是 游戏、旅行和成长
今天是 2022 年的最后一天,每年的这个时候我都会感慨时光荏苒、日月如梭,但也仅此而已 ,随后很快就投入无尽快乐的游戏中。但今年对我而言也算是充满意义的一年(正面负面都有),再加上刚好有了博客这个载体,还是决定在这个博客里浅浅记录一下我的 2022 。
封面图是沙漠里的绿洲(只要不拍人, 特别是拍自己, 我还是对自己的拍照技术有点自信的)
年初:荒废于玩乐,奔波于疫情自从保研资格到手后,我和一起末位保研的舍友 L 携手开始了摆烂生活。整整 2022 年上半年,都是游戏、游戏、游戏然后睡觉。实际上无论是从同龄的保研人还是往届的学长学姐的经验来说,这都是找多段实习的一个黄金时间,从现在的我看来它确确实实是被我自己浪费了。但说非常后悔,那也不太至于,因为这种毫无顾虑为所欲为的放空生活真的很快乐。当时的我总有一种感觉,这样的时光可能一辈子都不会再有了,那么及时行乐又有何不可?
我真正后悔的事情,是没能及时和我的亲人告别。2 月份寒假结束的时候,我家乡这里的疫情有明显转坏的趋势,家人都劝我趁着窗口期,赶紧回北京。但在北京没落脚几天,家 ...
极致游戏 IT运维 日常实习面经
之前投了简历大概3天后 HR 才和我联系,安排了一个没课的上午面试。我提前半小时在飞书等,面试官很准时就到了,其本人应该也是极致的运维工程师。
提问环节
自我介绍
你的项目经历很多,有落地实践的项目吗?
这是我第一次实习并且实验室几乎没有横向所以我说的没有,但实际上其实那个空教室查询软件还是能说说的,毕竟当时还是部署到酷安上了,只能说自己太老实了
本科是网络工程,有做过相关的项目吗?
说了一下简历没有写上的一个 DNS 服务器,当时用的字典树写的域名解析,效果还不错。不过我只是参与者,那个项目 Leader 是个大牛,现在去了人大高瓴。
对Linux系统的特点做个基本阐述,举出和Windows的差别?
这个问题我觉得太泛了,我就回答了一下多线程是不同的,比如 Linux 用的主要是 Fork() 效率高一些,Windows 则是用的不同的方法(具体什么方法一时想不出来),这也是 Redis 弃用 Windows 的主要原因之一。
感觉面试官对我这个回答不太满意 QAQ
常用的 Linux 指令有哪些?
top 用来看CUP负载, netstat 来看端口占用。
让我惊讶的是 ...