img

Zetta پلت‌فرم اینترنت اشیاء بر پایه API-First

/
/
/

اینترنت اشیاء یکی از داغ‌ترین مباحث صنعتِ تکنولوژی است. با استفاده از اینترنت اشیاء(IoT)، ما به آسانی می‌توانیم اشیاء مختلف را به یکدیگر وصل کرده، و با آنها تعامل کنیم، همانگونه که اکنون با فن ‌آوری‌های هوشمند امروزی در تعامل هستیم. این فن آوری شیوه‌ی زندگی ما را دست خوش تغییر بسیاری می‌کند. اینترنت اشیاء فرصت های بی شماری را پیشنهاد می‌دهد، اما مخاطراتِ اساسی نیز وجود دارد. در این مقاله، ما نگاهی خواهیم داشت به چگونگیِ استفاده از مزایای Zetta، که یک بسترِ API برای اینترنت اشیاء می‌باشد.

Zetta چیست؟
Zetta یک بستر متن باز برای اینترنت اشیاء می‌باشد، که بر روی آن ما می‌توانیم APIهایی را برای تعامل با دستگاه‌ها، بسازیم. این بستر بر مبنای Node.js ساخته شده است. افرادی که با Node.js آشنایی داشته باشند، می‌توانند به سادگی با Zetta ارتباط برقرار کرده و توسعه با آن را آغاز کنند، اما برای مبتدیان، درکی مقدماتی از Node.js، ضروری می‌باشد.

 

