Qurilma uy routeri orqasida, port yo'naltirish ham, ommaviy manzil ham yo'q, shunga qaramay u konfiguratsiyani bir necha soniya ichida olishi kerak. Hiyla firewall'dagi teshik emas. Bu qurilma tashqariga, o'zi yetib bora oladigan broker tomon ochadigan ulanish, broker esa xabarlarni o'sha o'rnatilgan yo'l bo'ylab qaytaradi. Bu dizaynda odamlarga yoqadigan har bir xususiyat va undagi har bir tuzoq shu teskari burilishdan keladi.

NAT orqali aslida nima o'tadi

Qurilma broker bilan TCP ulanish ochganda, uy routeri xaritalash yaratadi va oqim yashaydigan vaqt davomida uni tirik saqlaydi. O'sha oqimdagi javoblar qurilmaga qaytadi, chunki xaritalash allaqachon mavjud. Broker hech qachon uy tomon hech narsa boshlamaydi, shuning uchun router rad etadigan chaqirilmagan kiruvchi paket yo'q. Bu butun tarmoq dalili, shuning uchun bu yondashuv siz nazorat qilmaydigan tarmoqlarda ishlaydi.

Qurilma ulanishni tirik ushlab turishi yoki qayta o'rnatishi kerak, arxitektura qat'iylashgach bu ishonchlilik savoliga aylanadi.

Broker mavzularni yo'naltiradi, HTTP proxy qilmaydi

MQTT nashr va obuna almashinuvlarini belgilaydi: qurilma o'qishga ruxsat berilgan mavzu filtriga obuna bo'ladi, vakolatli kontroller esa mos mavzuga nashr qiladi. Broker nashrlarni obunalar bilan moslab nusxalarni yetkazadi. U brauzer so'rovi nima ekanini bilmaydi va qurilmaning veb-serveriga HTTP GET yubormaydi. Agar mavjud proshivka faqat HTTP gapiradigan bo'lsa, broker dizayni ilova o'zgarishini yoki ataylab qilingan tarjima komponentini talab qiladi.

Mavzu nomlari ham avtorizatsiya emas. Aksariyat brokerlar har bir mijoz uchun kirishni boshqarish ro'yxatlarini qo'llab-quvvatlaydi, qurilmalar esa bitta global nom maydonini bo'lishish o'rniga o'z nashr va obuna daraxtlari bilan cheklanishi kerak.

Qurilma resurslari TLS shaklini belgilaydi

ESP8266 cheklangan RAM ga ega, TLS qo'l berib ko'rishish esa uning eng qimmat ishi. Arduino yadrosi BearSSL ni aynan shu cheklov uchun yetkazib beradi, CA ni tekshirish va barmoq izini qadash o'rtasidagi tanlov ham xotira izini, ham boshqa nom uchun haqiqiy sertifikatga ega hujumchi nima qila olishini o'zgartiradi. Uyum ruxsat berganda broker CA sini tekshirish kuchliroq variant. Yuk hajmi ham muhim: MQTT mijozi bufer saqlaydi, undan katta xabarlar bufer ataylab oshirilmasa jimgina kesiladi.

Keepalive va soket vaqt chegaralari bir xil byudjetning qismi, chunki o'lik ulanishni hech qachon sezmaydigan mijoz xato haqida xabar bermasdan buyruqlar olishni to'xtatadi.

Tishlaydigan xabar semantikasi

Saqlangan xabar broker tomonidan saqlanadi va keyingi mos obunachilarga yetkaziladi, bu joriy holat uchun ajoyib va bir martalik buyruqlar uchun xavfli: qayta ulanadigan qurilma kechagi buyruqni yangidek olishi mumkin. QoS 1 kamida bir marta yetkazishni kafolatlaydi, shuning uchun nusxalar odatiy va ilova takrorga chidamli bo'lishi kerak, ideal holda u rad eta oladigan identifikator yoki vaqt belgisi bilan. Oxirgi vasiyat qurilma yiqilganda sizga holat signali beradi, lekin faqat ulanish osilib qolmasdan haqiqatan muvaffaqiyatsiz bo'lsa.

Toza sessiya xatti-harakati siz yo'qligingizda broker obunalaringizni saqlaydimi-yo'qmi shuni hal qiladi va bu yerda xato qilish ba'zi qurilmalar har bir qayta ulanishdan keyin birinchi xabarni o'tkazib yuborishining sababidir.

TLS brokergacha bo'lgan qismni himoya qiladi. Bu broker operatoriga qarshi yukning uchdan-uchiga shifrlanishi emas, u sizning u orqali nashr qilganingizning barchasini o'qiy oladi.

Hayot siklini cheklang va uni zararsiz ma'lumotlar bilan sinab ko'ring

Qayta ulanishni qattiq qayta urinish halqasi o'rniga orqaga chekinish bilan rejalashtiring, sessiya doimiy bo'lmasa aniq qayta obuna bo'ling va ulanish natijasini jurnalga yozing, shunda jim oflayn qurilma dalil qoldiradi. Qayta ulanish yo'lini hech narsa qilmaydigan namuna yuklar bilan sinang, chunki buyruq kanalining birinchi ishlab chiqarish sinovi haqiqiy buyruq bo'lmasligi kerak. Keyin eskirgan saqlangan xabar qayta ulanishda nima qilishini tasdiqlang va bu xatti-harakat har bir mavzu uchun maqbulmi-yo'qmi hal qiling.

Shu tarzda qilinganda, dizayn bitta kiruvchi tarmoq talabini olib tashlaydi va qurilma dasturiy ta'minotini, broker siyosatini va xabar semantikasini yashirin taxminlar o'rniga ko'rinadigan ish sifatida qoldiradi.

O'xshash maqolalar