لینک کوتاه مطلب : https://hsgar.com/?p=3468

WebAssembly در آمازون لامبدا: درس های آموخته شده

در Wasmer اخیراً یک هکاتون داخلی انجام دادیم تا ببینیم میزبانی یک برنامه با اجزای WebAssembly در AWS Lambda چقدر آسان یا دشوار است. ما با هدف ساختن یک پروژه خنده دار با نرم افزار واقعی در پشت آن به دو تیم تقسیم شدیم.

در این مقاله آنچه را که ساختیم و آموخته‌هایم در این مسیر تحلیل می‌کنم.

ارائه ایده‌های بدیع بسیار سخت است، بنابراین چالش پیش‌فرض را به عنوان یک ” تنظیم کردیم.شبکه اجتماعی برای حیوانات خانگی“، یک فرض به اندازه کافی خنده دار اما با برخی الزامات فنی:

  • سایت باید استفاده کند AWS Lambda به عنوان پلت فرم بدون سرور
  • باید باشد اجزای WebAssembly به عنوان عملکرد لامبدا اجرا می شود.
  • فایل‌های Wasm باید در نهایت منتشر و میزبانی شوند wapm.io.

هکاتون محدود به زمان بود و ما مدام با موانع و خطاهای بیشتری نسبت به آنچه در ابتدا پیش بینی می کردیم برخورد کردیم.

یک تیم با موفقیت کدی را برای اجرا بر روی لامبدا دریافت کرد، اما برنامه آنها از نظر ویژگی ها کوتاه آمد. تیم دیگر برخی از ویژگی های Backend را طراحی کردند اما به دلیل مشکلات فنی نتوانستند عملکرد لامبدا را اجرا کنند. در نهایت ما از نتایج راضی بودیم و تصمیم گرفتیم که این دو مفهوم را در یک مفهوم ادغام کنیم و پس از آن یک نسخه کم و بیش قابل ارائه از آن بسازیم.

چیزی که ما ساختیم

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

  • بلوکوچن: https://github.com/pitpet-xyz/blockochen.

    اسباب بازی “بلاک چین”. از آنجایی که واقعاً غیرمتمرکز نیست (ما میزبان یک کارگر آن هستیم)، هیچ مفهومی از استخراج یا توکن وجود ندارد، در اصل فقط یک درخت مرکل در WASM کامپایل شده است. ماژول WASM در حالت زنجیره ای دریافت می کند و بدون توجه به ذخیره سازی آن را خروجی می دهد.

  • زنجیره پتستور لامبدا: https://github.com/pitpet-xyz/petstore_lambda_chain

    ادغام برای استفاده از blockochen.wasm داخل آمازون لامبدا این یک تابع لامبدا است که با Rust نوشته شده است aws Rust sdk. درخواست های JSON را دریافت می کند، راه اندازی می شود blockochen با استفاده از Wasmer و چاپ نتایج به عنوان یک پاسخ HTTP. حالت زنجیره را در آن ذخیره می کند s3 یا روی لامبدا tmpfs.

  • وب پیتپت: https://github.com/pitpet-xyz/pitpet-web

    از آنجایی که پروژه محدود به زمان بود، من تصمیم گرفتم که رابط کاربری وب اپلیکیشن را بر اساس پروژه‌ای که قبلاً شامل مفاهیم ثبت نام کاربران، ارسال داستان و غیره بود، قرار دهم. این یک برنامه جنگو AGPLv3.0 است که به
    https://sic.pm انجمن جمع کننده پیوند مخزن منبع اصلی اینجاست: https://github.com/epilys/sic

درس های آموخته شده

خدمات وب آمازون از نظر گستردگی هزارتویی هستند. من از فایرفاکس برای نیازهای مرور خود استفاده می کنم و به نظر می رسد استفاده از رابط کاربری وب AWS از آن پشتیبانی نمی کند. مجبور شدم کروم را دانلود و نصب کنم تا بتوانم از آن استفاده کنم.

خوب

اکوسیستم ابزارهای کار با AWS فراوان است، اما با غواصی در آن، نمی‌دانید چه چیزی کار می‌کند و چه چیزی نه. SDK های منسوخ شده به عنوان منسوخ علامت گذاری نمی شوند و راهنماهای رسمی آنها هنوز به صورت آنلاین وجود دارد.

  • استفاده کنید cargo-lambda برای ساخت/بسته بندی توابع لامبدا.
  • همیشه از wasm بهینه شده با wasm-opt استفاده کنید. فایل های WASM می توانند بزرگ شوند.
  • استفاده کنید boto3، AWS SDK برای python3.

در بد

وب سایت AWS اطلاعات متراکمی است که برای ساخت موفقیت آمیز چیزی نیاز به آشنایی با فناوری ها و خدمات فروشنده آن دارد. مواجه شدم:

  • خطاهای مات هنگام آپلود نسخه جدید تابع لامبدا: Error: fork/exec /var/task/bootstrap: permission denied (راه حل: بارگذاری مجدد bootstrap.zip دوباره فایل)
  • خطاهای غیرشفاف هنگام تلاش برای ویرایش “نقش” (“نقش” به این صورت است که AWS گروه مجوزها را صدا می کند) تابع: فقط گفت “خطایی رخ داد” و من را به داشبورد نقش هدایت کرد. (بعد از آن متوجه شدم که این فقط با فایرفاکس اتفاق افتاده است.)
  • آپلود بسیار کند -> استقرار-> تست-> گردش کار را تکرار کنید. اگر کد شما عمدتاً AWS API گره خورده است، بنابراین نمی توانید آن را به صورت محلی آزمایش یا توسعه دهید، در سرعت کند AWS گیر کرده اید. و کند است.

