聶永的博客

          記錄工作/學習的點點滴滴。

          Tsung筆記之開篇

          前言

          有測試驅動的開發模式,目的在于確保業務層面功能是準確的,每一次新增、修改等動作確保都不會影響到現有功能。功能開發完成了,需要部署到線上,系統能夠承載多大的用戶量呢,這時候就需要借助于性能壓測,也稱之為壓力測試,界定系統能夠承載具體容量上限,從容應對業務的運營需要,擴容或縮容,心中有底。

          工欲善其事,必先利其器。掌握一種壓測工具,并切實應用到實踐環境中,并以此不斷迭代,壓力測試驅動推動所開發后端應用處理性能逐漸完善。

          目前成熟的支持支持TCP、HTTP等連接通道的壓測工具不少,以前接觸過Apache JMeter,后面又接觸過Tsung,因為在實際環境下使用比較多,支持豐富的業務場景定義,并且可擴展性強,因此Tsung強力推薦之。

          為什么要選擇Tsung

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

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

          為什么要壓力測試驅動呢 ?

          軟件/系統架構往往著眼于總體結構,這個可以是一個逐漸完善的過程。這種自我的不斷完善的驅動往往來自于實踐、線上考驗。而壓力測試可以提供一種推動,盡心盡力暴露著架構在性能容量存在的一些不足和缺陷,促使著向著更好的方向發展。

          系統的構建依賴于具體參與執行的人,就算是一群資深的工程師,業務上每一次功能的快速更迭、任何潛在局部修改都會導致影響、拖垮整體性能,這就是人們常說的 ”蝴蝶效應“,牽一發而動全身。

          如何提早感知并且提早修復,這就需要壓力測試的驅動,并且壓力測試應該成為一個常規化的例行行為,日常化的動作。在每一次修改之后,都要過一輪的壓測的碾壓之后,提供當前后端應用處理的性能、容量等具體指標,用于指導后續業務上線業務的開展。

          實際操作上的建議

          在一般互聯網公司,一般線上程序修改后之后,需要經過QA團隊/部門全部功能回歸、校驗之后才能夠上線,往往缺少壓測環節,因為他/她們并不保證系統處理性能和容量是否惡化,系統的性能建立在系統總體的功能上,如何避免在性能上出現”牽一發而動全身“,建議有條件的QA同學/團隊考慮增加性能壓測環節,功能 + 性能雙重回歸,修改影響點清晰、透明化。

          筆記列表

          本系列筆記,基于tsung-1.6.0源碼基礎上分析,運行環境為Linux Centos 6。

          筆記列表:

          1. Tsung筆記之主從模型篇
          2. Tsung筆記之主從資源協調篇
          3. Tsung筆記之壓測端資源限制篇
          4. Tsung筆記之分布式增強跳出SSH羈絆篇
          5. Tsung筆記之IP直連支持篇
          6. Tsung筆記之監控數據收集篇
          7. Tsung筆記之插件編寫篇
          8. Tsung筆記之100萬用戶壓測執行步驟篇
          9. Tsung筆記之IP地址和端口限制突破篇

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

          • 主節點,也稱之為Master Node,指的是運行tsung_controller的應用服務實例,運行tsung啟動應用自動產生“tsung_controller@機器名/IP”節點名稱,一般使用過Erlang的同學會很明白
          • 從節點,即tsung client應用實例,對應 tsung/src/tsung 項目代碼,由tsung_controller主節點控制啟動、關閉、任務分配等

          小結

          參與一個實時性交互強的項目,從一開始單機支撐不夠1萬用戶、平均請求響應時間約900毫秒,到目前混合部署的單機支撐50萬用戶、平均響應時間為16毫秒,這個過程中Tsung不斷的壓測推動著架構逐漸穩定、系統承載容量、QPS優化等完全達標。這是一個壓力測試驅動性能改進的流程,每一步的改進能夠得到正向反饋。

          這一系列筆記,所談核心是Tsung,無論是認知還是改進,最終都是為了理解利器的方方面面,方便著手于實踐環境中,壓測所帶來的能量能夠驅動我們的程序/服務性能提升、穩定運行,進而更好方便我們進行容量規劃、線上部署等。

          posted on 2016-07-22 15:36 nieyong 閱讀(5541) 評論(1)  編輯  收藏 所屬分類: 壓測

          評論

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

          不是碼農,覺得太好了  回復  更多評論   

          公告

          所有文章皆為原創,若轉載請標明出處,謝謝~

          新浪微博,歡迎關注:

          導航

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

          統計

          常用鏈接

          留言簿(58)

          隨筆分類(130)

          隨筆檔案(151)

          個人收藏

          最新隨筆

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 崇仁县| 东辽县| 泰顺县| 顺义区| 赫章县| 明水县| 新密市| 天柱县| 仁怀市| 平阳县| 林周县| 无为县| 榕江县| 保定市| 万年县| 武安市| 桦甸市| 姜堰市| 安乡县| 醴陵市| 个旧市| 景洪市| 富宁县| 利川市| 宾阳县| 洛浦县| 宣威市| 家居| 志丹县| 乐业县| 团风县| 南丰县| 高碑店市| 久治县| 益阳市| 固安县| 内乡县| 中卫市| 绥滨县| 高州市| 定西市|