閱讀451 返回首頁    go 阿裏雲 go 技術社區[雲棲]


三步搞定Jmeter壓測DNS

域名係統(英文:Domain Name System,縮寫:DNS)是互聯網的一項服務。它作為將域名和IP地址相互映射的一個分布式數據庫,能夠使人更方便地訪問互聯網,DNS通常使用UDP53端口(也支持TCP53)。除了在公網使用DNS做域名解析之外,在內網環境下,為了支持內部域名解析或者是一些高可用服務時,通常需要自建DNS服務。那麼自建的DNS服務性能如何,則需要在部署生產環境之前進行性能測試。
本文就介紹一種使用Jmeter進行DNS壓測的方法。很多場景下,Jmeter都是用作web服務的壓測工具,得益於插件的支持,Jmeter還可以擴展出很多其他的功能,比如通過UDP Protocol Support插件,能夠模擬發送UDP消息,而DNS服務通常使用的就是UDP協議,構造合適的UDP請求,就可可以用來壓測DNS服務。
整個壓測過程包含三個部分,1、軟件和環境準備;2、壓測腳本構造;3、壓測和結果分析

軟件環境準備

本次壓測基於Jmeter 3.2 和 JDK 8 ,在windows x64環境下生成壓測腳本

基本環境安裝

Jmeter 3.2 下載JDK8 下載

安裝過程不再贅述,安裝完成後,在Jmeter安裝路徑下執行bin/jmeter.bat打開Jmeter,能夠正常打開則表示安裝無誤

安裝插件

插件下載 下載 plugins-manager.jar 然後複製到 lib/ext 目錄下, 並重啟Jmeter

重啟完成後在 選項 下選擇 “Plugins Manager”,進入到插件管理界麵,輸入UDP,勾選UDP Protocol Support,插件管理器會自動安裝對應的插件,安裝完成後重啟Jmeter

壓測腳本構建

首先,新建一個線程組,添加UDP request用於發送請求,Summary Report 用於收集測試信息

然後,選擇UDP request,構建UDP請求信息,包含兩個信息:
1、壓測的DNS服務器和端口,例如本次壓測以114DNS作為測試,則應該填寫114.114.114.114 端口為53

2、UDP 請求的request data信息,此處根據不同的Encode/Decode Class,有不同的方法,這裏介紹最常見的兩種

第一種,通過Wireshark工具獲取,此時Encode/Decode Class設置如下

kg.apc.jmeter.samplers.HexStringUDPDecoder

a、打開Wireshark開始抓包,然後在命令行執行nklookup www.baidu.com

b、停止Wireshark抓包,過濾條件設置為 dns,找到剛才DNS解析的請求報文

c、在報文詳情中右擊”Domain Name System(query)”,然後選擇”Copy => Byptes(Hex Stream)”, 然後把複製到的數據粘貼到jmeter UDP Request的request data中

完成後如圖所示

第二種,通過指定解析DNS的域名和記錄類型,此時Encode/Decode Class設置如下

kg.apc.jmeter.samplers.DNSJavaDecoder

在jmeter UDP Request的request data中按照如下格式填寫信息
www.baidu.com. A IN

完成後如圖所示

壓測和結果分析

DNS服務器有兩個指標比較重要:響應時間和失敗率。
UDP消息是無狀態的,有可能會在網絡傳輸中丟失。如果發生丟失,那麼客戶端就會一直等待,直到超時。因此在測試中,根據業務需求選擇合適的超時時間。

設置合適的並發數和循環次數,然後開始壓測,待測試完成後即可在Summary Report看到結果統計信息,如下圖

小結

1、Jmeter是一款強大的工具,通過其插件功能,能夠拓展其壓測的範圍,基於UDP request,不僅可以測試DNS,還可以測試NTP 等UDP協議的服務。
2、本文主要用於演示壓測過程,實際壓測時根據Jmeter官方建議使用命令行而非GUI

最後更新:2017-09-18 15:03:17

  上一篇:go  雲原生(Cloud Native)- 移動App研發新範式
  下一篇:go  「阿裏巴巴編碼規範(Java版)」認證考試出爐!你考過了嗎?