
祝所有 Habr 用戶有美好的一天。
我經常閱讀 Habr 上有關 Raspberry Pi 上某些功能的開發的文章。我決定分享我的經驗。
底
我在一家提供有線電視和網路連線服務的公司工作。而且,正如在這樣的公司中發生的那樣,我經常聽到有關資費計劃與合約中規定的資費計劃不一致的抱怨。有時用戶會抱怨「有線」速度太慢,有時會抱怨某些服務的 ping 值太高,有時會抱怨一天中的某個時間完全沒有網路。通常,此類投訴最終都會被提交到一堆申請中,最終導致一名員工帶著一台工作筆記型電腦“前往現場”,並在該筆記型電腦上進行所有測量。而且,通常情況下,速度一切正常。而且低速其實是在陽台上,透過Wi-Fi用手機上網。嗯,或者類似這樣。
不幸的是,我們無法聯繫到某個用戶,例如在 21:37 時,他的網速是最低的。畢竟員工的工作時間是有限的。更換路由器也沒有什麼效果,因為我們國家的Wi-Fi頻率範圍非常混亂。
對於記錄 — 白俄羅斯共和國的國家供應商強制在所有提供的設備上開啟 Wi-Fi,並從每台設備廣播 ByFly SSID。即使用戶沒有網路服務,只有家用電話。這樣做是為了增加銷量。您可以在售貨亭購買該運營商的卡,連接到任何名為 ByFly 的點,並透過輸入卡上的資料來接收網路服務。由於城市覆蓋率幾乎達到 100%,私營部門和農村地區也覆蓋範圍很廣,因此找到連接點不是問題。
監控我們的外部通訊管道顯示有一定量的可用頻寬。而且即使在高峰時段,訂閱者也不會完全消耗所有可用的頻道。我們對此非常重視。使用不同的服務和不同的測速伺服器會產生有趣的結果。事實證明,並非所有服務都同樣有用……尤其是在晚上。你絕對不應該相信他們。許多同為 Ookla 網路的業者沒有廣泛的通訊管道,或只能在狹窄的距離內工作。這意味著在晚上幾乎不可能得到誠實的結果。事實證明,高速公路也存在問題。例如,在日本測量速度的嘗試顯示出極其慘淡的結果...
主要解決方案

此照片僅供參考。
部署了兩台速度控制伺服器。第一個是 , 第二 - 。兩項服務的績效指標進行了比較。我們最終決定選擇 Ookla,因為…高達 90% 的用戶使用這項服務。
接下來,為使用者和員工撰寫如何測量網路內外速度的說明。那些。當您執行測試時,預設測量網路內的速度。伺服器位於我們的頭端,Ookla 解決方案預設選擇距離使用者最近的伺服器。透過這種方式,我們測試了我們自己的資料傳輸網路的運作。
要測量國內的速度(我們有一個單獨的電信運營商網絡,它聯合了國內的所有運營商和主要數據中心),您需要選擇國內的提供商並進行第二次測量。我們根據經驗確定了幾個可以在一天中的任何時間提供或多或少穩定結果的伺服器,並將它們列為說明中的建議。
嗯,對於外部溝通管道採取類似的行動。我們在測速伺服器上找到了擁有大量頻道的大型運營商,並將它們寫在推薦中(請原諒我使用了“Moskva - Rostelecom”和“Riga - Baltcom”,但我會推薦這些節點以獲得足夠的網速。就我個人而言,在高峰時段,我從這些伺服器獲得了約 870 比特兆的網速)。
你可能會問,為什麼會出現這樣的複雜狀況?一切都非常簡單。我們得到了一個相當方便的工具,在熟練的人手中,它可以讓我們確定我們的網路是否有問題,共和國網路是否有問題,主線是否有問題。如果有人抱怨某項服務的下載速度太慢,我們可以測量使用者的通道速度,然後將其與他從該服務中獲得的速度進行比較。並以合理的方式證明我們正在誠實地分配合約中規定的管道。我們也可以解釋造成這種速度差異的可能原因。
二次解決方案
晚上/白天速度下降的問題仍未解決。如果不在家,如何做同樣的事情?採用廉價的帶有千兆網路的單板計算機並用它製作所謂的探測器。該設備必須按照指定的時間間隔測量電纜的速度。解決方案應該是開源的,盡可能樸實無華,並配有方便的管理面板來查看測量結果。該設備應盡可能便宜,以便可以輕鬆更換並讓用戶無憂使用 n 天。
履行

以BananaPI(型號M1)為基礎。事實上,選擇的原因有二。
- 千兆埠。
- 它就躺在床頭櫃上。
接下來決定使用python客戶端 用於 Speedtest by Ookla 服務作為測量速度的後端。圖書館 測量 ping 速度。嗯,還有管理面板的 php。為了獲得愉悅的感覺,我使用了 .
由於Raspberry Pi資源不具備彈性,因此使用了nginx+php-fpm+sqlite3套件。我想擺脫 MySQL,因為它太重而且冗餘。我預料到會有關於 Iperf 的問題。由於無法在當地以外的地區使用,因此不得不放棄它。
最初,我追隨了這個網站上的許多人的腳步。修改了 speedtest-cli 用戶端。但後來,他思考了一下,就放棄了這個想法。我編寫了自己的工作程序,並利用了原始客戶端的功能。
為了分析 ping,我只是寫了一個單獨的處理程序。我們從測量結果中取平均值。 ping工具可以偵測IP位址和網域名稱。
我沒有實現工作異步。在這種情況下並不是特別需要。
用於評估結果的管理面板非常簡單。
圖。 帶有測試結果的主管理面板窗口
圖。 測試設定

圖。 Speedtest 伺服器清單更新
事實上,僅此而已。這個想法是我在空閒時間即興實現的。現場測試尚未開始。但我們計劃在不久的將來推出原型。提供者及其客戶均可使用它。沒有人阻止您全天候在家中進行測量。唯一需要記住的是,如果您正在積極瀏覽網頁或下載某些內容,那麼測量值將低於實際值。因此,理想情況下,探測器應該留在網路中,作為唯一的流量消費者。
PS:請不要因為程式碼品質而踢我。我是自學的,沒有任何經驗。原始碼 。接受批評。
來源: www.habr.com