زشت

یک گردش کار ناآشنا

  • ساده لوحانه فکر کنیم که یک URL تابع لامبدا یک نقطه پایانی HTTP خواهد بود. در واقع بدون پروتکل است (من فکر می کنم!)، که گیج کننده است و منجر به فرضیات نادرست می شود. در یکی دیگر از سرویس‌های بی‌شمار AWS، عملکرد HTTP API باید اضافه می‌شد و به عملکرد لامبدا اشاره می‌کرد.
  • انتظار یک ماژول کوچک WASI برای کامپایل در هنگام شروع عملکرد، زمان نمی برد. این کار را انجام می دهد. کامپایل از زمان پیش فرض 3s از AWS لامبدا گذشت. عاقلانه تر بود که ماژول را با استفاده از وامر در یک مصنوع اجرایی کامپایل کنید و در عوض آن را اجرا کنید. کامپایل WASM به کد بومی با Wasmer اجرای سریع و بومی را تولید می کند.

ماموریت انجام شد! 🎉

در نهایت، ما برنامه را با موفقیت تکمیل کردیم و قدردانی بیشتری از آنچه توسعه دهندگان و مهندسان DevOps باید روزانه انجام دهند به دست آوردیم. مهمترین درس آموخته شده این است استقرار برنامه های بدون سرور در فضای ابری دشوار است.

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

پاداش: “قوانین بازی” کدگذاری شده در بلاک چین

تمام تعاملات کاربر در pitpet.xyz از طریق مجموعه ای از قوانین که بازی پیپت را تشکیل می دهد، بروید.

  1. شما با ساختن یک داستان حیوان خانگی جدید با عکس حیوان خانگی خود ثبت نام می کنید.
  2. شما باید داستان حیوان خانگی خود را «زنده» نگه دارید و مرتباً با پست‌ها، لایک‌ها و غیره جدید به آن توجه کنید.
  3. اگر زمان بگذرد یا داستان های دیگر حیوانات خانگی فعال تر از داستان شما باشد، داستان حیوان خانگی شما به پایان می رسد و نمی توانید ادامه دهید. تنها انتخاب پس از آن شروع مجدد با یک داستان جدید حیوان خانگی است.

در اینجا نحوه ترجمه قوانین بازی به تعاملات بلاک چین آمده است:

(توجه: همه چیز در مورب عملاً اجرا نشد.)

  • ایجاد یک حساب کاربری یک “تولد” است که حتی در بلاک چین رمزگذاری شده است. این اساساً یک “هش تولد” به شما می دهد که با رمز عبور حساب شما امضا می شود. بنابراین NFT حیوان خانگی شماست.
  • همه تعاملات اجتماعی با یک “هش تولد” هدف مرتبط هستند و در بلاک چین کدگذاری می شوند.
  • تنها راه برای یک صاحب حیوان خانگی برای ایجاد یک رویداد تعاملی برای “هش تولد” خود این است که “پرداخت” را با درمان شود نشانه ها توکن ها به کیف پول حیوان خانگی می روند و تنها پس از مرگ حیوان خانگی قابل بازیابی هستند.
  • الهام گرفتن از بازی کلاسیک تاماگوچی:

میانگین طول عمر تاماگوچی حدود 12 روز است که کمترین آن در سن 7 سالگی و بیشترین آن در سن 25 سالگی است.

  • به طور خودسرانه، ما تعیین می کنیم که اگر هیچ رویداد تعاملی مرتبط با “هش تولد” خاصی در 15 بلوک آخر وجود نداشته باشد، حیوان خانگی مرده است. یا به بیان کمتر بیمارگونه، داستان حیوان خانگی به پایان می رسد. بازیکن می تواند یک رویداد Story End ویژه را انتخاب کند که به آنها امکان دسترسی به توکن های خود را می دهد
  • هر X ساعت، اگر اصلاً هیچ فعالیتی وجود نداشته باشد، ماینرها این فرصت را دارند که یک بلوک “زمان” استخراج کنند که به آنها مقدار کمی توکن تخفیف اهدا می کند. این تنها در صورتی توسط الگوریتم و شبکه پذیرفته می شود که قبلاً مطابق با ساعت سیستم آنها فعالیتی وجود نداشته باشد. بنابراین اگر اکثریت شبکه موافق باشند که حداقل X ساعت گذشته است، یک بلوک “زمان” می تواند استخراج شود. دلیل وجودی: تقلید از گذشت زمان فیزیکی و جلوگیری از رکود زنجیره.
  • سایر کاربران می توانند با اتصال به شبکه بلاک چین در استخراج مشارکت داشته باشند. استخراج موفقیت آمیز یک بلوک مقدار کمی از آن را به شما می دهد درمان شود نشانه ها
  • PitPet شامل یک بازار مبادله رمز در برنامه است. زیرا بدیهی است که حداقل به کاهش 30 درصدی نیاز داریم.



لینک منبع

ارسال یک پاسخ

آدرس ایمیل شما منتشر نخواهد شد.