开发用于测量互联网速度的分区



祝所有habra用户下午好。



我经常在Habré上阅读有关“ Malinka”上此功能或该功能的开发的文章。我决定在这里分享我的工作。



背景



我在一家提供有线电视和互联网访问服务的公司工作。而且,像这类公司一样,我会定期听到有关合同中规定的关税计划不一致的投诉。现在,用户抱怨“通过电缆”的低速运行,然后抱怨某些服务的ping频繁,有时抱怨一天中的特定时间完全没有Internet。通常,此类投诉最终会出现在应用程序池中,根据该应用程序,将其中一台工作笔记本电脑的员工(该员工在上面进行所有测量)发送到站点。而且,通常情况证明,一切都是有序的。而低速实际上是通过阳台上的Wi-Fi在手机上进行的。好吧,或者类似的东西。



不幸的是,例如当速度最快时,不可能在21:37到达订户。但是,员工的工作日是有限的。更换路由器无效。我国Wi-Fi的频率范围非常混乱。



供参考 -白俄罗斯共和国的国家/地区提供商在所有提供使用的设备上强制打开wi-fi,并从每个设备广播SSID ByFly。即使订户没有Internet服务,也只有家用电话。这样做是为了增加销售额。您可以在摊位中购买该运营商的卡,将其连接到名称为ByFly的任何地方,然后通过从卡中输入数据来接收Internet服务。考虑到几乎100%的城市覆盖率以及私营部门和农村居民区的覆盖率,找到连接点不是问题。



观察我们的外部通信通道可以发现有给定的带宽储备。而且,即使在高峰时段,订户也不会消耗可用的频道。因此,我们都非常认真。使用不同的服务和不同的服务器来测量速度已经产生了有趣的结果。事实证明,并非所有服务都同样有用……尤其是在晚上。而且您不应该明确地信任他们。同一Ookla网络的许多运营商没有广泛的通信渠道,或者它们端到端地工作。这意味着在晚上通常很难获得诚实的结果。高速公路在犯罪。例如,在日本进行速度测量的尝试显示出极其糟糕的结果...



主要解决方案





出于说明目的的照片,



已部署了两个速度控制服务器。第一个是LibreSpeed,第二个是OOKLA的Speedtest。比较了两种服务的性能。我们决定在Ookla停留。多达90%的订户使用此特定服务。



接下来,为用户和员工编写了有关如何测量网络内部和外部速度的说明。那些。开始测试时,默认情况下会在网络内测量速度。该服务器位于我们的总部,默认情况下,Ookla解决方案会选择最接近订户的服务器。因此,我们检查自己的数据传输网络的运行情况。



要测量国家/地区内的速度(我们为电信运营商提供了一个单独的网络,该网络将国家/地区内的所有运营商和主要数据中心结合在一起),您需要选择国家/地区内的提供商并重新进行测量。我们已经根据经验确定了几台服务器,它们可以在一天中的任何时候提供或多或少稳定的结果,并按照说明中的建议进行设置。



嗯,外部通信渠道的类似操作。我们在速度测试服务器上发现了具有大型通道的大型运营商,并在建议中写了它们(原谅Moskva-Rostelecom和Riga-Baltcom,但我会建议这些节点获得足够的数量。就我个人而言,我从这些服务器收到了约870兆位在高峰时段)。



您问为什么会有这样的困难?一切都非常简单。我们已经收到了一个相当方便的工具,该工具可以让我们确定:网络中是否存在任何问题,共和党网络中是否存在问题,中继线是否存在问题。如果有人抱怨某项服务的下载速度太慢,我们可以测量订户频道的速度,然后将其与他从该服务中收到的内容进行比较。它被认为表明我们正在诚实地强调合同中规定的渠道。而且我们还可以解释造成这种速度差异的可能原因。



次要解决方案



晚上/白天的速度下降问题仍然悬而未决。如何在不在家的情况下做所有这些事情?拿一块便宜的带有千兆位网络的单板进行一个所谓的探测。设备应在指定的时间间隔内测量通过电缆的速度。该解决方案应尽可能开源,并带有方便的管理面板以查看测量结果。该设备应尽可能便宜,以便可以轻松地将其更换并留给用户n天,而无需担心。



实作







以BananaPI(型号M1)为基础。选择实际上有两个原因。



  1. 千兆端口。
  2. 他只是躺在床头柜上。


接下来,决定将Speedtest -cli python客户端用于Ookla的Speedtest服务作为测量速度的后端。用于测量ping速度的Pythonping。好了,而php用于管理区域。为了方便起见,我使用了bootstrap



由于树莓资源不是橡胶,因此使用了一堆nginx + php-fpm + sqlite3。由于它的繁琐和冗余,我们想放弃MySQL。期待有关Iperf的问题。由于无法在当地以外的方向使用它,因此不得不放弃它。



最初,我在此站点上遵循许多方法。修改了speedtest-cli客户端。但是,经过一番思考,他放弃了这个主意。我编写了自己的使用原始客户端功能的工作程序。



为了分析ping,我只写了一个单独的处理程序。我们通过测量取平均值。Pingovalka知道一个IP地址和一个域名。



我没有实现异步工作。在这种情况下,并不需要她。



评估结果的管理面板非常简单。



图。带有测试结果的主管理窗口



图。测试设定





图。更新Speedtest服务器列表



就是这样。这个想法是在膝盖上实现的,可以在下班时间自由活动。现场测试尚未开始。但是我们计划在不久的将来发布原型。您可以在那里使用提供程序和提供程序的客户。没有人愿意全天候在家进行测量。唯一要记住的是,如果您正在网上冲浪或下载某些内容,那么测量结果将比实际测量值低。因此,理想情况下,应该将探针作为唯一的流量消耗者留在网络上。



PS:请不要为代码的质量而踢。我是自学成才,没有经验。GitHub上的源代码批评被接受了。



All Articles