すべてのhabraユーザーのこんにちは。
私はこの「Malinka」でのこの機能またはその機能の開発について、Habréに関する記事を常に読んでいます。ここで自分の作品を共有することにしました。
バックグラウンド
私はケーブルテレビとインターネットアクセスサービスを提供する会社で働いています。また、そうした企業の場合と同様に、料金プランと契約書に記載されているプランとの不一致について定期的に苦情を聞いています。現在、ユーザーは「ケーブルを介して」低速であること、次に特定のサービスの高pingについて、時には1日の特定の時間にインターネットが完全に存在しないことについて不平を言っています。多くの場合、このような不満はアプリケーションのプールに行き着きます。すべての測定が行われる作業用のラップトップを持っている従業員の1人が「サイトに」移動するということです。そして、多くの場合、すべてがスピードで整然としていることが判明します。そして、低速は実際には、Wi-Fi経由で、バルコニーにある携帯電話です。まあ、またはそのようなもの。
残念ながら、例えば21:37に最も遅い速度の加入者に行くことは不可能です。それでも、従業員の就業日は限られています。ルーターを交換しても効果はありません。私たちの国のwi-fiの周波数範囲はひどく乱雑です。
参考までに -ベラルーシ共和国の州のプロバイダーは、使用できるように提供されているすべてのデバイスで強制的にWi-Fiをオンにし、各デバイスからSSID ByFlyをブロードキャストします。加入者がインターネットサービスを利用しておらず、自宅の電話しか利用していない場合でも。これは追加販売のために行われます。このオペレーターのカードをストールで購入し、ByFlyという名前の任意のポイントに接続し、カードからデータを入力することでインターネットサービスを利用できます。都市のほぼ100%のカバレッジと、民間セクターと田舎の集落のかなりのカバレッジを考慮すると、接続ポイントを見つけることは問題ではありません。
外部通信チャネルを観察すると、指定された帯域幅予約があることがわかります。そして、加入者は、ラッシュアワー中であっても、利用可能なチャンネルを消費しません。これで私達は皆とても深刻です。速度を測定するためにさまざまなサービスとさまざまなサーバーを使用すると、興味深い結果が得られます。すべてのサービスが同じように役立つわけではないことが判明しました...特に夕方に。そして、あなたはそれらを明確に信頼すべきではありません。同じOoklaネットワークの多くの事業者は、広い通信チャネルを持っていないか、エンドツーエンドで働いています。これは、夕方に正直な結果を得ることはほとんど不可能であることを意味します。そして、高速道路は罪を犯しています。たとえば、日本で速度を測定しようとする試みは非常に悲惨な結果を示しています...
主なソリューション
説明のための写真
2つの速度制御サーバーが配備されました。 1つ目はLibreSpeed、2つ目はOOKLAのSpeedtestです。両方のサービスのパフォーマンスが比較されました。私たちはOoklaに立ち寄ることにしました。加入者の最大90%がこの特定のサービスを使用しています。
次に、ユーザーと従業員向けに、ネットワーク内外の速度を測定する方法についての説明が書かれました。それら。テストを開始すると、速度はデフォルトでネットワーク内で測定されます。サーバーは本社にあり、Ooklaソリューションはデフォルトで、加入者に最も近いサーバーを選択します。そこで、自社のデータ伝送ネットワークの動作確認を行っています。
国内の速度を測定するには(国内のすべての事業者と主要なデータセンターを統合する通信事業者用の個別のネットワークがあります)、国内のプロバイダーを選択して再測定する必要があります。私たちは、1日のいつでも多かれ少なかれ安定した結果をもたらすいくつかのサーバーを経験的に識別し、それらを手順で推奨されているように規定しました。
さて、外部通信チャネルの同様のアクション。速度テストサーバー上に大きなチャネルを持つ大規模なオペレーターを見つけ、推奨に書き込みました(Moskva-RostelecomおよびRiga-Baltcomは許しますが、これらのノードに適切な数を取得することをお勧めします。個人的には、これらのサーバーから最大870メガビットを受信しましたピーク時)。
なぜそんなに難しいのですか?すべてが非常に簡単です。有能な手で、私たちが決定することを可能にするかなり便利なツールを受け取りました:ネットワークに問題があるか、共和党のネットワークに問題があるか、トランクに問題があるか?あるサービスからのダウンロード速度が遅いという不満がある場合は、加入者のチャネルの速度を測定し、サービスから受信したものと比較できます。そして、契約で規定されているチャンネルを正直に強調していることを示すように主張されています。また、このような速度の違いの考えられる理由についても説明します。
二次解
夕方/日中の速度低下の問題は未解決のままです。加入者の家にいなくても同じことをするには ギガビットネットワークを備えた安価なシングルボードを使用して、そこからいわゆるプローブを作成します。デバイスは、指定された時間間隔でケーブルを介して速度の測定を行う必要があります。ソリューションは、測定結果を表示するための便利な管理パネルを備えた、できるだけ気取らないオープンソースである必要があります。恐れずにn日間、簡単に交換して加入者に預けることができるように、デバイスはできるだけ安価である必要があります。
実装
BananaPI(モデルM1)がベースとして使用されました。実際に選択する理由は2つあります。
- ギガビットポート。
- 彼はちょうどナイトスタンドで寝転んでいた。
次に、速度を測定するためのバックエンドとしてOoklaサービスによるSpeedtest のspeedtest-cli Pythonクライアントを使用することが決定されました。ping速度を測定するためのPythonpingライブラリ。ええと、管理領域のphp。便宜上、ブートストラップを使用しました。
ラズベリーのリソースはゴムではないという事実のため、nginx + php-fpm + sqlite3の束が使用されました。 MySQLはその重さと冗長性のために放棄したかったのです。 Iperfに関する質問を予測しています。ローカル以外の方向で使用することは不可能であるため、それは放棄されなければなりませんでした。
最初、私はこのサイトで多くの人の道をたどりました。speedtest-cliクライアントを変更しました。しかし、少し考えた後、彼はその考えを放棄しました。元のクライアントの機能を使用する自分のワーカーを作成しました。
pingを分析するために、私は単に別のハンドラーを作成しました。測定により平均値を取ります。Pingovalkaは、IPアドレスとドメイン名の両方を知っています。
非同期作業はできませんでした。この場合、彼女は特に必要ありません。
結果を評価するための管理パネルは、非常に最小限であることがわかりました。
図。テスト結果のメイン管理ウィンドウ
図。テスト設定
図。Speedtestサーバーリストの更新以上
です。アイデアは、仕事から離れて、膝の上で実現されました。フィールドテストはまだ始まっていません。ただし、近い将来プロトタイプを発売する予定です。そこではプロバイダーとプロバイダーのクライアントの両方を使用できます。誰もが24時間自宅で測定を行うことを気にしません。覚えておくべき唯一のことは、ネットサーフィンをしている、または何かをダウンロードしている場合、測定値は実際のものよりも低くなるということです。したがって、理想的には、プローブを唯一のトラフィックコンシューマとしてネットワーク上に残す必要があります。
PS:コードの品質を気にしないでください。私は経験がなく独学です。GitHubのソースコード。批判は受け入れられる。