بنچمارک گرفتن apache و mysql و mosquitto
360
۲ سال پیش
0

بنچمارک گرفتن apache و mysql و mosquitto

همیشه راه اندازی سرور یا سیستم خاصی توی پروژه،قسمت اول از کار بوده و قدم اصلی تست و ازمون این سیستم ها هستش.

مثلا دیتابیس mysql رو میخواید ببینید توی فلان سیستم تا چقدر درخواست جواب میده یا آپاچی چند تا درخواست میتونه قبول کنه.

برا این تست ها یه سری ابزار ها وجود داره که یا توسط سازنده شون ارایه میشه یا برنامه نویسای فعال.

به این روند تست و گرفتن نتیجه میگن benchmark.

ما توی این مقاله بنچمارک mysql که یه دیتابیسه و apache که یه وب سروره و mosquitto هم یه بروکر که با پروتکل mqtt کار میکنه رو کار میکنیم.

فایل های هر کدوم هم جدا پیوست میشه که دانلود کنید.

خوب اول از mysql شروع میکنیم.

 

بنچمارک MySQL

خوشبختانه برای تست mysql،شرکت سازنده ش ابزاری با نام mysqlslap رو خودش ارایه داده که میتونید با این بنچمارک بگیرید.

شما میتونید فایل ها رو از اینجا دانلود کنید و در جایی از سیستمون قرار بدید تا بتونید تست کنید.

خوب حالا این ابزار چطوری کار میکنه؟

کافیه برید command prompt ویندوز و خط فرمان رو ببرید به پوشه ای که دانلود کردید و از حالت فشرده دراورید (منظورم فایل بالاس که پیوست کردم)

بعد دستور mysqlslap رو بنویسید و یه سری پارامتر ها وارد کنید مثل زیر :

mysqlslap -a --concurrency=50 --number-of-queries 10 -uroot -p

توی دستور بالا پارامتر concurreny تعداد کانکشن های کاربری هست که قراره شبیه سازی بشه که من 50 تا زدم

و پارامتر number-of-queries هم تعداد کوئری هایی هست که قراره به دیتابیس جهت شبیه سازی ارسال بشه و پارامتر u- هم برای نام کاربری دیتابیس هستش که اینجا من root دادم و با زدن پارامتر p- از شما رمز عبور کاربری root خواسته میشه و اگه مشکلی نباشه شروع میکنه به شبیه سازی و بنچمارک گرفتن.

نتیجه به صورت زیر خواهد شد :

Average number of seconds to run all queries: 0.203 seconds
Minimum number of seconds to run all queries: 0.203 seconds
Maximum number of seconds to run all queries: 0.203 seconds
Number of clients running queries: 50
Average number of queries per client: 0

نتیجه اول میانگین تعداد ثانیه های سپری شده برای اجرای کل کوئری ها هستش.

نتیجه دوم حداقل ثانیه های سپری شده برای اجرای کوئری هاست.

نتیجه سومی حداکثر مدت زمان اجرای کوئری ها هستش.

نتیجه چهارم هم تعداد کاربرهایی هست که موفق به اجرای کوئری شده است.

نتیجه پنجم هم میانگین تعداد کوئری ها به ازای هر کاربر هستش.

شما میتونید یه سری پارامترها هم بفرستید که چندتاشو میگم:

اگه پارامتر query-- و بدنبالش کوئری مورد نظر رو توی کوتیشن بنویسید فقط اون کوئری رو برای بنچمارک میفرسته.

اگه پارامتر iterations-- رو به همراه عددی وارد کنید به اون تعداد کوئری ها رو تکرار میکنه.

خلاصه زیاده میتونید از اینجا پارامترهای دیگه شو هم ببینید بچه ها.

خوب این یه ابزاریه که خود پشتیبانان Mysql داده و ابزار خوبیه سعی کنید بهش مسلط بشید.

 

بنچمارک Apache

آپاچی یه وب سروره که روی پورت 80 به درخواست های http گوش میده و نتیجه رو برمیگردونه.

این مهمه که بدونید چقدر کاربر میتونن روی فلان سیستم وارد بشن و درخواست بدن و چقدر زمان میره و خلاصه همون بنچمارک خودمون.

برا این هم یه ابزاری خود آپاچی داده که میتونید از اینجا دانلود کنید.

برا استفاده از این ابزار مثل mysql برید به کامند پرامپت ویندوز و داخل پوشه ای که از حالت فشرده خارج کردید بشید و دستور زیر رو وارد کرده و اینتر بزنید:

bin\ab -n 100 -c 10 http://iranapp.org/

خوب من سعی بر ارسال پارامتر به فایل ab در پوشه bin کردم که پارامتر n- تعداد درخواست ها هستش و c- تعداد کاربرها هستش و اون دامین هم ادرسی هست که قراره روش بنچمارک بگیرید.

حتما آخر ادرس / بزارید در غیر این خطا میده.

خوب اگه همه چیز درست باشه نتیجه زیر رو خواهید داشت :

Server Software:        nginx
Server Hostname:        iranapp.org
Server Port:            80                    //پورتی که درخواست روی آن اجرا شده

