聶永的博客

          記錄工作/學(xué)習(xí)的點(diǎn)點(diǎn)滴滴。

          Tsung筆記之開篇

          前言

          有測(cè)試驅(qū)動(dòng)的開發(fā)模式,目的在于確保業(yè)務(wù)層面功能是準(zhǔn)確的,每一次新增、修改等動(dòng)作確保都不會(huì)影響到現(xiàn)有功能。功能開發(fā)完成了,需要部署到線上,系統(tǒng)能夠承載多大的用戶量呢,這時(shí)候就需要借助于性能壓測(cè),也稱之為壓力測(cè)試,界定系統(tǒng)能夠承載具體容量上限,從容應(yīng)對(duì)業(yè)務(wù)的運(yùn)營(yíng)需要,擴(kuò)容或縮容,心中有底。

          工欲善其事,必先利其器。掌握一種壓測(cè)工具,并切實(shí)應(yīng)用到實(shí)踐環(huán)境中,并以此不斷迭代,壓力測(cè)試驅(qū)動(dòng)推動(dòng)所開發(fā)后端應(yīng)用處理性能逐漸完善。

          目前成熟的支持支持TCP、HTTP等連接通道的壓測(cè)工具不少,以前接觸過Apache JMeter,后面又接觸過Tsung,因?yàn)樵趯?shí)際環(huán)境下使用比較多,支持豐富的業(yè)務(wù)場(chǎng)景定義,并且可擴(kuò)展性強(qiáng),因此Tsung強(qiáng)力推薦之。

          為什么要選擇Tsung

          • 基于Erlang,并發(fā)處理性能好,可以模擬足夠多海量用戶,只要你有足夠多的機(jī)器
          • 受益于Erlang,天然支持分布式,很歡快的運(yùn)行在一個(gè)集群中
          • 支持協(xié)議眾多 WebDAV/WebScoket/MQTT/MySQL/PGSQL/Shell/AQMP/JABBER/XMPP/LDAP 等
          • 傳輸通道支持 TCP/UDP/SSL,更底層支持IPv4/IPv6
          • 支持單機(jī)綁定多個(gè)IP:無論是虛擬IP,還是物理網(wǎng)卡綁定IP,可以突破單機(jī)端口65535的限制,擴(kuò)展盡可能多的網(wǎng)絡(luò)連接出口地址
          • 支持監(jiān)控被壓測(cè)的服務(wù)器,通過Erlang Agent/SNMP/Munin
          • 壓測(cè)細(xì)節(jié)XML可配置,這是一個(gè)完全基于情景的壓力測(cè)試行為清單,依賴于你的想象,呈現(xiàn)完整業(yè)務(wù)的表達(dá)
            • 場(chǎng)景可以是動(dòng)態(tài)的,來自于文件、代碼或者服務(wù)器響應(yīng)可以構(gòu)成下一個(gè)請(qǐng)求的參數(shù),這就是可編程的請(qǐng)求嘛
            • 行為可以混搭,回話可以在不同場(chǎng)景中,按照不同的行為規(guī)范各自平行進(jìn)行
            • 休眠,或暫停機(jī)制,是可以隨機(jī)的,親
            • 壓測(cè)用戶產(chǎn)生方式,動(dòng)態(tài)有序或隨機(jī)

          總之,Tsung是一款開源的高性能分布式壓力測(cè)試工具,支持可編程的情景化測(cè)試方案,要向發(fā)揮它的特性,依賴于人們的想象力和創(chuàng)造性。

          為什么要壓力測(cè)試驅(qū)動(dòng)呢 ?

          軟件/系統(tǒng)架構(gòu)往往著眼于總體結(jié)構(gòu),這個(gè)可以是一個(gè)逐漸完善的過程。這種自我的不斷完善的驅(qū)動(dòng)往往來自于實(shí)踐、線上考驗(yàn)。而壓力測(cè)試可以提供一種推動(dòng),盡心盡力暴露著架構(gòu)在性能容量存在的一些不足和缺陷,促使著向著更好的方向發(fā)展。

          系統(tǒng)的構(gòu)建依賴于具體參與執(zhí)行的人,就算是一群資深的工程師,業(yè)務(wù)上每一次功能的快速更迭、任何潛在局部修改都會(huì)導(dǎo)致影響、拖垮整體性能,這就是人們常說的 ”蝴蝶效應(yīng)“,牽一發(fā)而動(dòng)全身。

          如何提早感知并且提早修復(fù),這就需要壓力測(cè)試的驅(qū)動(dòng),并且壓力測(cè)試應(yīng)該成為一個(gè)常規(guī)化的例行行為,日?;膭?dòng)作。在每一次修改之后,都要過一輪的壓測(cè)的碾壓之后,提供當(dāng)前后端應(yīng)用處理的性能、容量等具體指標(biāo),用于指導(dǎo)后續(xù)業(yè)務(wù)上線業(yè)務(wù)的開展。

          實(shí)際操作上的建議

          在一般互聯(lián)網(wǎng)公司,一般線上程序修改后之后,需要經(jīng)過QA團(tuán)隊(duì)/部門全部功能回歸、校驗(yàn)之后才能夠上線,往往缺少壓測(cè)環(huán)節(jié),因?yàn)樗?她們并不保證系統(tǒng)處理性能和容量是否惡化,系統(tǒng)的性能建立在系統(tǒng)總體的功能上,如何避免在性能上出現(xiàn)”牽一發(fā)而動(dòng)全身“,建議有條件的QA同學(xué)/團(tuán)隊(duì)考慮增加性能壓測(cè)環(huán)節(jié),功能 + 性能雙重回歸,修改影響點(diǎn)清晰、透明化。

          筆記列表

          本系列筆記,基于tsung-1.6.0源碼基礎(chǔ)上分析,運(yùn)行環(huán)境為L(zhǎng)inux Centos 6。

          筆記列表:

          1. Tsung筆記之主從模型篇
          2. Tsung筆記之主從資源協(xié)調(diào)篇
          3. Tsung筆記之壓測(cè)端資源限制篇
          4. Tsung筆記之分布式增強(qiáng)跳出SSH羈絆篇
          5. Tsung筆記之IP直連支持篇
          6. Tsung筆記之監(jiān)控?cái)?shù)據(jù)收集篇
          7. Tsung筆記之插件編寫篇
          8. Tsung筆記之100萬用戶壓測(cè)執(zhí)行步驟篇
          9. Tsung筆記之IP地址和端口限制突破篇

          為了方便理解,一些用詞說明:

          • 主節(jié)點(diǎn),也稱之為Master Node,指的是運(yùn)行tsung_controller的應(yīng)用服務(wù)實(shí)例,運(yùn)行tsung啟動(dòng)應(yīng)用自動(dòng)產(chǎn)生“tsung_controller@機(jī)器名/IP”節(jié)點(diǎn)名稱,一般使用過Erlang的同學(xué)會(huì)很明白
          • 從節(jié)點(diǎn),即tsung client應(yīng)用實(shí)例,對(duì)應(yīng) tsung/src/tsung 項(xiàng)目代碼,由tsung_controller主節(jié)點(diǎn)控制啟動(dòng)、關(guān)閉、任務(wù)分配等

          小結(jié)

          參與一個(gè)實(shí)時(shí)性交互強(qiáng)的項(xiàng)目,從一開始單機(jī)支撐不夠1萬用戶、平均請(qǐng)求響應(yīng)時(shí)間約900毫秒,到目前混合部署的單機(jī)支撐50萬用戶、平均響應(yīng)時(shí)間為16毫秒,這個(gè)過程中Tsung不斷的壓測(cè)推動(dòng)著架構(gòu)逐漸穩(wěn)定、系統(tǒng)承載容量、QPS優(yōu)化等完全達(dá)標(biāo)。這是一個(gè)壓力測(cè)試驅(qū)動(dòng)性能改進(jìn)的流程,每一步的改進(jìn)能夠得到正向反饋。

          這一系列筆記,所談核心是Tsung,無論是認(rèn)知還是改進(jìn),最終都是為了理解利器的方方面面,方便著手于實(shí)踐環(huán)境中,壓測(cè)所帶來的能量能夠驅(qū)動(dòng)我們的程序/服務(wù)性能提升、穩(wěn)定運(yùn)行,進(jìn)而更好方便我們進(jìn)行容量規(guī)劃、線上部署等。

          posted on 2016-07-22 15:36 nieyong 閱讀(5566) 評(píng)論(1)  編輯  收藏 所屬分類: 壓測(cè)

          評(píng)論

          # re: Tsung筆記之開篇 2016-08-04 17:33 盧松松博客

          不是碼農(nóng),覺得太好了  回復(fù)  更多評(píng)論   

          公告

          所有文章皆為原創(chuàng),若轉(zhuǎn)載請(qǐng)標(biāo)明出處,謝謝~

          新浪微博,歡迎關(guān)注:

          導(dǎo)航

          <2016年7月>
          262728293012
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          統(tǒng)計(jì)

          常用鏈接

          留言簿(58)

          隨筆分類(130)

          隨筆檔案(151)

          個(gè)人收藏

          最新隨筆

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 卓资县| 靖西县| 金沙县| 秀山| 隆回县| 台东县| 驻马店市| 林口县| 福鼎市| 开阳县| 聂拉木县| 合作市| 景泰县| 嘉义市| 苗栗市| 水富县| 申扎县| 临澧县| 稷山县| 历史| 雷波县| 渑池县| 霸州市| 弥勒县| 德化县| 白朗县| 灵石县| 南木林县| 南城县| 南溪县| 鄂尔多斯市| 安溪县| 盐边县| 尼勒克县| 南靖县| 炎陵县| 云龙县| 雅江县| 张掖市| 丹巴县| 安龙县|