چرا ماژول‌های WebAssembly می‌تواند واحد واقعی جدید محاسبه باشد؟

شکل ۱: ماژول‌های WebAssembly
شکل ۱: ماژول‌های WebAssembly


منتشر‌شده در thenewstack به تاریخ ۲۵ فوریه ۲۰۲۱
لینک منبع : Why WebAssembly Modules Could Be the New de Facto Unit of Compute

ممکن است در طول چند سال گذشته در موردWebAssembly شنیده باشید. به آن «زبان چهارم مرورگر وب» گفته می‌شود، و در حالی‌که این یک راه برای نگاه کردن به آن است، قطعا به کل داستان نزدیک نیست. از آنجا که WebAssembly در واقع یک قالب باینری ندانم‌گرا برای برنامه‌های اجرایی است، صحبت کردن در مورد اینکه در کجا اجرا می‌شود به اندازه آنچه انجام می‌دهد مهم است. در طول یک یا دو سال گذشته، WebAssembly از مرورگر عبور کرده و در حال حاضر نقاط قوت خود را به حوزه‌های دیگر مانند سیستم‌های تعبیه‌شده، IoT، و توسعه سمت سرور ارائه می‌دهد.

من حدود یک سال است که بر روی چارچوبWebAssembly بومی ابر (WebAssembly) کار می‌کنم. و امکاناتی که در اینجا مطرح کردم مرا در مورد آینده اکو‌سیستم بسیار هیجان‌زده کرده است. من هر هفته، با بازشدن مجدد پروژه‌ها و موارد استفاده جالب در همه جا شاهد پیشرفت‌هایی هستم.

کاملا مشخص است که دهه گذشته شاهد تغییر صنعت نرم‌افزار از فلز لخت به ماشین‌های مجازی به کانتینرها بوده است. عصر حاضر اشکال مختلفی از محاسبه ابر برای توجه شما دارد، مانند Kubernetes، انواع مختلف بدون سرور، و بیشتر. این مشکل به پیچیدگی عظیم این راه‌حل‌ها تبدیل شده است - و حتی نیازی به ادغام کاربردهای سمت مشتری در این ترکیب را نیز پوشش نمی‌دهد. WebAssembly چیزی خاص را ممکن می‌سازد، و آن توانایی داشتن ماژول‌های قابل‌استفاده مجدد از کد است که می‌تواند در هر جایی اجرا شود، و می‌تواند برای ساخت یک نرم‌افزار قدرتمند با پیچیدگی کم‌تر ساخته شود.

بیایید اصول WebAssembly را پوشش دهیم؛ این فرمت یک فرمت بایت کد است که می‌تواند یک هدف تلفیقی برای بسیاری از زبان‌ها باشد. این به سادگی به این معنی است که هنگام نوشتن کد با Rust ، C+ + ، سویفت و غیره، می‌توانید به جای کتابخانه باینری یا استاتیک قابل‌اجرا که معمولا تولید می‌شود، WebAssembly را هدف قرار دهید. ماژول حاصل ندانم‌گرا-زبانی است و می‌تواند در محیط‌های مختلفی اجرا شود. ماژول‌های WebAssembly وقتی اجرا می‌شوند به طور کامل نصب می‌شوند، به این معنی که کد شخص ثالث یا حتی به طور بالقوه ناامن نسبت به وابستگی متوسط شما از NPM یا Github کم‌تر ترسناک است. حتی به این معنی است که وقتی ماژول WebAssembly سقوط می‌کند، هیچ چیزی خارج از جعبه شنی‌اش را تحت‌تاثیر قرار نمی‌دهد. WebAssembly می‌تواند به عملکرد نزدیک-بومی دست یابد (منظور من سریع‌تر از JavaScript است)، و تعدادی محیط زمان اجرای مختلف هم در داخل و هم خارج از مرورگر برای انتخاب وجود دارد.

ممکن است مطالعه مقاله آیا استفاده از ابر (Cloud) برای کسب‌وکار شما مناسب است؟ برای شما مفید باشد.

