Tohum

Playbook توسعه محصول IoT از ابتدا تا انتها – مرحله 2: معماری سیستم

تصویرسازی: حسگرها دستگاه را تغذیه می‌کنند، دستگاه با ابر گفت‌وگو می‌کند و ابر پنل کاربر را سرویس می‌دهد

قبل از ساختن، روی کاغذ برنامه بریزید

بخش قبلی: مرحله 1

تصمیم‌های معماری ارزان‌ترین تصمیم‌ها برای گرفتن و گران‌ترین‌ها برای اشتباه‌کردن‌اند—به همین دلیل مرحله 2 روی کاغذ اتفاق می‌افتد. با نیازمندی‌های محکم از مرحله 1 در دست، این‌جا همان‌جایی است که طرح سطح‌بالای برآورده‌کردنشان را می‌سازید. معماری سیستم را مثل طراحی یک شهر قبل از ساختن هر خانه یا جاده‌ای بدانید: تصمیم می‌گیرید بزرگراه‌ها و پل‌ها کجا بروند قبل از ریختن بتن. در یک پروژه IoT، یعنی طرح کلی سیستم را روی کاغذ یا تخته می‌کشید (کاغذ «دیجیتال» هم جواب می‌دهد) قبل از اینکه هیچ لحیم‌کاری یا کدنویسی اتفاق بیفتد. این مرحله درباره تفکر کلان است—گرفتن همین حالا تصمیم‌های کلیدی که بعداً شکل طراحی را رقم می‌زنند. در پایان مرحله 2، یک نقشه راهنمای روشن برای محصول IoTتان خواهید داشت، و تغییر نقشه‌ها بسیار ارزان‌تر از تغییر بردهای مدار است.

کل سیستم را با یک دیاگرام بلوکی تصور کنید

اولین قدم کشیدن یک دیاگرام بلوکی از کل سیستم است—پلان طبقات یک معمار برای دستگاه IoT و اکوسیستمش. همه اجزای اصلی را اسکیس کنید و نشان دهید چگونه وصل می‌شوند و ارتباط برقرار می‌کنند. یک دیاگرام بلوکی ساده IoT می‌تواند این‌طور باشد:

این زنجیره مسیر داده سرتاسری است. سنسور داده را جمع می‌کند و به MCU می‌رساند. میکروکنترلر ممکن است کمی پردازش کند، بعد با یک رادیوی بی‌سیم (Wi-Fi، Bluetooth، LoRa و غیره) داده را به یک سرور cloud بفرستد. سرور داده را ذخیره یا تحلیل می‌کند و در اختیار یک رابط کاربری می‌گذارد—یک داشبورد وب یا اپ موبایل. با جریان پهن‌شده، همه در تیم می‌توانند همه قطعات را یک‌نگاه ببینند و بفهمند داده چگونه در سیستم سفر می‌کند.

نگران مهارت نقاشی نباشید—جعبه‌ها و فلش‌های ساده کافی است. هدف وضوح است. دیاگرام بلوکی نقشه کلان «شهر» IoT شماست: اجزای اصلی و نحوه تعاملشان را نشان می‌دهد و از سوءتفاهم‌هایی جلوگیری می‌کند مثل اینکه یک نفر فرض کند دستگاه مستقیم با اپ گوشی حرف می‌زند در حالی که قصد شما عبور از یک API ابری بوده. وقتی همه یک نقشه را می‌بینند، کمتر کسی بعداً گم می‌شود.

تصمیم‌های تقسیم‌بندی: چه کسی چه کار می‌کند (و کجا)؟

با سیستم کشیده‌شده، قدم بعدی تقسیم‌بندی است—تصمیم‌گرفتن که کدام مسئولیت کجا زندگی کند. چه کسی چه کار می‌کند: کدام کارها به سخت‌افزار/دستگاه می‌رسد، کدام به firmware و کدام به cloud یا سمت سرور. این تصمیم‌ها روی عملکرد، هزینه، پیچیدگی و امنیت اثر می‌گذارند.

چند مثال از تصمیم‌های تقسیم‌بندی در یک سیستم IoT:

