لاراول در سالهای اخیر توجه زیادی را به خود جلب کرده است، اگرچه در نظر صاحبان محصولات برای برنامههای کاربردی وب در مقیاس کوچک جذاب بوده است. با این حال، توسعه یک برنامه کاربردی در مقیاس بزرگ با لاراول هنوز مانند یک مهره سخت به نظر می رسد. در این مقاله، ما آخرین نسخه اضافه شده به فریمورک لاراول، Laravel Octane، و buzz Octane به مقیاس برنامه های Laravel را در سراسر بازار ایجاد کرده است تا شکاف مقیاس پذیری لاراول را که توسط صاحبان محصولات تجربه شده است، پر کند.
لاراول دارای یک سینتکس ساده و مناسب است که به توسعه دهندگان اجازه می دهد تا توسعه برنامه های وب خود را آسان تر کنند. تنها ایرادی که باعث شد لاراول در همه زمینه ای کمبود داشته باشد، مقیاس پذیری است، به همین دلیل لاراول در میان برترین فریمورک های ترجیحی در میان توسعه دهندگان قرار ندارد. پس از معرفی Octane، این تصور کمی به نفع لاراول و جامعه آن تغییر کرد. اما، قبل از اینکه به موضوع برنامه های اکتان به لاراول برویم. اجازه دهید ابتدا بفهمیم لاراول اکتان چیست و چگونه کار می کند.
لاراول اکتان چیست؟
Laravel Octane یک پکیج منبع باز است که توسط Taylor Otwell در Laracon Online Talk معرفی شده است و تاریخ انتشار آن در 12 مه 2021 است. این پکیج به برنامه Laravel باعث بهبود کاریی می کند و از وب سرور Swoole و RoadRunner برای کمک به بهبود عملکرد استفاده می کند. با اولین درخواست مقداردهی اولیه میشود، در حافظه ذخیره میشود و در درخواستهای بعدی دوباره راهاندازی نمیشود. دارای 3.5k ستاره و 242 فورک در GitHub است.
ویژگی های کلیدی اکتان
ویژگی های کلیدی Octane شامل چندین ویژگی است که به آن اجازه می دهد عملکرد بهتری نسبت به لاراول سنتی ارائه دهد. در زیر به چند مورد از این ویژگی ها اشاره شده است:
این برنامه شما را بسیار سریع و کارآمد می کند
در مقایسه با برنامه های معمولی لاراول در منابع صرفه جویی می کند.
لاراول اکتان چگونه کار می کند؟
Octane Laravel بر روی Laravel سنتی و PHP نسخه 8.1 و بالاتر ساخته شده است. این یک زبان مجزا نیست، اما افزونه ای به لاراول استاندارد است. Octane از طریق Swoole و RoadRunner روی سرورهای خود کار می کند، که Apache و Nginx سنتی باید برای ترافیک ورودی هدایت شوند.
اکتان Swoole
این یک کیت توسعه نرم افزار است که به صاحبان محصول اجازه می دهد تا برنامه های کاربردی وب کارآمد و مقیاس پذیر ایجاد کنند. Open Swoole انشعابی از فریمورک Swoole است که در اواخر سال 2021 در رابطه با درگیری های داخلی در جامعه توسعه دهندگان swoole آغاز شد.
اکتان RoadRunner
این یک سرور برنامه کاربردی PHP منبع باز، با کارایی بالا و قابل سرویس است که در جایگزینی تنظیمات سنتی Nginx موثر و کارآمد است و عملکرد و انعطاف پذیری بهتری را ارائه می دهد.
همچنین میتوانیم اشاره کنیم که اگرچه Swoole و RoadRunner هنوز از پردازشهای worker برای همه درخواستها استفاده میکنند، اما آنها فقط اولین درخواست را برای بوت کردن فریمورک (ظرفیتهای وابستگی) ارائه میکنند و بقیه از نسخه بوت استرپ فریمورک هستند. این در مجموع باعث می شود که برنامه شما نسبت به برنامه فعلی شما سریع عمل کند.
اکتان لاراول با اولین درخواست فریم ورک بوت استرپ لاراول را در رم می گیرد. پس از آن، تمام درخواست ها به جای خواندن کل فایل ها از هارد دیسک و بوت استرپ مجدد فریم ورک، از فریم ورک بوت استرپ شده قبلی از رم استفاده می کنند و برنامه لاراول را سریعتر کرده و عملکرد آن را تا حد قابل توجهی بهبود می بخشد.
نحوه نصب لاراول Octane
بعد از نصب لاراول پکیج زیر را نصب کنید:
composer require laravel/octane
بعد از نصب حال باید octane را باید به پروژه اضافه کنیم:
php artisan octane:install
بعد از نصب، باید تنظیمات Octane را در پروژهی خود تعیین کنید. ابتدا فایل config/octane.php
را باز کنید و تنظیمات مربوط به Octane را تغییر دهید. این تنظیمات شامل مواردی مانند درگاههای شناسایی شده توسط Octane و تعداد فرآیندها میشود.
نحوه اجرای لاراول octane
برای اجرای octane دستور زیر را وارد کنید:
php artisan octane:start
لاراول با آپاچی در مقابل معیارهای اکتان لاراول
به گفته خالق لاراول، تیلور اوتول، پس از معرفی آپاچی و اکتان، تقریبا هیچ الزامی برای انتخاب لومن برای پروژه های جدید وجود ندارد. همانطور که می دانیم Lumen یک میکرو فریمورک مبتنی بر لاراول است که عمداً از چند کامپوننت عاری است و باعث می شود سریع باشد. همچنین، استفاده از Laravel Octane به عنوان سرور آن، گزینه سریع بهتری نسبت به Lumen است. برای درک بهتر آن، اجازه دهید به چند معیار نگاه کنیم.
در این بنچمارک، ما در مجموع سه حالت Laravel Octane در مقابل Laravel Apache Web Server در مقابل Laravel in-built server را انتخاب کردیم:
لاراول با اکتان
لاراول با وب سرور آپاچی
لاراول با سرور داخلی خود
در این بنچمارک، از ابزار wrk با پیکربندی زیر استفاده کردیم:
wrk -tl -c50 URL
اولین گواهی بر روی HTML Just Hello World انجام می شود و نتایجی که دریافت کرده ایم به شرح زیر است:
Mode | Requests Handled in 10-Seconds | Requests Per Second (RPS) |
Laravel with Octane | 2667 | 266 rps |
Laravel with Apache | 1210 | 121 rps |
Laravel with its in-built Server | 705 | 70 rps |
این معیارهای معیار اکتان لاراول کافی است تا به شما بینشی بدهد که اکتان لاراول از نظر عملکرد بسیار سریعتر از Apache-Server Laravel سنتی است.
چرا برنامه لاراول خود را با اکتان مقیاس کنید؟
اکتان داده ها و آبجکت های شما را در حافظه می گیرد که به بهبود عملکرد برنامه لاراول شما تا 30 درصد کمک می کند. این بهبود در عملکرد به دلیل حذف خواندن دیسک، فورکهای پردازش و یک سری موارد مختلف دیگر مشاهده میشود که هر زمان که فریمورک در هر درخواست بوت میشود، عمل میکند، که به برنامه لاراول اجازه میدهد هزاران اتصال را به سرعت مدیریت کند و در نتیجه کمک میکند. افزایش ترافیک یا نیاز به در دسترس بودن زیاد. همچنین، این یک روش مولد است که آن هم با کمی هزینه می باشد.
علاوه بر این، تغییر جزئی یا بدون تغییر در پایگاه کد تحت شرایط خاص مورد نیاز است. اما این به نحوه ساختار برنامه شما مربوط می شود.
قبل از مقیاسبندی برنامه لاراول با اکتان (پیشنیازها) به دنبال چه چیزی باشید!
Octane می تواند عملکرد توسعه برنامه وب شما را تا حد زیادی بهبود بخشد، اما این بدان معنا نیست که به اندازه کافی قادر به بهبود عملکرد برنامه وب شما و ارائه آزادی مقیاس برای شما است.
این شامل پیش نیازهایی مانند PHP نسخه 8.1 و پذیرش کنوانسیون برنامه نویسی stateful است. بنابراین، قبل از اینکه استفاده از Octane را نهایی کنید، اولین و مهمترین مرحله این است که نسخه PHP خود را به روز کرده و آن را نصب کنید. اگرچه کار ساده ای به نظر می رسد، اما مشکل جدی این است که وب سایت های متعددی که روی لاراول کار می کنند از نسخه قدیمی لاراول استفاده می کنند که از Octane پشتیبانی نمی کند و از این رو باید با آخرین نسخه لاراول به روز شود.
همچنین، بسیاری از صاحبان محصولات، خواه با تجربه یا تازهتر، با فریمورک stateful آشنا نیستند، که مجدداً نیاز به تلاش برای درک آن قبل از نهایی کردن اجرای Laravel Octane در برنامه وب شما برای مقیاسبندی دارد.
سایر عوامل ضروری
علاوه بر پیش نیازهای ذکر شده در بالا، چند فاکتور دیگر نیز باید برای ساخت یک برنامه وب مقیاس پذیر در نظر گرفته شود. بیایید به آن عواملی که در زیر آورده شده است نگاه کنیم:
مفاهیم Refactoring
برای برنامههایی که از حالت جلسه یا چند نوع میدلور استفاده میکنند، برای استفاده از Octane، برخی تغییرات قبلی در کد مورد نیاز است. همچنین، باید برای جلسات مبتنی بر Swoole پشتیبانی اضافه کنید و میدلور هایی را که با Swoole سازگار نیستند حذف کنید.
بقیه تغییراتی که باید انجام شوند شامل Dependency Injection Container است. برای جزئیات بیشتر در مورد نحوه انجام آن می توانید به مستندات رسمی لاراول مراجعه کنید.
مدیریت تغییرات کد
لاراول سنتی از شما میخواهد که هر زمان که تغییری ایجاد میشود، کل نمونه برنامه لاراول را شروع یا متوقف کنید. با این حال، بر خلاف این، با Octane، شما یک روش راحت برای نظارت بر پایگاه کد خود به صورت خودکار و راه اندازی مجدد سرور Octane خود بدون هیچ گونه مداخله دستی دریافت می کنید، که به شما امکان می دهد با تغییر کد در یک نمونه یا در یک مکان، پیشرفت ها را به راحتی انجام دهید. هر بار که پایگاه کد بهروزرسانی میشود، کل برنامه را راهاندازی مجدد کنید.
آیا گزینه های دیگری برای مقیاس بندی برنامه های لاراول وجود دارد؟
بله، همیشه راه حل دیگری برای یک مشکل وجود دارد. اگرچه Laravel Octane ابزاری عالی برای حل مسئله مقیاسگذاری در برنامه سنتی لاراول است، اما هنوز تنها گزینه نیست. بسیاری از گزینه های دیگر می توانند به نیازهای مقیاس بندی شما کمک کنند. اجازه دهید نگاهی به چند مورد از آنها بیندازیم:
مقیاس بندی افقی
اولین مورد، مقیاس بندی افقی است، روشی ساده و در عین حال کم توصیه برای مقیاس کردن برنامه لاراول شما. دلیل این امر این است که اگرچه کارآمد است، اما با افزایش هزینههای جاری و با مهاجرت به سرور دیگری، پیچیدهتر و گرانتر میشود. علاوه بر این، هنوز هم یک راه حل محدود است زیرا نمی توانید با این تنظیمات بر اساس تقاضا مقیاس کنید.
تعادل بار (با AWS یا بدون AWS)
برای مقیاسبندی برنامه Laravel خود در AWS، میتوانید بهطور خودکار برنامهها را تا حد محدودی برای برنامههایی با پایگاه داده MySQL یکسان مقیاسبندی کنید. این سرورها پس از آن از یک آمازون RDS یا پایگاه داده رابطه ای آمازون استفاده می کنند.
اگرچه به نظر می رسد این یک گزینه مناسب برای مقیاس بندی در مقایسه با مقیاس افقی است، هزینه های پنهان موجود در اینجا شفاف نیستند. همچنین اثر کمتری نسبت به اکتان لاراول دارد. با این حال، مزیت قابل توجه این است که به شما امکان می دهد بدون هیچ تغییری در پایگاه کد موجود خود، مانند Laravel Octane، مقیاس بندی کنید.
Vapor و اکتان لاراول
Laravel Vapor یک پلتفرم استقرار بدون سرور با مقیاس خودکار برای لاراول است. Vapor امکان مقیاس پذیری و سادگی سرورهای بدون سرور را فراهم می کند. هنگامی که با Octane ترکیب می شود، ترکیب Laravel Octane Vapor مقیاس خودکار و زمان بارگذاری سریعتر را در هر مقیاسی ارائه می دهد. با این حال، برای درک آن، حتی بیشتر، اجازه دهید مثالی از اسناد رسمی لاراول بگیریم.
پروژه Vapor در منطقه us-west-1 آمازون. این برنامه Vapor با 1 گیگابایت رم و یک نمونه RDS MySQL (db.t2.micro) با 1 VCPU و 1 گیگابایت RAM پیکربندی شده است.
اکنون، به نقطه پایانی API که کاربر را از پایگاه داده میگیرد نگاه میکنیم. با Octane، نقطه پایانی آن 7 برابر سریعتر می شود. 44 درصد حافظه کمتری مصرف می کند:
قبل از ادغام اکتان Vapor :
Time Taken by Request: 39.40 ms, Memory Usage: 169 MB
Time Taken by Request: 40.20 ms, Memory Usage: 169 MB
Time Taken by Request: 37.71 ms, Memory Usage: 169 MB
Time Taken by Request: 42.16 ms, Memory Usage: 169 MB
Time Taken by Request: 40.60 ms, Memory Usage: 169 MB
Time Taken by Request: 45.75 ms, Memory Usage: 169 MB
پس از ادغام اکتان Vapor :
Time Taken by Request: 6.78 ms, Memory Usage: 112 MB
Time Taken by Request: 6.64 ms, Memory Usage: 112 MB
Time Taken by Request: 6.67 ms, Memory Usage: 112 MB
Time Taken by Request: 6.38 ms, Memory Usage: 112 MB
Time Taken by Request: 6.75 ms, Memory Usage: 112 MB
Time Taken by Request: 6.47 ms, Memory Usage: 112 MB
در حالی که مسیر "ورود" که یک الگوی ثابت را ارائه می دهد. اکتان در این نقطه پایانی آن را تقریباً 3 برابر سریعتر کرده است. 35٪ حافظه کمتری مصرف می کند:
قبل از ادغام اکتان Vapor :
Time Taken by Request: 11.32 ms, Memory Usage: 165 MB
Time Taken by Request: 11.35 ms, Memory Usage: 165 MB
Time Taken by Request: 11.29 ms, Memory Usage: 165 MB
Time Taken by Request: 11.29 ms, Memory Usage: 165 MB
Time Taken by Request: 11.36 ms, Memory Usage: 165 MB
Time Taken by Request: 11.43 ms, Memory Usage: 165 MB
پس از ادغام اکتان Vapor :
Time Taken by Request: 4.89 ms, Memory Usage: 108 MB
Time Taken by Request: 4.89 ms, Memory Usage: 108 MB
Time Taken by Request: 4.83 ms, Memory Usage: 108 MB
Time Taken by Request: 4.66 ms, Memory Usage: 108 MB
Time Taken by Request: 4.79 ms, Memory Usage: 108 MB
Time Taken by Request: 4.91 ms, Memory Usage: 108 MB
بنابراین، می توانیم استنباط کنیم که اکتان مدت زمان درخواست ها و همچنین استفاده از حافظه را کاهش می دهد. همچنین، با افزودن AWS، جزئیات به 1 میلیثانیه در لامبدا اعمال میشود، بنابراین باید هزینه نسبتاً کمتری برای عملکرد HTTP خود بپردازید. از این رو، ترکیب Laravel Octane Vapor یک انتخاب عالی برای ساخت یک برنامه تحت وب Laravel Octane Vapor با مقیاس پذیری است.
نتیجه
این چیزی است که ما در مقیاس کردن برنامه لاراول شما با استفاده از Laravel Octane داریم. اگرچه این گزینه مناسبی برای مقیاسبندی برنامه لاراول موجود شماست، اما از نظر عملکرد در مقایسه با برنامه سنتی لاراول بهبود قابل توجهی را نشان میدهد. با این حال، ناسازگاری آن با پایگاه کد موجود بسیاری از برنامههای کاربردی سنتی لاراول یک شکست است. اگر میخواهید عملکرد برنامه خود را بهبود ببخشید، میتواند انتخاب خوبی باشد، اما اگر قصد دارید برنامهای را که در حال حاضر مشکل دارد ذخیره کنید، Octane Laravel بهترین گزینه نیست. قبل از انجام دادن نهایی باید تحقیق کاملی انجام دهید.
علاوه بر این، وقتی Octane را انتخاب کردید، مطمئن شوید که از پکیج های Octane Compatible که به پروژه خود اضافه میکنید استفاده کنید تا برنامه ایدهآل سازگار با Octane را دریافت کنید.