در منظره توسعه نرمافزار مدرن، توسعهدهندگان اغلب با چالش یکپارچهسازی سرویسهای ناهمگون مواجه هستند. چه در حال اتصال سنسور رزبری پای به داشبورد ابری باشید، چه ارکستراسیون میکروسرویسها، یا ساخت یک پایپلاین اتوماسیون قوی برای دستگاههای خانه هوشمند، کدهای تکراری مورد نیاز برای مدیریت درخواستهای HTTP، تجزیه JSON و مدیریت حالت میتواند طاقتفرسا شود. اینجاست که Node-RED درخشش خود را نشان میدهد. Node-RED که بر پایه Node.js ساخته شده است، یک ویرایشگر مبتنی بر مرورگر ارائه میدهد که «به هم سیمکشی» دستگاهها، APIها و سرویسهای آنلاین را آسان میکند و به طور مؤثری مانع ورود به اتوماسیون گردش کار پیچیده را بدون قربانی کردن قدرت کاهش میدهد.
چرا Node-RED برای اتوماسیون گردش کار؟
در هسته خود، Node-RED یک ابزار برنامهنویسی برای به هم سیمکشی دستگاههای سختافزاری، APIها و سرویسهای آنلاین است. این ابزار یک ویرایشگر مبتنی بر مرورگر ارائه میدهد که ایجاد جریانها را با استفاده از طیف وسیعی از گرهها در پالت که بلوکهای سازنده قابل استفاده مجدد را نمایندگی میکنند، آسان میسازد. با این حال، آنچه آن را به ویژه برای توسعهدهندگان متوسط و پیشرفته جذاب میکند، معماری زیربنایی آن است. در حالی که رابط بصری پروتوتایپسازی سریع را تشویق میکند، کل جریان به صورت JSON ذخیره میشود که امکان کنترل نسخه، استفاده مجدد و دستکاری برنامهنویسی را فراهم میآورد.
برخلاف پلتفرمهای کدنویسی کم سنتی که اغلب شما را در اکوسیستم خود قفل میکنند، Node-RED بر روی Node.js اجرا میشود. این بدان معناست که شما به کل مخزن npm دسترسی دارید. اگر یک یکپارچهسازی خاص به عنوان یک گره از پیش ساخته شده وجود نداشته باشد، احتمالاً میتوانید یک ماژول را پیدا کنید یا در عرض چند ثانیه یک تابع سفارشی با استفاده از جاوااسکریپت بنویسید.
مفاهیم اصلی: جریانها، گرهها و پیامها
درک Node-RED نیازمند درک سه مفهوم اساسی است:
- جریانها (Flows): یک جریان مجموعهای از گرهها است که به هم متصل شدهاند تا یک زنجیره منطقی را ایجاد کنند. جریانها به صورت فایلهای JSON ذخیره میشوند که آنها را قابل حمل و به اشتراکگذاری آسان میکند.
- گرهها (Nodes): گرهها بلوکهای فردی در جریان شما هستند. آنها ورودی (رویدادهای محرک)، پردازش (توابع، سوئیچها، پیوندها) و خروجی (ارسال داده به صفحات نمایش، پایگاههای داده یا سایر سرویسها) را نمایندگی میکنند.
- پیامها (Messages): دادههای در حال جریان بین گرهها در یک شیء پیام بستهبندی میشوند. به طور پیشفرض، هر پیام دارای یک ویژگی
payloadاست، اما میتوانید این شیء را با ویژگیهای سفارشی گسترش دهید تا متادیتا را همراه با دادههای خود ارسال کنید.
مثال عملی: ایجاد یک گره تابع سفارشی
یکی از قدرتمندترین ویژگیهای Node-RED توانایی نوشتن منطق جاوااسکریپت سفارشی مستقیماً در داخل یک جریان است. در حالی که صدها گره از پیش ساخته شده برای درخواستهای HTTP، پایگاههای داده SQL و بروکرهای MQTT وجود دارد، گاهی اوقات به منطق تبدیل سفارشی نیاز دارید. گره function به شما امکان میدهد جاوااسکریپتی را که شیء پیام ورودی را دستکاری میکند، تزریق کنید.
برای مثال، تصور کنید که دادههای دما را از یک دستگاه IoT دریافت میکنید، اما سنسور خوانشها را بر حسب فارنهایت ارسال میکند، در حالی که پایگاه داده شما سلسیوس را نیاز دارد. میتوانید از یک گره تابع برای انجام این تبدیل به صورت بیوقفه استفاده کنید.
/**
* تبدیل فارنهایت به سلسیوس
* ورودی msg.payload باید یک عدد باشد
*/
// استخراج مقدار دما از payload
var fahrenheit = msg.payload;
// اعتبارسنجی ورودی
if (typeof fahrenheit !== 'number') {
// اگر payload یک عدد نیست، خطا ایجاد کنید یا null برگردانید
// در اینجا ما صرفاً null را برای نشان دادن دادههای نامعتبر برمیگردانیم
return null;
}
// تبدیل به سلسیوس: C = (F - 32) * 5/9
var celsius = (fahrenheit - 32) * 5/9;
// گرد کردن به دو رقم اعشار برای تمیزی
var roundedCelsius = parseFloat(celsius.toFixed(2));
// ایجاد یک شیء پیام جدید با مقدار تبدیل شده
// ما زمینه پیام اصلی را با کپی کردن آن حفظ میکنیم، اما payload را بهروزرسانی میکنیم
msg.payload = roundedCelsius;
msg.topic = "temperature/conversion";
// پیام جدید را برای ارسال به گره بعدی برگردانید
return msg;
در این مثال، ما به شیء msg دسترسی داریم که به طور خودکار توسط زمان اجرای Node-RED ارائه میشود. ما payload را دستکاری میکنیم و یک ویژگی topic سفارشی اضافه میکنیم. این نشان میدهد که چگونه Node-RED شکاف بین طراحی گردش کار بصری و برنامهنویسی دستوری را پر میکند. شما نیازی ندارید برای نوشتن منطق قوی و بررسی نوع (با دقت) که اتوماسیون شما را تغذیه میکند، از مرورگر خارج شوید.
مقیاسپذیری و استقرار
در حالی که اغلب برای پروژههای IoT مبتدی استفاده میشود، Node-RED آماده تولید است. این ابزار از خوشهسازی پشتیبانی میکند و به شما امکان میدهد چندین نمونه از Node-RED را پشت یک توزیعکننده بار برای در دسترس بودن بالا اجرا کنید. علاوه بر این، از آنجا که جریانها JSON هستند، میتوانید آنها را به کانتینرها، ماشینهای مجازی یا دستگاههای لبه با استفاده از پایپلاینهای CI/CD مستقر کنید. همچنین میتوانید جریانها را به یک مخزن مشترک صادر کنید یا آنها را از پالت جامعه وارد کنید که چرخههای توسعه را به طور قابل توجهی تسریع میکند.
نتیجهگیری
Node-RED فراتر از یک ابزار برای اتصال چراغهای هوشمند است؛ این یک پلتفرم همهمنظور برای اتوماسیون گردش کار است که هوش توسعهدهنده را محترم میشمارد. با ترکیب یک رابط بصری و شهودی با قدرت خام Node.js و جاوااسکریپت، به تیمها اجازه میدهد یکپارچهسازیهای پیچیده را با سرعتی بیسابقه بسازند، مستقر کنند و نگهداری کنند. چه در حال پروتوتایپسازی یک دروازه API جدید باشید و چه در حال ارکستراسیون جریانهای داده در یک محیط IoT، Node-RED انعطافپذیری و کنترلی را که برای تبدیل ایدههای ساده به گردش کارهای خودکار قوی لازم است، فراهم میکند.