چندین چیز این ماژول‌ها را از دیگر کتابخانه‌های کد متمایز می‌کند. ماژول‌های WebAssembly در زمان اجرا بارگذاری می‌شوند، که به برنامه شما این امکان را می‌دهد که زمان و نحوه بارگذاری یک ماژول را انتخاب کند. همچنین به این معنی است که شما می‌توانید بدون خاتمه دادن به فرآیند یا تدوین مجدد کد خود، ماژول‌های hot-swap را انجام کنید. این می‌تواند زمانی که نسخه‌های جدیدی از کد خود را گسترش می‌دهید، بسیار مفید باشد چون عملکرد را افزایش می‌دهد و استقرار را سریع‌تر می‌کند. این ماژول‌ها همچنین پلتفرم و مستقل از معماری هستند، به این معنی که شما نیازی به ایجاد نسخه‌هایی برای مک، ویندوز، لینوکس، و معماری‌های مختلف پردازشگری که آن‌ها پشتیبانی می‌کنند ندارید. زمان اجرایWebAssembly در این پلتفرم‌ها اجرا خواهد شد و بدون توجه به نحوه تولید آن ماژول را اجرا خواهد کرد.

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

یکی دیگر از جنبه‌های جالب در مورد ماژولWebAssembly، توانایی ترکیب آسان برنامه‌های کاربردی چند زبانی است. امروزه، نیاز به مقدار زیادی کار مهندسی برای ساخت سیستم‌هایی است که بین زبان‌ها کار می‌کنند. الگوی میکروسرویس شامل این است اما اغلب نیاز به نوشتن کتابخانه‌های اساسی و شیم‌ها دارد تا آن را برای توسعه‌دهندگان مقیاس‌پذیر و شهودی کند تا آن را اتخاذ کنند، بدون اینکه از شبکه بالقوه بی‌ثبات استفاده کنیم. ماژول‌های WebAssemble به محض اینکه کامپایل می‌شوند، زبانشناختی هستند، بنابراین اجرای ماژولی که از (Rust) در کنار ماژولی که از (سویفت) در همان فرآیند کامپایل شده ‌است، نه تنها امکان‌پذیر است، بلکه ساده نیز است. من می‌توانم آینده‌ای را تصور کنم که در آن فروشنده SaaS کتابخانه‌هایAPI خود را با استفاده از مجموعه‌ای از ماژول‌های WebAssembly به جای کتابخانه‌های نوشته شده در Go، Rust، NodeJS، Ruby و غیره توزیع می‌کند.

آخرین جنبه WebAssembly که بررسی آن را آغاز کرده‌ام، توانایی تجزیه پویای یک برنامه و اجرای آن در میان لایه‌های متعدد شبکه است. تصور کنید که یک مجموعه از ماژول‌ها را می‌نویسید که در یک برنامه به هم متصل شده‌اند، و پس از مستقر شدن، شروع به اجرا در محیط ابری متمرکز، یک شبکه حاشیه‌ای، و دستگاه‌های کاربران شما می‌کنند، همه بدون این که شما نیاز داشته باشید که انتخاب کنید چه چیزی در هر سطح اجرا می‌شود. من می‌توانم برنامه‌ای را تصور کنم که به طور هوشمندانه ماژول‌های خاصی را بهCDN شما می‌فرستد تا در حالت بدون ابر بیش از ۵۰ ms تاخیر دور از کاربر شما اجرا شود، و حتی برخی از ماژول‌هایی که در مرورگر کاربر بارگیری می‌شوند تا درست در صفحه اجرا شوند. اگر ما ماژولWebAssembly را به عنوان واحد عملی محاسبه در نظر بگیریم، اینها برخی از فرصت‌های فوق‌العاده هیجان‌انگیز موجود برای ما هستند.

در اصل Atmo بخشی از Suborbital ا است که یک خانواده از پروژه‌های منبع باز است که به توسعه‌دهندگان کمک می‌کند تا برنامه‌های کاربردی ابر قدرتمند با استفاده از WebAssembly بسازند. اگر شما علاقمند به استفاده از آنچه WebAssembly ارائه می‌دهد هستید یا می‌خواهید به حل این مشکلات بسیار جذاب کمک کنید، امیدوارم بیایید تا آن را بررسی کنید!

این متن با استفاده از ربات مترجم مقاله برنامه‌نویسی ترجمه شده و به صورت محدود مورد بازبینی انسانی قرار گرفته است.در نتیجه می‌تواند دارای برخی اشکالات ترجمه باشد.
مقالات لینک‌شده در این متن می‌توانند به صورت رایگان با استفاده از مقاله‌خوان ترجمیار به فارسی مطالعه شوند.