便宜的DDO或如何正确加载测试您的应用程序

2021-06-14 22:24:12

如果在使用此工具后发生任何事故,我们拒绝所有责任!

2周前,我们发表了一篇文章,互联网的未来是静态的! AKA在没有崩溃的情况下,我们如何在一分钟内扩展到1000万用户,并众一次地提出了2个问题:

我不会再写一个关于蝗虫的教程,因为我认为文档已经很好,尽管如此,我将为一个基地开始。

导入时间从蝗虫导入httpuser,任务,obfust.contrib.fasthttp导入fasthttpuserclass quickstruser(fasthttpuser):wait_time = with(0.1,1.1)@task def get_root(self):self.client.get(" /&# 34;)

蝗虫的默认HTTP客户端使用Python-requests。这样做的原因是,请求是一个非常良好的Python包,它提供了一个非常好的API,许多Python开发人员熟悉。因此,在许多情况下,我们建议您使用默认的HTTPUERWHICH使用请求。但是,如果您计划运行真正的大规模测试,蝗虫附带备用HTTP客户端,Fasthttpuser使用Geventhttpclient而不是请求。此客户端显着更快,我们已经看到了5x-6x的性能增加,用于制作HTTP-Requests。这并不一定意味着用户数量可以模拟每个CPU核心将自动增加5倍6倍,因为它还取决于负载测试脚本的其他内容。但是,如果您的蝗虫脚本在制作HTTP-Requests时花费大部分CPU时间,您可能会看到显着的性能增益。

#在第一个开放2终端#,在第二个启动locustlocust -f tasks.py#,只需启动一个基本的http serverhttp-server

有趣的部分,在测试计算机上,我在测试计算机上看到了关于文件限制的警报(仅限1024)。不用担心,它将在未来处理。

所以我们现在正在在本地系统上运行,产生100rps,100个用户,不错。 但如何缩放? 你现在想要的是,要分割数十岁/百种服务器之间的负载。 为此,我们决定使用距离,这是一个非常创新的法国托管提供商。 每小时0.01欧元(0.012 USD),您有2个AMD EPYC 7281 16核处理器(非常好的一),2GB的RAM和200Mbps无限制。 或者如果您更严重,就像我一样,您可以拥有32C 128GB RAM,5Gbps少于1美元/小时 那个'我们想要的,当然是一个可变数量的工人。 为了做到这一点,我们将使用最喜欢的工具Doan Duy Hai:Terraform。 Terraform允许您为代码(IAC)和IT'我们的小型测试的完美工具写一些基础架构。 此时,我建议克隆https://github.com/kalvadtech/locust,因为我将一步一步地解释项目的结构。

Terraform {Required_Providers {Scaleway = {Source =" Scaleway / Scaleway" }}必填_version ="> = 0.13"}提供者" Scaleway" {ZONE =" FR-PAR-1"地区=" fr-par"} data" scaleway_instance_image" "蝗虫" {image_id =" ff48b73a-097d-4685-b996-d3ebe50636ea"}模块" master" {Source =" ./模块/主" startup_script = templatefile(" ./ startup-master.sh",{" tasks_url" = var.tasks_url" locust_type" =" master"& #34; locust_username" = var.locust_username" locust_password" = var.locust_password})image_id = data.scaleway_instance_image.locust.id}模块"工作者" {source =" ./模块/工作者" startup_script = templatefile(" ./ startup-warter.sh" {" tasks_url" = var.tasks_url" locust_type" ="工人"& #34; locust_master_ip" = module.master.locust_master_ip})image_id = data.scaleway_instance_image.locust.id workers_number = var.workers_nb depens_on = [module.master]}

这个main.tf是项目的基础,它允许我们设置提供程序并初始化我们的模块。

正如您所看到的,我们确实选择在法国使用距离与Zon-PAR-1一起使用Scaleway。

从15到17行开始,它似乎有点摘要,但它只是Ubuntu 20.04的ID(我希望我们可以在Scaleway上使用Archlinux,但提供的版本是错误的,并且难以更新)。

显然,主人有点不同,因为它应该在工人内引用,但最后,一切都基于云init脚本。

它只是简单地下载了蝗虫,任务文件和使用管理员和密码启动主设备。

除了一个点之外,工作人员的启动脚本几乎是相同的:它引用部署中的主IP和#39;

克隆了文件夹后,请确保您在本地安装了TerraForm,然后从Scaleway配置您的访问密钥和秘密密钥,导出那些和init terraform: 是时候前进了。 当您想启动部署时,您需要4个参数: locust_username:要使用的用户名连接到蝗虫' s管理面板 正如你所看到的,我有很多顶部正在说320名工人,但为什么320? 由于蝗虫工作者被挑选线程,所以脚本的一部分是每核启动一个工人! 我们只做了大约220k的请求/秒。 为什么? 因为服务器无法使用更多(开始饱存内核)。 为1小时的测试,它将在8eur(约10美元)左右的价格为蝗虫基础设施。

只是想象一下,而不是做一个基本的上/在nginx上,你的一部分场景是下载存储在S3上的图片。 图片是2MB,我们知道AWS S3非常缩放(并且没有,它'不是讽刺)。 我们说我们有50Gbps的潜力,而且它是真实的,它的一个限制,所以我们只能执行50Gbps = 6.25Gbps。 6.25 Gbps / 2MB =每秒请求=群集没有疯狂 现在让我们想象一下我们在1小时内运行我们的测试。 我们将下载6.25GB * 3600 = 22.5 TB。 ScaSyway的好点是您没有在服务器上支付带宽,这意味着您的测试总是花费大约10美元。 坏点是在AWS上,你支付一切,就像S3的带宽一样。 这意味着一小时的测试,在Scalway上成本为10美元,在AWS上达到约2,000美元!

如果您有问题,如果没有其他人可以帮助,如果您能找到它们,也许您可以聘请卡尔瓦德团队。