تقسیم‌بندی یک کار تعادلی است: هر بخش از سیستم باید کاری را بکند که در آن بهترین است. یک سنسور کوچک باتری‌دار در جمع‌کردن داده و پردازش سبک خوب است؛ محاسبات سنگین به یک سرور cloud با توان اضافه می‌رسد. برعکس، اگر کاربرد به پاسخ بسیار سریع نیاز دارد یا باید بدون اینترنت کار کند، هوش بیشتری به لبه منتقل می‌شود. پاسخ یک‌اندازه-برای-همه نیست—معاوضه‌ها از نیازمندی‌های مرحله 1 شما می‌آیند.

تکرار روی این انتخاب‌ها کاملاً طبیعی است. ممکن است با «دستگاه ما همه کار می‌کند—پیش‌پردازش، رمزنگاری، تصمیم‌گیری» شروع کنید و بعد بفهمید MCU انتخابی از پس بار کار برنمی‌آید یا حافظه‌اش خیلی کم است. آن بینش ممکن است کارها را به cloud منتقل کند. یا برعکس: پردازشی که برای cloud برنامه‌ریزی شده بود به دستگاه منتقل می‌شود چون تأخیر شبکه نگرانی است. گرفتن این مسائل روی کاغذ بسیار ارزان‌تر از کشفشان بعد از نوشته‌شدن کد یا ساخته‌شدن PCBi است که نمی‌تواند firmware را پشتیبانی کند. وقت بگذارید و مسئولیت‌ها را خوب تقسیم کنید.

انتخاب فناوری: برگزیدن ابزار درست برای هر بخش

با دیاگرام بلوکی و تقسیم‌بندی سر جایشان، نوبت انتخاب فناوری است: تصمیم‌گرفتن درباره فناوری‌ها یا اجزای واقعی برای هر بلوک—یا دست‌کم باریک‌کردن گزینه‌ها. آن را مثل انتخاب مصالح برای هر بخش یک ساختمان بدانید: اسکلت فولادی یا چوبی، دیوار آجری یا بتنی. به زبان IoT، ملاحظات کلیدی شامل:

انتخاب فناوری در مرحله معماری، قطعات را با هم و با نیازمندی‌ها سازگار نگه می‌دارد و بررسی‌های درشت هزینه و امکان را ممکن می‌کند. اگر «احتمالاً» به یک MCU سطح‌بالا و یک رادیوی بردبلند خاص نیاز دارید، می‌توانید عقل‌سنجی کنید که هزینه ترکیبی در بودجه می‌گنجد و قطعات می‌توانند با هم کار کنند (رابط‌های درست؟ پشتیبانی درایور؟). ممکن است کشف کنید یک ماژول رادیویی که دوست دارید فقط با یک خانواده MCU خاص جفت می‌شود یا به یک MCU خارجی نیاز دارد—خوب است حالا بدانید.

توان و اندازه را هم در نظر داشته باشید. یک دستگاه کوچک باتری‌دار (یک پوشیدنی، یک سنسور دورافتاده) ممکن است یک system-on-chip که MCU + رادیو را یکپارچه می‌کند تحمیل کند تا در فضا و توان صرفه‌جویی شود. یک دستگاه بسیار حساس به هزینه ممکن است یک ماژول همه‌در‌یک را ترجیح دهد که سنسور، MCU و رادیو را ترکیب می‌کند. همین مرحله است که این گزینه‌ها را روی کاغذ جغل می‌کنید و می‌بینید کدام پشته بهتر به پروژه می‌نشیند.

تحلیل ریسک و هزینه: دام‌های بالقوه را زود شناسایی کنید

حتی در این مرحله، یک معمار خوب شروع به فهرست‌کردن ریسک‌ها و هزینه‌های چسبیده به طراحی انتخابی می‌کند. علامت‌زدنشان حالا بهتر از کشفشان بعداً است. چیزهایی که باید در نظر گرفت:

یک تحلیل ریسک و هزینه در مرحله 2 یعنی با چشم باز وارد توسعه می‌شوید. اگر پرریسک‌ترین بخش یک الگوریتم یادگیری ماشین سفارشی روی دستگاه است، اول با آن مقابله کنید یا نزدیک پایشش کنید. اگر گران‌ترین جزء یک سنسور خاص است، در بقیه بودجه مراقب باشید. هیچ محصولی بدون ریسک نیست، اما برنامه‌ریزی پیش‌دستانه همان چیزی است که پروژه‌های آرام را از شتاب‌های آخرلحظه‌ای جدا می‌کند.

مستندسازی شفاف معماری

