Tutorial Uji MQTT Stressing Menggunakan Mosquitto Broker di Ubuntu VM dan Script Python di Windows
ABSTRAK
Penelitian ini membahas analisis kinerja protokol Message Queuing Telemetry Transport (MQTT) dengan fokus pada pengaruh variasi struktur topik terhadap performa sistem dalam jaringan Internet of Things (IoT). MQTT dipilih karena karakteristiknya yang ringan dan efisien dalam komunikasi data antar perangkat dengan keterbatasan sumber daya. Pengujian dilakukan menggunakan arsitektur publisher-subscriber yang dijalankan pada mesin virtual (VM) berbasis Ubuntu dengan broker Mosquitto sebagai server utama. Lingkungan pengujian telah dikonfigurasi sebelumnya dengan instalasi broker, pustaka Python, serta dependensi yang diperlukan. Dalam eksperimen ini, dilakukan variasi tingkat kompleksitas topik, mulai dari struktur sederhana hingga bersarang dengan beberapa level hierarki. Dua skenario pengujian digunakan, yaitu publisher tunggal dan publisher multiproses, untuk mengukur pengaruh jumlah klien dan panjang topik terhadap parameter performa. Metrik yang dianalisis meliputi bandwidth, throughput, latensi rata-rata, serta persentase packet loss yang diukur secara otomatis dan disimpan dalam format CSV untuk analisis lanjutan.
PENDAHULUAN
Penelitian ini terdiri atas dua tahap utama, tahap pertama bertujuan untuk mengukur kemampuan perangkat (dalam hal ini laptop penulis) dalam menangani pertumbuhan jumlah klien secara dinamis. Pada tahap ini, sistem akan menjalankan skrip publisher yang terus menambah jumlah klien secara paralel, sambil memantau kondisi CPU dan RAM. Pengujian ini menghasilkan batas maksimum jumlah klien yang masih dapat diproses oleh perangkat tanpa menyebabkan beban sistem berlebih. Tahap kedua difokuskan pada analisis pengaruh variasi panjang topik MQTT terhadap performa komunikasi. Empat metrik utama yang diamati meliputi bandwidth (bytes/s), throughput (msg/s), latensi (s), dan packet loss (%). Pengujian dilakukan dengan beberapa tingkat jumlah klien, yaitu 100, 200, 300, dan 500, serta empat variasi panjang topik sebagai berikut:
-
Topik pendek dengan 5 karakter,
-
Topik sedang dengan 20 karakter,
-
Topik menengah dengan 50 karakter, dan
-
Topik panjang dengan 100 karakter.
Seluruh eksperimen dilakukan dalam lingkungan Virtual Machine (VM) berbasis Ubuntu, di mana broker Eclipse Mosquitto telah terpasang dan dikonfigurasi sebelumnya. Selain itu, pustaka Python yang diperlukan, termasuk paho-mqtt, telah diinstal bersama dengan modul pendukung lain untuk keperluan pemantauan sumber daya dan pencatatan hasil pengukuran. Hasil pengujian dari kedua tahap ini disimpan secara otomatis dalam format CSV untuk memudahkan analisis kuantitatif lebih lanjut. Penelitian ini diharapkan dapat memberikan wawasan empiris mengenai hubungan antara desain topik MQTT, jumlah klien aktif, dan performa komunikasi sistem. Dengan demikian, hasilnya dapat menjadi acuan dalam perancangan sistem IoT yang efisien dan skalabel.
PRAKTIK TEKNIS
Langkah 1. Pengecekan Koneksi Jaringan antar Sistem Operasi
Sebelum menjalankan pengujian MQTT, hal pertama yang perlu dipastikan adalah bahwa kedua sistem operasi, yaitu Windows (host) dan Ubuntu (guest pada Virtual Machine), berada dalam jaringan yang sama. Kondisi ini sangat penting karena komunikasi antara publisher, subscriber, dan broker hanya dapat terjadi apabila perangkat-perangkat tersebut dapat saling berinteraksi melalui alamat IP yang dapat dijangkau.
Dalam penelitian ini, pengujian dilakukan secara lokal (local area network) dengan konfigurasi jaringan berbasis bridged adapter. Mode ini memungkinkan mesin virtual (Ubuntu) untuk memperoleh alamat IP yang sama seperti perangkat fisik (Windows), sehingga keduanya terhubung langsung ke jaringan lokal yang sama.
1. Mengecek Alamat IP pada Sistem Windows
Hasil eksekusi akan menampilkan konfigurasi jaringan aktif. Cari bagian dengan deskripsi sesuai adaptor jaringan yang digunakan, pada kasus ini adaptor yang digunakan adalah Intel(R) Wireless-AC 9560. Catat nilai dari IPv4 Address, misalnya:
Alamat ini akan digunakan sebagai acuan untuk memastikan koneksi jaringan dan konfigurasi broker MQTT pada sistem Ubuntu.
2. Mengecek Alamat IP pada Sistem Ubuntu (Virtual Machine)
Selanjutnya, lakukan pengecekan pada Ubuntu yang berjalan di dalam Virtual Machine. Buka terminal dan jalankan perintah:
Perintah ini akan menampilkan alamat IP dari mesin Ubuntu. Pastikan alamat yang muncul memiliki prefix jaringan yang sama dengan IP Windows. Sebagai contoh, jika Windows memiliki alamat 192.168.18.198, maka Ubuntu seharusnya berada pada subnet yang sama, misalnya 192.168.18.200.
3. Mengatur Mode Jaringan ke Bridged Adapter
Langkah 2. Pemeriksaan File Konfigurasi (config.py)
Sebelum menjalankan skrip pengujian, langkah berikutnya adalah memastikan bahwa seluruh parameter dasar sistem telah dikonfigurasi dengan benar melalui file config.py. File ini berperan sebagai pusat pengaturan utama yang digunakan oleh semua modul lain, baik publisher, subscriber, maupun metrics analyzer. Dengan demikian, kesalahan pada konfigurasi awal dapat memengaruhi keseluruhan proses pengujian.
Berikut adalah isi lengkap file konfigurasi:
Penjelasan Kode:
-
Inisialisasi LibraryProgram menggunakan tiga pustaka utama:
-
json
untuk melakukan serialisasi data ke format JSON sebelum dikirim melalui broker MQTT, -
time
untuk mencatat waktu pengiriman pesan, dan -
psutil
untuk memantau status sumber daya sistem seperti CPU dan RAM.
-
-
Konfigurasi Broker MQTTDua parameter berikut digunakan untuk mengatur koneksi ke broker:
Nilai
BROKER_HOST
diisi dengan alamat IP dari sistem Ubuntu tempat broker Mosquitto dijalankan, sedangkanBROKER_PORT
menggunakan port default MQTT, yaitu 1883. -
Konfigurasi TopikBagian ini berisi beberapa contoh bentuk hierarki topik yang digunakan untuk pengujian. Variasi panjang topik diatur berdasarkan jumlah karakter yang berbeda, yakni 5, 10, 20, 50, dan 100 karakter. Setiap struktur topik mewakili tingkat kompleksitas berbeda yang akan diuji pengaruhnya terhadap performa komunikasi.
Contoh bentuk topik yang digunakan:
-
TOPIC = "XXXXX"
topik sepanjang 5 karakter -
TOPIC = "XXXXXXXXXX"
topik sepanjang 10 karakter -
TOPIC = "XXXXXXXXXXXXXXXXXXXX"
topik sepanjang 20 karakter -
TOPIC = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
topik sepanjang 50 karakter -
TOPIC = "X" * 100
→ topik sepanjang 100 karakter
Dengan variasi ini, sistem dapat mengamati bagaimana panjang topik memengaruhi latensi, throughput, bandwidth, dan packet loss selama proses publish–subscribe.
-
-
Pemantauan Sumber Daya SistemFungsi berikut digunakan untuk mendapatkan status CPU dan RAM secara real-time:
Fungsi ini mengembalikan tiga parameter:
-
cpu_percent: persentase penggunaan CPU dalam interval 0,5 detik,
-
ram_percent: persentase penggunaan RAM,
-
available_ram_mb: kapasitas RAM yang masih tersedia dalam satuan megabyte.
Selanjutnya, fungsi
is_resource_available()
digunakan untuk menentukan apakah sistem masih memiliki sumber daya yang cukup untuk menambah klien baru. Fungsi ini akan mengembalikan nilai True jika pemakaian CPU dan RAM berada di bawah ambang batas yang ditentukan (default: 80%). -
-
Fungsi generate_payload()Fungsi ini membentuk payload pesan yang akan dikirim oleh setiap publisher. Struktur data dikonversi ke format JSON sebelum dikirim ke broker.
Elemen yang dikirim mencakup:
-
client_id
: identitas klien pengirim, -
id_messege
: nomor pesan yang diurutkan secara bertahap, -
timestamp
: waktu pengiriman pesan (dalam detik sejak epoch), -
data
: konten pesan dengan ukuran tetap (200 karakter).
Dengan struktur ini, setiap pesan yang dikirim memiliki ukuran yang seragam, sehingga hasil pengujian dapat difokuskan pada perbedaan performa akibat panjang topik, bukan ukuran payload.
-
Langkah 3: Menjalankan Script Growth Client Testing
Setelah memastikan file konfigurasi telah disesuaikan dengan alamat broker dan topik MQTT yang digunakan, langkah berikutnya adalah menjalankan script pengujian pertumbuhan klien (growth client testing).
Pengujian ini bertujuan untuk mengetahui kemampuan perangkat (laptop) dalam menangani jumlah klien yang terus meningkat secara paralel, sehingga dapat diketahui kapasitas maksimum sistem sebelum mengalami degradasi performa.
Perintah Eksekusi
Program dapat dijalankan menggunakan perintah berikut di terminal atau command prompt:
Perintah tersebut memanggil modul subscriber
di dalam folder core
, yang akan berfungsi sebagai subscriber utama untuk menerima pesan dari berbagai klien publisher yang dijalankan secara simultan.
Berikut adalah source code lengkap beserta fungsi utamanya:
Penjelasan Fungsi Utama
-
Inisialisasi Broker dan Direktori Hasil
-
Script akan membuat folder hasil (
result/sample1
) untuk menyimpan file log (logs.csv
) dan grafik (plot.png
).
-
-
Fungsi
on_connect()
-
Menjalin koneksi dengan broker MQTT dan melakukan subscribe ke topik yang telah ditentukan di file
config/config.py
.
-
-
Fungsi
on_message()
-
Menerima dan mendekode setiap pesan yang dikirim oleh klien publisher.
-
Data seperti
timestamp
,client_id
,msg_id
, dan panjang data (data_len
) disimpan dalam file CSV agar dapat dianalisis lebih lanjut.
-
-
Fungsi
generate_plot()
-
Membuat grafik hubungan antara Client ID dan jumlah pesan yang diterima (Counter) untuk menggambarkan performa sistem dalam menerima pesan dari banyak klien secara paralel.
-
-
Fungsi
main()
-
Mengatur jalannya seluruh proses, mulai dari koneksi ke broker, menerima pesan, hingga menghentikan program dan menghasilkan grafik visualisasi.
Langkah 4: Menjalankan Script Publisher1
Setelah script subscriber dijalankan dan siap menerima pesan dari berbagai klien, tahap selanjutnya adalah menjalankan script publisher yang berfungsi mengirimkan data secara dinamis dari sejumlah klien yang terus bertambah. Tujuan pengujian ini adalah untuk mengetahui kemampuan perangkat (laptop) dalam menangani pertumbuhan jumlah klien pengirim pesan secara bersamaan hingga mencapai ambang batas penggunaan sumber daya sistem (CPU dan RAM).
Perintah Eksekusi
Program dijalankan menggunakan perintah berikut:
Perintah ini akan menjalankan modul publisher
yang berfungsi sebagai pengirim pesan dinamis (dynamic publisher manager). Prosesnya akan berjalan paralel menggunakan beberapa proses Python melalui modul multiprocessing
. Berikut adalah source code yang digunakan:
Penjelasan fungsi:
-
publisher_client()
Fungsi ini mendefinisikan satu klien publisher MQTT.-
Setiap klien memiliki
client_id
unik (pub_1
,pub_2
, dst). -
Publisher akan terus menunggu trigger dari fungsi manajer (
run_dynamic_publishers
) untuk mengirim pesan. -
Payload dikirim dalam format JSON yang dihasilkan dari fungsi
generate_payload()
di fileconfig.py
. -
Setelah setiap pengiriman, klien menunggu sinyal berikutnya.
-
-
run_dynamic_publishers()
Fungsi ini bertugas menambah jumlah klien publisher secara bertahap (dynamic spawning).-
Setiap interval (default 3 detik), satu klien baru dibuat dan dijalankan.
-
Setelah setiap penambahan, semua klien yang aktif mengirimkan pesan serentak melalui
trigger_event
. -
Pemantauan CPU dan RAM dilakukan secara real-time.
-
Jika penggunaan CPU atau RAM melebihi 95%, semua proses dihentikan otomatis.
-
-
get_system_status()
(dari config)
Fungsi ini memantau penggunaan sumber daya perangkat (CPU dan RAM) untuk memastikan beban sistem masih dalam batas aman. -
global_msg_id
dan Sinkronisasi-
Value('i', 0)
digunakan untuk menyimpan ID pesan global yang aman digunakan oleh banyak proses. -
Sinkronisasi dilakukan dengan
get_lock()
agar tidak terjadi race condition antar proses publisher.
-
-
Parameter Penting
-
cpu_threshold
danram_threshold
: batas aman maksimal penggunaan sumber daya sebelum semua publisher dihentikan. -
spawn_interval
: jeda waktu antar penambahan klien publisher (default 3 detik).
-
Pengujian ini menghasilkan data:
-
Jumlah maksimum klien publisher yang dapat aktif sebelum sistem mencapai batas sumber daya (CPU/RAM 95%).
-
Performa sistem dalam menanggapi pertumbuhan klien yang dinamis.
-
Stabilitas koneksi antar klien publisher dan broker MQTT.
Data dari pengujian ini akan menjadi dasar penentuan jumlah klien uji (100, 200, 300, 500) yang digunakan pada tahap selanjutnya yaitu pengujian pengaruh variasi topik MQTT terhadap metrik performa bandwidth, latency, throughput, dan efisiensi transmisi data.
Langkah 5: Menjalankan Script Analisis Metrik MQTT
Tahap ini bertujuan untuk mengukur pengaruh variasi panjang topik (topic length) terhadap kinerja protokol Message Queuing Telemetry Transport (MQTT) pada jaringan Internet of Things (IoT).
Pengujian difokuskan pada empat parameter performa utama:
-
Bandwidth, total kapasitas data yang ditransfer per detik.
-
Throughput, jumlah pesan yang diterima per detik.
-
Latency, waktu tunda dari pengiriman hingga penerimaan pesan.
-
Packet Loss, jumlah pesan yang hilang selama proses transmisi.
Pengujian dilakukan untuk lima variasi panjang topik, masing-masing dengan jumlah karakter (5, 10, 20, 50, dan 100 karakter). Setiap variasi topik diuji pada empat level jumlah klien publisher yaitu (100, 200, 300, dan 500 klien), dengan konfigurasi broker, port, dan payload yang sama seperti tahap sebelumnya.
Pengambilan metrik dijalankan melalui perintah berikut:
Perintah ini mengeksekusi modul metrics.py
yang berfungsi sebagai subscriber analisis performa MQTT, mencatat seluruh data pesan yang diterima dari broker untuk kemudian menghitung seluruh metrik performa. Berikut source code lengkap:
Penjelasan program:
1. Proses Koneksi dan Subskripsi
Fungsi on_connect()
memastikan bahwa subscriber berhasil terhubung ke broker MQTT yang telah ditentukan pada file konfigurasi (config.py
) dan otomatis berlangganan ke topik uji saat koneksi berhasil.
2. Pengumpulan Data Pesan
Setiap pesan yang diterima oleh broker akan memicu fungsi on_message()
. Pada tahap ini:
-
Pesan didekode dari format JSON.
-
Dihitung jumlah byte yang diterima (
byte_count
). -
Dicatat waktu penerimaan dan perhitungan latensi (
latencies
). -
Dicatat juga
client_id
danid_messege
untuk mendeteksi pesan yang hilang (packet loss).
3. Perhitungan Metrik Performa
Ketika proses dihentikan (melalui CTRL + C
), fungsi save_results()
dijalankan untuk menghitung metrik-metrik berikut:
-
Durasi transmisi (s)
-
Total pesan diterima
-
Total bytes diterima
-
Bandwidth (bytes/s)
-
Throughput (pesan/s)
-
Latency rata-rata, minimum, dan maksimum (s)
-
Packet Loss (%)
dihitung dari selisih antara jumlah pesan yang diharapkan dan yang benar-benar diterima untuk setiap klien.
Langkah 6: Menjalankan script publisher2
Perintah eksekusi dilakukan melalui terminal menggunakan format:
Setiap klien yang dijalankan akan mengirimkan 10 pesan ke broker MQTT dengan topik yang telah ditentukan dalam file konfigurasi. Kode di atas terdiri dari tiga bagian utama:
-
Inisialisasi Publisher Client
-
Manajemen Level Pengujian
-
Eksekusi Utama (Main)
Seluruh data hasil pengukuran dikumpulkan oleh skrip analysis.metrics
yang dijalankan secara paralel sebelum memulai pengujian. Skrip tersebut menghitung bandwidth, throughput, latency, serta packet loss dari seluruh pesan yang diterima. Data hasil uji kemudian secara otomatis disimpan dalam folder:
dalam format CSV dengan dua file utama:
-
File ringkasan metrik (
metrics_YYYYMMDD_HHMMSS.csv
) -
File detail kehilangan paket (
packet_loss_detail_YYYYMMDD_HHMMSS.csv
)
Hasil ini digunakan untuk melakukan analisis lanjutan terkait pengaruh panjang topik dan jumlah klien terhadap performa komunikasi MQTT.
Komentar
Posting Komentar