Facebook網路模擬測試工具ATC使用

n8765發表於2015-07-31
 Facebook在其工程部落格(原文)上宣佈開源移動網路測試工具Augmented Traffic Control(ATC),我迅速試用了一番,非常不錯,對手遊或者其他APP的除錯和測試都非常有幫助,介紹給大家。
  ATC
  現在已經是APP時代了,由於手機網路的特殊性,移動APP需要面臨更加複雜的網路環境。在設計之初就要考慮如何應對各種網路環境,比如很高的延遲,經常丟包,頻繁的斷線。特別是手遊,斷線重連機制設計的好壞直接影響到遊戲的體驗。
  所以,在開發過程中模擬各種網路環境進行測試變得越來越重要。在ATC出來之前,微軟曾經有一個網路模擬工具NEWT(Network Emulator for Windows Toolkit),使用起來也是方便。(NEWT的誕生也蠻有意思,見:NEWT的前世今生)
  NEWT
  那麼,對比NEWT,ATC有些什麼特點呢?
  ATC有兩個最吸引人的特點:
  在手機上通過Web介面就可以隨時切換不同的網路環境。
  多個手機可以連線到同一個WIFI下,相互之間模擬的網路環境各不影響。
  可以想象一下這個場景:一群程式猿和測試猴子熱火朝天的在辦公室忙活著,這時有一個叫ATC WiFi的熱點,任何人都可以將手機連線上去,通過Web介面隨意切換到各種不同的網路環境下進行除錯和測試……
  想想都有點小激動呢,接下來就來試用一把,感受一下ATC的威力。
  ATC只能執行在Linux上,所以搭建部署稍顯麻煩一些。本文將介紹在虛擬機器裡如何搭建ATC環境。大致有以下幾個步驟:
  VMWare裝個Ubuntu系統吧(以前我常用VirtualBox,各種相容性問題被坑慘了不敢用了)。
  除非你的機器有無線網路卡,不然找一個USB無線網路卡,用來設定WIFI熱點。
  部署ATC
  Ubuntu中設定WiFi熱點功能,在系統自帶的工具裡可以直接開啟。但是,由於是Ad-hoc模式,Android手機根本搜不到訊號。所以必須設定AP模式才能讓Android手機搜到。我折騰了好一陣,最後發現這篇文章最靠譜:http://my.oschina.net/eechen/blog/227230,照著設定一般就OK了。
  接下來是部署ATC,其實也很簡單,官方文件上寫的也很清楚:https://github.com/facebook/augmented-traffic-control
  首先,必須安裝Python2.7以上版本,然後安裝pip:
  sudo apt-get install python-pip python-dev build-essential)
  sudo pip install --upgrade pip
  然後,使用pip直接安裝好ATC所有元件:
  pip install atc_thrift atcd django-atc-api django-atc-demo-ui django-atc-profile-storage
  接下來部署Django的web工程,提供手機訪問並用來配置和切換網路用的。
  1.使用django-admin生成一個新的django工程:
  django-admin startproject atcui
  cd atcui
  2.修改atcui/settings.py,加入ATC相關的內容:
INSTALLED_APPS = (
...
# Django ATC API
'rest_framework',
'atc_api',
# Django ATC Demo UI
'bootstrap_themes',
'django_static_jquery',
'atc_demo_ui',
# Django ATC Profile Storage
'atc_profile_storage',
)
  3.修改atcui/urls.py,urlpatterns 中加入atc的url頁面:
...
...
from django.views.generic.base import RedirectView
urlpatterns = patterns('',
...
# Django ATC API
url(r'^api/v1/', include('atc_api.urls')),
# Django ATC Demo UI
url(r'^atc_demo_ui/', include('atc_demo_ui.urls')),
# Django ATC profile storage
url(r'^api/v1/profiles/', include('atc_profile_storage.urls')),
url(r'^$', RedirectView.as_view(url='/atc_demo_ui/', permanent=False)),
)4.更新一下資料庫
  python manage.py migrate
  萬事俱備,就差啟動了……
  前面設定WiFI熱點時,你還記得設定的無線網路卡的名字嗎?嗯,就是wlan0,這個很重要。接下來要啟動網路控制的核心元件atcd,需要通過引數指定提供Wifi熱點的內網用的網路卡名字,外網訪問的網路卡名預設是eth0(如果不是也需要通過--atcd-wan指定)
  sudo atcd --atcd-lan wlan0
  然後,啟動Django的工程:
  sudo python manage.py runserver 0.0.0.0:8000
  用手機連線上去試試吧。看看虛擬機器的IP,比如我設定的是192.168.6.1,手機瀏覽器裡訪問:http://192.168.6.1:8000
  NewStart
  在手機的介面裡,你可以分別對網路上行下行進行設定,主要設定的引數有:
  網路頻寬(bandwidth)
  延遲(latency)
  丟包率(packet loss)
  錯包率(corrupted packets)
  亂序率(packets ordering)
  通過設定上面的引數,可以模擬出各種常用的網路環境,比如:2G,3G,4G,WiFi等等,同時也可以模擬一些異常情況,比如訊號很差,延遲很大,丟包率高的情況。具體有哪些場景和引數設定,歡迎大家一起交流交流,下面是Comcast提供的一份引數配置(國外的網路和國內的很不一樣吧,僅供參考,歡迎大家修正和補充)

相關文章