در پایان مرحله معماری، معماری سیستم را مستند کنید تا برای کل تیم قابل فهم و قابل اشتراک باشد. این سند نقشه‌ای می‌شود که همه به آن رجوع می‌کنند، پس باید جایی در دسترس زندگی کند—نه قفل در سر مهندس ارشد.

راه‌های کلیدی ثبت و انتقال معماری:

هدف: هر عضو تیم—از جمله یک تازه‌وارد—بتواند به معماری نگاه کند و سریع به رویدادها مسلط شود. به ذی‌نفعان غیرمهندسی هم کمک می‌کند: مدیران محصول یا مدیران اجرایی شاید کدتان را نخوانند، اما یک دیاگرام سطح‌بالا را می‌توانند بخوانند. مستندسازی خوب معماری شکاف بین ایده‌ها و پیاده‌سازی را پل می‌زند.

«دو بار طراحی کن، یک بار بساز»: با برنامه‌ریزی زودهنگام زمان بخر

در مهندسی شعاری هست: «دو بار طراحی کن، یک بار بساز.» گرفتن و رفع مسائل در یک طراحی روی کاغذ بسیار ارزان‌تر از رفعشان در یک محصول ساخته‌شده است—این کل فلسفه مرحله 2 است. جابه‌جاکردن جعبه‌ها و فلش‌ها در یک دیاگرام بسیار کمتر می‌سوزد تا چاپ مجدد یک PCB یا بازنویسی یک ماژول firmware چون طرح اولیه معیوب از آب درآمده.

از این مرحله استفاده کنید تا کل تیم را زود به یک صفحه بیاورید. معماری میان‌رشته‌ای است: مهندسان سخت‌افزار، توسعه‌دهندگان firmware، مهندسان cloud/backend، مدیران محصول. همه باید در بازبینی صدا داشته باشند، پس بحث را تشویق کنید. یک مهندس cloud ممکن است بگوید: «اگر دستگاه هر خوانش را قبل از فرستادن با timestamp برچسب بزند، سمت سرور من ساده‌تر می‌شود»—درخواست کوچکی است، اگر از اول بدانیدش. یک طراح سخت‌افزار ممکن است اشاره کند: «حالا دو سنسور استفاده می‌کنیم، ولی یک سوم به ما اجازه می‌دهد کیفیت هوا را هم اندازه بگیریم—جایش را نگه داریم؟» بینش‌هایی از این نوع به تنظیم‌های کوچک معماری، یا دست‌کم آماده‌سازی برای گسترش آینده می‌انجامد که وقتی تیم‌ها در انزوا کار می‌کنند هرگز سر نمی‌زند. صاف‌کردن نقاط رابط حالا، بهتر از لحظه «دیگر نمی‌توانیم این را عوض کنیم» بعداً است.

کاملیت اینجا اعتماد می‌سازد. در پایان مرحله 2 باید یک نقشه راهنمای روشن داشته باشید: طراحی سطح‌بالایی که نشان می‌دهد چگونه قصد دارید نیازمندی‌های مرحله 1 را برآورده کنید. مثل نقشه معماری یک ساختمان، هنوز رنگ دیوارها یا دستگیره‌ها را انتخاب نمی‌کند—اما طبقات، درها، پنجره‌ها و چیدمان اتاق‌ها حل‌شده است. به زبان IoT: می‌دانید دستگاه‌ها چه هستند، چگونه وصل می‌شوند، کدام داده کجا جریان دارد و تقریباً کدام فناوری کار را می‌کند.

با آن نقشه در دست، می‌توانید با اعتماد به نفس وارد طراحی جزئیات و پیاده‌سازی شوید. یک نقشه برای سفر IoT ساخته‌اید، پس احتمال گم‌شدنتان بسیار کمتر است. در مرحله 3 و فراتر از آن—ساختن سخت‌افزار، نوشتن کد—پیوسته به این معماری رجوع خواهید کرد. و وقتی تغییرها بیایند (همیشه می‌آیند)، سند معماری را به‌روز کنید تا مرجعی قابل اعتماد بماند.

خلاصه: مرحله 2، معماری سیستم، جایی است که پروژه را برای موفقیت آماده می‌کنید. تیم را هم‌راستا می‌کند، ریسک‌ها را زود آشکار می‌کند و طرحی روشن ارائه می‌دهد. آن را طراحی کردید—شاید دو بار—پس حالا می‌توانید یک بار بسازید، و درست بسازید. نقشه را نزدیک نگه دارید؛ برای بقیه سفر، ستاره شمال شما خواهد بود.