درک بستر Zetta و شناختن ویژگی‌های آن
* Zetta یک بستر متن باز می‌باشد، بنابراین هر کسی می‌تواند از آن بدون پرداخت هزینه‌ای استفاده کند. اگر شما نسبت به Node.js (https://nodejs.org/)، علاقه‌مند هستید، پس شما می‌توانید برای این پروژه‌ی متن باز، مفید واقع شوید. در حال حاضر، جامعه‌ی فعالانِ Zetta کوچک می‌باشد، اما این جامعه، در حال رشد می‌باشد. اساسا، Zetta ابزاری است برای تولید API، که این امکان را برای ما فراهم می‌آورد که میان دستگاه‌ها ارتباط ایجاد کنیم.
* Node.js اساسا یک جاوا اسکریپت سمتِ سرور می‌باشد. توسعه‌دهندگان می‌توانند با استفاده از جاوا‌اسکریپت، دستگاه‌هایی را به عنوان ماشین‌های وضعیت تعریف نمایند. Node.js همچنین میان-بستری(cross-platform) می‌باشد، و انتقال آن به چندین بسترِ ابری، به آسانی امکان پذیر می‌باشد.
* Zetta یک بسترِ API محور می‌باشد. هر درخواستی مبتنی بر API می‌باشد، بنابراین ما می‌توانیم این APIها را برای مقاصدی دیگر مثل ارسال داده، در دیگر بسترهای تحلیل‌گر به کارگیری نماییم.
* Zetta گیرنده‌ها و ارسال کننده‌های وب سوکت‌ها را در معرض جریان رویداد‌های(events) بی درنگ قرار می‌دهد. این مدل از تلفیقِ ابررسانه(Hypermedia) با در جریان گذاریِ وب سوکت‌ها، با نام ابررسانه‌ی واکنشی(Reactive Hypermedia) شناخته می‌شود.
* Zetta تقریبا از پروتکل تمامیِ دستگاه‌ها پشتیبانی می‌کند، و این پروتکل‌ها را به HTTP مربوط می‌سازد. اتصالاتِ میان سرورها نیز دائمی می‌باشند، تا ما بتوانیم از سرویس‌هایی یکپارچه درمیان سرورها در فضای ابری استفاده کنیم.
* ما می‌توانیم در سرورهای Zetta برنامه‌هایی بی وضعیت را بسازیم. برنامه‌ها می‌توانند در جهت اتصال دستگاه‌ها مفید باشند، پرسمان‌های(queries) مختلفی را اجرا کنند و در میان آنها تعامل ایجاد کنند. ما همچنین می‌توانیم پرسمان‌ها و راه‌اندازهایی(triggers) را بنویسیم، که هر وقت اتصال با دستگاهی برقرار شد، با ارسالِ تذکری ما را مطلع سازند.

 

معماریِ Zetta
سرورِ Zetta: سرورِ Zetta اصلی‌ترین قسمتِ Zetta می‌باشد، که زیرمجموعه‌های مختلفی نظیرِ درایورها، پیش‌آهنگان(scouts)، افزونه‌های سرور(server extensions) و برنامه‌ها را در خود جای داده است. یک سرورِ Zetta بر روی یک هاب سخت افزاری همچون BeagleBone Black، Raspberry Pi یا Intel Edison اجرا می‌شود. سرور تعاملات میان تمامیِ زیر مجموعه‌ها را مدیریت کرده، تا بتواند پلی به دستگاه‌ها بزند و APIهایی را بسازد، که توسط آنها مصرف کننده امکان تعامل کردن با این دستگاه‌ها را پیدا کند.
Scoutها: Scoutها یک مکانیسم کشف شدن را برای دستگاه‌های موجود در شبکه و یا برای آنهایی که خواهان منابع سیستم هستند، فراهم می‌کند تا بدین وسیله شناسایی و ارتباط با پروتکل خاصی ممکن گردد. Scoutها به Zetta کمک می‌کنند تا دستگاه‌ها را با توجه به پروتکلِ مخصوصی جست و جو کند. پیش آهنگان همچنین اطلاعات مخصوصی را درباره‌‌ی دستگاه‌ها کسب می‌کنند و این عمل فارغ از این است که آن دستگاه‌ها قبلا با Zetta تماسی داشته‌اند یا خیر. آنها گواهی‌های امنیتی و جزئیات مربوطه را در طی ارتباط برقرار نگاه می‌دارند.
درایورها: درایورها به منظور نمایندگیِ دستگاه‌ها در یک قالب ماشین وضعیت به کار می‌روند. آنها برای مدل سازیِ دستگاه‌ها و تعاملات فیزیکیِ میان دستگاه‌ها استفاده می‌شوند. مدل دستگاه‌ها برای تولید درخواست‌‌های متفاوتِ API به کارگیری می‌شوند
افزونه‌های سرور: اینها برای گسترش قابلیت‌ها مورد استفاده قرار می‌گیرند، و در وضعیت انتقال بی دردسر(pluggable) قرار دارند، و با مدیریت API سر و کار داشته، موارد امنیتی اضافه‌ای را می‌افزایند، و چیزهایی دیگر.
فهرست(registry): یک پایگاه داده برای سرورِ Zetta می‌باشد، که اطلاعاتی را درباره‌ی دستگاه‌های متصل به سرور، در خود ذخیره دارد. این یک لایه‌ی ماندگار می‌باشد.
لینک دادنِ امن: ما می‌توانیم در هنگام ارتباط، تونل‌هایی امن و رمزنگاری شده را در میان سرورهای مختلف پدید آوریم. این کار وظیفه‌ی تنظیمات شبکه و دیوارهای آتش(firewalls) را نیز انجام می‌دهد.
برنامه‌ها: برنامه‌هایی که برای انجام تعاملات گوناگون میان دستگاه‌ها یا گرفتن و پردازش داده‌ها مورد استفاده قرار می‌گیرند، با جاوا اسکریپت پدید آمده اند. برنامه‌ها می‌توانند بر مبنای جریان‌های حسگرها یا تغییرات رخ داده در دستگاه‌‎ها ساخته شوند. آنها می‌توانند به منظور ردگیریِ گونه‌‌های معینی از رویدادها که در سیستم رخ می‌دهند، مورد استفاده قرار گیرند.

 

گسترشِ Zetta
اکنون به مقوله‌ی گسترش Zetta می‌پردازیم.
۱- سرورِ Zetta بر روی یک هاب سخت افزاری، مثلا: Raspberry Pi، Intel Edison، یا BeagleBone Black اجرا می‌شود.
۲- هاب به دستگاه‌ها متصل بوده، و این دستگاه‌ها به واسطه‌ی HTTP به پروتکل‌های خاصی که در گسترش Zetta به کار رفته‌اند متصل شده، و اطلاعات را ارسال و دریافت می‌کنند.
۳- سرور مشابه دیگری وجود دارد که در فضای ابری اجرا شده، و بسته‌ی Node.js آن، شبیهِ Node.js سرورِ نصب شده بر روی هاب می‌باشد. این دو سرور به یکدیگر متصل می‌باشند.
۴- Zetta در رابط کاربریِ فضای ابری، یک API را برای مصرف کنندگان فراهم می‌کند، تا آنها از آن بهره گیرند.
ملزوماتِ سخت افزاری: Zetta با حدود ۶ دستگاه در ازای هر هاب، کار می‌کند، که وضعیت ایده‌آل توصیه شده از جانب توسعه دهندگان می‌باشد. ملزومات سخت افزاری بستگی به تعداد دستگاه‌ها، بار هر دستگاه و نوع داده‌ای که در میان آنها در جریان است، می‌باشد. حداقل سخت افزار لازم، ۵۰۰MHz CPU، ۵۰۰MB رم، و فضای ذخیره‌سازی معادل یک، تا دو گیگابایت می‌باشد. Zetta از تمامیِ سیستم‌عامل‌ها، از ۳۲ بیتی، تا ۶۴ بیتی را پشتیبانی می‌کند.

 

نصب Zetta و پروژه‌ی نمایشی
اکنون نگاهی به نصب Zetta خواهیم داشت، و پروژه‌ی ‘Hello Word’ را به عنوان نمونه بررسی خواهیم کرد. قبل از راه‌اندازیِ Zetta، مختصری به با Node.js آشنا خواهیم شد.

 

Node.js
Node.js جهت ایجاد برنامه‌هایی سریع‌تر و مقیاس‌پذیر، بر روی جاوااسکریپتِ زمانِ اجرایِ کروم ساخته شده است. Node.js محبوب بوده و برای برنامه‌های بی درنگی که در فضای سیستم‌های توزیع شده اجرا می‌شوند بسیار بهینه می‌باشد. Node.js اساسا یک جاوا اسکریپت سمتِ سرور می‌باشد.
به سایت https://nodejs.org مراجعه کنید و از قسمت دانلودها، فایل نصب کننده‌ی مناسب سیستم عامل خود را انتخاب کنید. جزییات بیشترِ ساخت پروژه‌های Node.js را در گام‎‌های بعدی خواهید دید.

 

نصب Zetta
برای نصب Zetta، اولین مورد لازم Node.js می‌باشد. همان گونه که ذکر شد، نصب کننده‌ی Node.js را بر روی سیستم خود دانلود کنید. این فایل نصب کننده، هر دوی Node.js و npm(node package manager) را نصب خواهد کرد. پس لازم نیست که چیزی را به صورت مجزا نصب کنیم، فایلی را که دانلود کرده‌ایم، یک بسته‌ی کامل می‌باشد. برای روئت نسخه‌ها می‌توانیم از فرمان‌های مشخص در شکل ۳ استفاده کنیم.

 

ساختن پروژه‌ی Zetta
۱- یک پوشه‌ی جدید برای ذخیره‌ی پروژه بسازید، و نام آن را به عنوان مثال، demo-zetta بگذارید.
۲- اکنون با استفاده از فرمان cd، به پوشه‌ی مذکور بروید، یعنی بدین صورت:

cd demo-zetta

۳- برای ایجاد یک پروژه‌ی Node.js جدید، از این فرمان استفاده کنید:

npm init

۴- در مورد اطلاعات پایه‌ایِ پروژه از شما سوال می‌شود. به صورت پیش‌فرض، مقدار با فشردن Enter توسط شما انتخاب می‌گردد. اگر شما قصد تغییر مقدار را داشته باشید، این کار را انجام داده، و Enter چندین دفعه فشرده، تا مراحل نصب به پایان برسد. بدین ترتیب یک فایل package.json ساخته خواهد، که شامل فرا داده‌هایی درباره‌ی پروژه و متعلقات آن می‌باشد.
۵- اکنون ما ماژول Zetta Node.js را نصب خواهیم کرد. اینجا –save ، Zetta را به لیست متعلقاتِ package.json می‌افزاید.

Npm install zetta –save

بعد از انجام تمامیِ این مراحل، ما یک پروژه‌ی Zetta ابتدایی داریم، که شامل یک فایل package.json، و یک پوشه‌ی node_modules می‌شود. گام بعدی پیکربندیِ سرورِ Zetta می‌باشد.

 

پیکربندیِ سرورِ Zetta
ما می‌توانیم سرور Zetta را به صورت محلی، و به عنوان هابِ Zetta نصب کنیم، و یا اینکه سرور را بر روی فضای ابری نصب نماییم. امکان پیوند دادن میان این دو نوع سرور وجود دارد، تا امکان دسترسی فارغ از مکان، پدید آید. ایجا به دلیل اینکه قصدمان نمایش قابلیت‌های Zetta می‌باشد، آن را بصورت محلی نصب خواهیم کرد.

۱- به پوشه‌ی demo-zetta رفته
۲- یک فایل جدید به نام index.js ایجاد بسازید، و کدهایی را که در زیر می‌بینید را در آن کپی کنید:

Var zetta = require(‘zetta’);
Zetta()
.name(‘Zetta Demo’)
.listen(1337, function() {
Console.log(‘Zatta is running at
http://127.0.0.1:1337’);
});

۳- اکنون این فایل را ذخیره کرده، و سپس ببندید.
بعد از انجام این مراحل، ما یک هاب سرور ابتداییِ Zetta در اختیار خود داریم.
توجه: صفحه‌ی چهارم مقاله، شامل دو شکل می‌باشد، که زیرنویس آنها را اینجا نگاشته‌ام.

 

راه انداختنِ سرور
در پوشه‌ی demo-zetta، فرمان زیر را وارد کنید:

node index.js

شکل ۶ حاصل فرمان بالا را نشان داده است، که گویای وضعیت یک سرور در حال کار می‌باشد.

 

فراخواندنِ Zetta API
حالا Zetta API را فرا می‌خوانیم. برای این منظور بایستی URL روتِ سرور را درخواست کنیم. اینجا می‌توانیم از فرمان curl، با http://127.0.0.1:1337 استفاده کنیم، و یا از هر ابزارِ گیرنده‌ی REST دیگری. من از گیرنده‌ی (Client) Rest Web Service استفاده می‌کنم. من لینک دانلود را در قسمت منابع، در انتهای مقاله ذکر کرده‌ام. در قسمتِ URL گیرنده‌ی REST، http://127.0.0.1:1337 را وارد کرده، و درخواست را اعلام کنید. حالا، در قسمت پاسخ (formatted)، شما می‌توانید نتیجه را ببینید(شکل شماره ۷ را نگاه کنید). این نتیجه را جهت کسب اطلاعات بیشتر مورد بررسی قرار دهید.
سرورِ Zetta یک شیءِ JSON را باز می‌گرداند، که کلاس روتِ API را تشریح می‌کند. پاسخ دریافتی، بازگو کننده‌ی وضعیت کنونیِ API بوده، و با منابع ارائه شده توسط API پیوند ایجاد می‌کند. این API، یک API ابتدایی می‌باشد، که چون ما هیچگونه دستگاهی را متصل نکرده‌ایم، قاعدتا کار خاصی را انجام نمی‌دهد. به محض اینکه ما دستگاه‌ها را اضافه کنیم، API به ما اطلاعات بیشتری را خواهد داد.
Zetta API از تعریف فرارسانه‌ی (hypermedia) Siren پیروی می‌کند. برای کسب اطلاعات بیشتر در رابطه با این موضوع، شما می‌توانید به

https://github.com/kevinswiber/siren

سر بزنید.
Zetta API یک ویژگیِ درون ساخت از Zetta می‌باشد، که به صورت اتوماتیک برای دستگاه‌ها API تولید می‌کند. ما می‌توانیم این API ها را به فضای ابری انتقال دهیم، که به هر کاربرِ معتبری این امکان را می‌دهد، تا با این دستگاه‌ها از هر جایی ارتباط برقرار کند. اساس هر چیزی API می‌باشد. تمامیِ اطلاعات در فرمت JASON ذخیره‌سازی شده‌اند، بنابراین ما می‌توانیم از این اطلاعات در بسترهای گوناگونی استفاده کرده، و از آنها بره برداری نماییم. ما می‌توانیم از لینک
http://localhost:1337/servers/Zetta%20Demo
برای چک کردنِ پاسخِ API مربوط به سرورِ آزمایشیِ Zetta استفاده کنیم.

 

منابع

[۱] Node.js official
website: https://nodejs.org
[۲] Zetta official
website: http://www.zettajs.org/
[۳] Rest Web service client installation link: https://chrome.
google.com/webstore/detail/rest-web-service-client
[۴] GitHub link for Zetta:
https://github.com/zettajs/zetta/wiki

نظر بدهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

It is main inner container footer text