Document Path:          /
Document Length:        0 bytes

Concurrency Level:      10
Time taken for tests:   17.626 seconds      //مدت زمان سپری شده برای تست
Complete requests:      100                      //تعداد درخواست های موفق
Failed requests:        0                      //پورتی که درخواست روی آن اجرا شده
Non-2xx responses:      100
Total transferred:      21400 bytes    //میزان بایت هایی که ارسال شده
HTML transferred:       0 bytes
Requests per second:    5.67 [#/sec] (mean)   //تعداد درخواست های اجرا شده در هر ثانیه
Time per request:       1762.573 [ms] (mean)
Time per request:       176.257 [ms] (mean, across all concurrent requests)
Transfer rate:          1.19 [Kbytes/sec] received

//زمان های اتصال ها
Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:      137  166 110.5    151    1220
Processing:  150 1441 421.5   1363    2442
Waiting:       150 1003 450.5   1049    2432
Total:            302 1607 434.5   1513    2596

//درصد درخواست های بکار برده شده در زمان
Percentage of the requests served within a certain time (ms)
  50%   1513
  66%   1517
  75%   1533
  80%   1916
  90%   2582
  95%   2589
  98%   2592
  99%   2596
 100%   2596 (longest request)

خوب این به شما یه سری اطلاعات در مورد وب سرور به شما میده و اینکه چه مسیری این بنچمارک اجرا شده.

مورد Time taken for tests مدت زمان سپری شده برای اجرای درخواست رو نشون میده.

مورد Complete requests تعداد درخواست های انجام شده رو میده و Failed requests هم درخواست هایی که خطا داده رو نشون میده.

بقیه رو جلوشون نوشتم میتونید ببینید.

 

بنچمارک Mosquitto

خوب همونطور که میدونید mosquitto یه بروکر هست که تحت پروتکل mqtt،پیام ها رو بین دیوایس ها جابجا میکنه.

mqtt در واقع یه لایه ی پیشرفته تر از سوکت هست که از پهنای باند استفاده میکنه که باید این سیستم هم مورد انلایز قرار بگیره و بنچمارک ش گرفته بشه.

برای اینکار نیاز به نصب golang توی ویندوز هستید که میتونید از اینجا دانلود و نصب کنید.

بعد برید command prompt ویندوزتون و دستور زیر رو برای نصب ابزار مخصوص بنچمارک وارد کنید:

go get github.com/krylovsk/mqtt-benchmark
بعد اینکه نصب شد میتونید با وارد کردن mqtt-benchmark مطمئن بشید که نصب شده یا نه.
دقت کنید باید golang نصب باشه ها.
 
خلاصه با دستور زیر میتونید یه درخواست برای گرفتن بنچمارک به mosquitto بدید.
ببینید این ابزار مخصوص mosquitto نیست ها فقط ادرس بروکر میگیره و بهش پیام میفرسته همین.
mqtt-benchmark --broker tcp://127.0.0.1:12345 --count 100 --size 100 --clients 100 --qos 2 --format text
خوب دستور بالا رو ببینید:
من بجای اینکه بیام یکی یکی توضیحشون بدم توی پایین کل پارامتر ها رو میارم و جلوشون توضیح میدم چطوری استفاده کنید.
 
  -broker
    	broker address example tcp://localhost:1883
  -clients
    	users count
  -count
    	messages count
  -format
    	output format json or text
  -password
    	user password when use password_file
  -qos
    	message qos[0,1,2]
  -size
    	message size according to byte
  -topic
    	topic name
  -username
    	user password when use password_file

خوب اگه با توجه به نیازتون پارامتر ها رو بدید و مشکلی توی مقادیر نباشه،نتیجه ای شبیه به زیر رو به شما نشون میده :
======= CLIENT 27 =======
Ratio:               1 (100/100)
Runtime (s):         16.396
Msg time min (ms):   9.466
Msg time max (ms):   1880.769
Msg time mean (ms):  150.193
Msg time std (ms):   201.884
Bandwidth (msg/sec): 6.099

========= TOTAL (100) =========
Total Ratio:                 1 (10000/10000)
Total Runime (sec):          16.398
Average Runtime (sec):       15.514
Msg time min (ms):           7.766
Msg time max (ms):           2034.076
Msg time mean mean (ms):     140.751
Msg time mean std (ms):      13.695
Average Bandwidth (msg/sec): 6.761
Total Bandwidth (msg/sec):   676.112
خوب اون CLIENT 27 که نوشه به ازای هر کاربر اینو نشون میده که در واقع شما تعدادشون رو توی پارامتر ها دادید.
که مدت زمان انجامش و میزان پهنای باند رو میده و قسمت Total هم تعداد انجام شده ها و پهنای باند و سایر رو میده که امار کلی کاربرا و پیام ها رو میده.
 
این مقاله طبق تجربیات خودم اماده شده امیدوارم بدردتون بخوره.
 
سوالی داشتید میتونید توی کامنت ها بهم ارسال کنید تا جواب بدم.
 

نظر خود را بنویسید...