چرا من برنامه Laravel خود را به AWS Serverless مهاجرت کردم (و چرا می توانم در وقت و هزینه شما صرفه جویی کنم)

نسخه انگلیسی در اینجا.
اسپانیایی: این فقط مربوط به پس انداز پول نیست – اگرچه کیف پول من شکایت نمی کند.
این را تصور کنید: شما یک برنامه درخشان در Laravel ایجاد کرده اید – شاهکار شما ، یک تیغ دیجیتال سوئیس با چنین عملکردهای مفیدی که می توانند کره را برش دهند … یا نظرات کاربران. اما جزئیات وجود دارد. هر ماه هزینه یک نمونه EC2 را پرداخت می کنید که پس از ژانویه به عنوان عضویت در سالن بدنسازی اساسی است. در همین حال ، کوهنوردی احساس می کند که سعی می کند یک سفر دریایی را در وسط طوفان پارک کند.
آیا برای شما اتفاق افتاده است؟ من هم
سه سال پیش ، من کاری را انجام دادم که بیشتر توسعه دهندگان آن را دیوانه می نامند: من PHP را در AWS Lambda مستقر کردم. “PHP؟ در سرور؟ این مانند قرار دادن آناناس روی پیتزا است.
اما در اینجا ، من سه سال بعد ، پیتزا آناناس خود را با غرور می خورم. بگذارید به شما بگویم که چرا Laravel in Serverless به روزرسانی ابر است که نمی دانستید به آن احتیاج دارید.
1. مشکل سنتی میزبانی با لاراول
(یا: چرا موارد من EC2 دارای یک بحران وجودی بود)
قبل از سرور ، برنامه Laravel من در EC2 زندگی می کرد. برای ناآگاهان ، EC2 نسخه آمازون از یک سرور خصوصی مجازی است که در آن بخشی از دستگاه را برای اجرای کد خود اجاره می دهید. خوب به نظر می رسد ، درست است؟ تا اینکه واقعیت به شما قوی تر از a composer update
شورشی
الف) اول: هزینه موجود است
اجرای یک نمونه EC2 مانند داشتن یک تسلا است که روزانه 24 ساعت دارید ، فقط در صورت تمایل به رانندگی. درخواست من همیشه شلوغ نبود ، اما این امر جلوی حسابدار را نداشت. بین موارد EC2 ، بارگیری و تعادل ذخیره سازی مشترک ، حدود 110 دلار در ماه برای پشته سرورها هزینه کرد که بیشتر زمان غیرفعال را پشت سر می گذارد. کیف پول من؟ به عنوان تایتانیک غرق شد.
می دانم ، در طرح عالی چیزها زیاد نیست ، بلکه به عنوان یک توسعه دهنده/کارآفرین انفرادی ، هر دلار حساب می کند.
ب) بعد از: مقیاس کابوس
نمونه های EC2 مانند آن دوست هستند که به همه چیز اغراق می کنند.
- اوج ترافیک؟ “من الان می افتم ، متشکرم!”
- بدون ترافیک؟ “من به سوزاندن پول شما ادامه خواهم داد!”
مدیریت خودآزمایی مانند آموزش ماهی برای دستکاری احساس می شود – این امکان پذیر است ، اما با چه هزینه ای؟ گروه های کوهنوردی را به صورت دستی تنظیم کنید ، تعادل بار را پیکربندی کنید و دعا کنید تا بیشتر مانند یک کار دوم که هرگز فرض نمی کنم احساس نکنید.
ج) و سرانجام: Devops ، زندانی بدون حقوق
هیچ کس به من نگفت که توسعه با لاراول با یک طرف از مسئولیت های Sysadmin همراه بود:
- تکه های امنیتی را اعمال کنید.
- تنظیمات Nginx/Apache را در ساعت 3 صبح پاک کنید.
- کلمات زیبا را به دستورات زمزمه کنید
sudo
، به امید اینکه این بار کار کنند.
من برای این زندگی ثبت نام نکردم.
در آن زمان بود که من شروع به کاوش در گزینه های دیگر کردم ، و Serverless به عنوان یک راه حل مناسب برای حل این سردردها برجسته شد.
2. AWS Serverless: احیای PHP در ابر
بیایید یک اسطوره را روشن کنیم: بدون سرور به معنای “بدون سرور” نیست. این فقط بدان معنی است که سرورها مشکل شخص دیگری هستند. در این حالت ، AWS کار سنگین را انجام می دهد در حالی که من روی آنچه واقعاً از آن لذت می برم تمرکز می کنم: برنامه.
الف) لامبدا: جادوگر توسط رویدادها رانده می شود
AWS Lambda مانند یک ابرقهرمان است که فقط در صورت نیاز به آن ظاهر می شود. کد خود را در پاسخ به رویدادها اجرا کنید – HTTP Solicitudees ، پیام های SQS ، وظایف برنامه ریزی شده ، حقوق و دستمزد خود. و هنگامی که کار به پایان می رسد ، سریعتر از یک پیتزا رایگان در یک جلسه توسعه دهنده ناپدید می شود.
- بدون هزینه های غیرفعال: شما فقط برای زمان اعدام (اندازه گیری شده در میلی ثانیه) پرداخت می کنید.
- جادوی کوهنوردی اتوماتیک: آیا اوج 100000 برنامه دریافت کرده اید؟ لامبدا بدون تعریق (یا خالی کردن حساب بانکی خود) آنها را کنترل می کند.
- بدون تابش با طراحی: هر بار مانند یک تاری و یک حساب جدید است ، طرحی که شما را مجبور می کند به صورت مدولار فکر کنید.
ب) خدمات مدیریت شده: قهرمانان ناشناس
بدون سرور فقط لامبدا نیست بلکه یک اکوسیستم است. AWS زیرساخت های DIY خود را با خدمات اداره شده جایگزین می کند که “به سادگی کار می کنند”:
- مجموعه پایگاه داده: گزینه هایی مانند Aurora Serverless (MySQL/Postgres) برای دوستداران SQL.
- S3: پرونده های خود را بدون نگرانی در مورد تمام کردن فضای دیسک ذخیره کنید.
- SQS: کار طولانی مدت را دکوراسیون کنید و آنها را asoncrona کنید.
ج) پارادوکس PHP
باید اعتراف کنم: PHP نه او متولد شد به سرور بدون سرور این مانند این است که از یک ماهی بخواهید که از یک درخت صعود کند – شکایت خواهد کرد ، اما در نهایت این کار را انجام می دهد. لاراول ، که به طور سنتی به PHP-FPM وابسته است ، برای پیشرفت در دنیای زودگذر لامبدا به برخی از تنظیمات نیاز داشت:
- جلسات: muévelas پایه تاریخ های خارجی ، مانند mysql the redis.
-
ذخیره سازی: با استفاده از نمای ، کلیه عملیات ذخیره سازی را به S3 هدایت کنید
Storage
لاراول - مدیریت صف: SQS به عنوان کنترل کننده پیش فرض برای انجام کارهای ناهمزمان پیکربندی می کند.
- ذخیره سازی: از خدمات خارجی مانند Redis یا DynamoDB به جای ذخیره محلی استفاده کنید.
- بهینه سازی زمان EPART: با بریدن غیر ضروری (وابستگی های بلااستفاده) ، شروع سرما (شروع سرما) را به حداقل می رساند.
-
متغیرهای محیط: فایلها را جایگزین کنید
.env
با مدیر AWS Secrets یا فروشگاه پارامتر برای مدیریت متمرکز و ایمن پیکربندی.
به یاد داشته باشید که Serverless فقط در مورد جایگزینی سرورها با توابع Lambda نیست. این در مورد تجدید نظر در معماری شماست – از آنجا که AWS در حالی که شما روی ساختمان تمرکز می کنید ، نقاط درد عمل را کنترل می کند.
3. چگونه بدون سرور کل پتانسیل لاراول را باز می کند
بنابراین لاراول در سرور واقعاً وعده های شما را برآورده می کند؟
بدون سرور فقط یک کلمه مد نیست بلکه یک تغییر تحول آمیز است. زیبایی لاراول در سرور در توانایی وی در حل نقاط ضعف محل اقامت سنتی نهفته است ، در حالی که امکان راه حل های سریعتر ، مقیاس پذیر و سودآور را فراهم می کند. اما جادوی واقعی هنگامی اتفاق می افتد که چگونه این مزایا با هم ترکیب می شوند. ما قصد داریم آن را تجزیه کنیم.
الف) سرما شروع می شود: جدا کردن اسطوره واقعیت
لجن سرما شروع می شود آنها هنگامی اتفاق می افتند که لامبدا نمونه جدیدی را آغاز می کند. در مورد آن فکر کنید که گویی PHP از چرت زدن بیدار شده است. منتقدین با آنها رفتار می کنند که گویی آخرالزمان هستند ، اما قابل کنترل هستند:
- واقعیت: لوس سرما شروع می شود معمولی با PHP + LARAVE در حدود 3-5 ثانیه پوند است.
-
راه حل:
- اکتان: برنامه زندگی بین برنامه ها را حفظ کنید ، زمان شروع را کاهش دهید. درخواست های بعدی در 200 میلیون پوند یا کمتر پردازش می شوند.
- همزمانی: AWS نمونه های قبل از کالری برای نقاط پایانی بحرانی (هزینه اضافی دارد ، اما برای امتیازهای کلیدی ارزش آن را دارد)بشر
برای بیشتر برنامه ها ، تأخیرهای کمتر از 3 ثانیه در طول ترافیک پایین قابل قبول است. بیشتر کاربران متوجه a نمی شوند شروع سرد، به خصوص در حداکثر بارهای ترافیکی هنگامی که لامبدا “داغ” باقی می ماند.
ب) بدون درد
کوهنوردی در میزبانی سنتی معمولاً نبرد بی پایان به نظر می رسد. با سرور بدون سرور ، کوهنوردی بسیار ساده می شود: دیگر نیازی به تنظیم قوانین خودآزمایی یا عبور از انگشتان خود در طی افزایش ناگهانی ترافیک نیست. AWS Lambda حدس ها را از بین می برد و به طور پیش فرض به صورت افقی صعود می کند.
در اینجا یک مثال آورده شده است:
- منظره: برنامه شما ویروسی می شود 🚀 yey!
- پیکربندی Antigüa با EC2: شروع به تجربه تأخیر کنید ، در AWS به جلسه می روید ، میزان نمونه ها را به صورت دستی تنظیم می کنید و برای بهترین ها دعا می کنید. آه ، و فراموش نکنید که به درستی آن موارد بین مناطق در دسترس بودن را متعادل کنید.
- پیکربندی جدید با لامبدا: AWS به طور خودکار به همان اندازه موارد لازم را ایجاد می کند و هزاران برنامه همزمان را بدون بلند کردن انگشت انجام می دهد. شما پاپ کورن ذرت را می گیرید و معیارهای CloudWatch را مشاهده می کنید که گویی این یک سری Netflix است.
این فقط راحتی نیست بلکه آرامش است. در حالی که شما در جشن موفقیت برنامه خود تمرکز می کنید ، لامبدا کارهای سنگین انجام می دهد. و بهترین ها؟ شما فقط هزینه محاسباتی را که استفاده می کنید پرداخت می کنید ، نه به دلیل ظرفیت غیرفعال که ممکن است به “فقط در مورد” نیاز داشته باشید.
ج) راندمان هزینه: با ارزش ترین بازیکن
بدون سرور نه تنها صرفه جویی می کند ، بلکه مانند یک بوفه 5 دلاری است که در آن فقط هزینه ای را که می خورید پرداخت می کنید.
- پیکربندی قدیمی من با EC2: 110 $/mes
- 4x Instancias EC2 T3.Small: 60.00 دلار
- 1 برابر متعادل کننده بار: 16.40 دلار
- 1x EBS (ذخیره مشترک بین نمونه های EC2): 7.80 دلار
- 1x instancia rds mysql (db.t4g.medium): 26.00 پوند
- لامبدا: 34 دلار/mes (60 ٪ پس انداز!)بشر
- Lambda ، API Gateway 2.5M برنامه های کاربردی (500ms / 512MB حافظه) / ماه: 4.80 دلار
- خدمات مدیریت شده (S3 ، SQS ، CloudWatch): 2.90 $
- Instancia rds mysql (db.t4g.medium): 26.00 پوند
تجدید نظر | هزینه EC2 | هزینه لامبدا |
---|---|---|
محاسبات | 60.00 دلار | 4.50 دلار |
قرمز (LB ، دروازه API) | 16.40 دلار | 0.30 دلار |
انباره | 7.80 دلار | 2.90 دلار |
مجموعه پایگاه داده | 26.00 دلار | 26.00 دلار |
مجموع | 110.20 دلار | 33.70 دلار |
به طور خلاصه ، بدون سرور نه تنها صرفه جویی می کند ، بلکه پهنای باند ذهنی را آزاد می کند. هرچه منابع کمتری نگران بیش از اعتقادی باشند ، بیشتر می توانم روی ساختن چیزی باورنکردنی تمرکز کنم.
تا آن زمان ، من هنوز از یک نمونه MySQL به عنوان موتور پایگاه داده استفاده کردم. انتشارات بعدی نحوه مهاجرت به DynamoDB را برای کاهش بیشتر هزینه ها بررسی می کند.
د) آزادی نگهداری: با کابوس های عملیاتی خداحافظی کنید
بدون سرور من را از زنجیره های نگهداری سرور آزاد کرد. در اینجا چگونه:
- دیگر به روزرسانی دستی نیست: AWS تکه های امنیتی ، به روزرسانی های سیستم عامل و بهبود زمان اجرای را کنترل می کند ، به این معنی که شما همیشه از یک زیرساخت ایمن و به روز شده استفاده می کنید.
- تنظیمات ساده شده: با خدماتی مانند API Gateway و S3 ، پیچیدگی مدیریت تنظیمات NGINX و استقرار شخصی به گذشته تبدیل می شود.
- ظرفیت الاستیک: برای پرداخت بیشتر برای منابع سرور بلااستفاده و یا عجله بیشتر در قله های ترافیک ، بیشتر فراموش کنید. لامبدا به طور خودکار برای تأمین تقاضا و متوقف کردن صورتحساب در هنگام غیرفعال بودن مقیاس می کند.
- روی ویژگی ها تمرکز کنید ، نه اینکه آتش سوزی را خاموش کنید: زمانی که وی برای استفاده از تکه ها یا اشکال زدایی مشکلات در تولید استفاده می کرد ، اکنون در ایجاد ویژگی ها و بهبود تجربه کاربر سرمایه گذاری می کند.
بدون سرور نه تنها تعمیر و نگهداری را کاهش می دهد ، بلکه حواس پرتی عملیاتی را که از برنامه نویسی جلوگیری می کند ، از بین می برد.
4. اما آیا سرور لاراول برای همه بی سیم است؟
با این حال لاراول انقلابی در سرور یک راه حل جهانی نیست. برای برخی از برنامه ها ، ماهیت بدون تابعیت و گرایش به رویدادهای بدون سرور ممکن است یک رویا به نظر برسد. برای دیگران ، ممکن است به نظر برسد که سعی در ایجاد یک مربع در یک دایره دارد. قبل از ورود به قطار بدون سرور ، ما کمی برمی گردیم و ارزیابی می کنیم که آیا برای پروژه شما مناسب است یا خیر.
الف) طبیعت بدون تابش: شمشیر دو برابر
لاراول عاشق عملیاتی است که اطلاعات بین تعامل را حفظ می کند ، مانند فروشگاه محلی و ذخیره جلسات در سیستم پرونده. برای رفتن به سرور ، باید تغییر دهید:
- جلسات: از پایگاه داده (MySQL/Postgres) یا Redis استفاده کنید. بسته به سیستم پرونده هیچ چیز بیشتر نیست.
- بایگانی: پرونده ها را به S3 تغییر دهید ، یا از عبور از لاراول کاملاً خودداری کنید و از URL های از پیش پر شده S3 استفاده می کند.
- سیاهه ها: برای انتقال آنها به CloudWatch ، Laravel را پیکربندی کنید.
-
پیکربندی: متغیرها را حرکت دهید
.env
مدیر اسرار AWS یا فروشگاه پارامتر برای مدیریت متمرکز. - کلوس: کار را به AWS SQS مهاجرت کنید تا صف ها و پیام ها را به روشی مقیاس پذیر اداره کنید.
ب) ملاحظات مربوط به وابستگی تأمین کننده (قفل فروشنده)
خدمات AWS جادویی هستند ، اما آنها نیز دارند:
- از SQS به دمهای Redis مهاجرت می کنید؟ برای بازنویسی کد آماده شوید.
- آیا می خواهید از لامبدا به داکر حرکت کنید؟ یک قهوه بخورید: یک شب طولانی خواهد بود.
ج) در صورت عدم انتخاب بدون سرور
بدون سرور یک گلوله نقره ای برای همه بارهای کاری نیست. شما باید از آن جلوگیری کنید:
- شما نیاز دارید جوراب: اگرچه می توان با خدماتی مانند API Gateway + WebSockt API یا ابزارهای شخص ثالث مانند ABY ، به پیچیدگی اضافه کرد.
- برنامه شما دارد بارهای محاسباتی سنگین: کارهایی مانند استنباط IA/ML یا برنامه نویسی ویدیویی می توانند به محدودیت زمانی 15 دقیقه لامبدا برسند.
- آنها به آنها بستگی دارند خدمات با ایالت: برنامه هایی که یک آلبوم مداوم یا وضعیت سرور را فرض می کنند می توانند برای بازپرداخت گران باشند.
5. چه چیزی دنبال می شود؟
Laravel in Serverless این پتانسیل را دارد که نحوه ساخت و نمایش برنامه ها را تغییر دهد ، اما جادوی واقعی در اجرای آن است. آیا شما آماده هستید تا جهش را بسازید و برنامه Laravel خود را به عنوان درمان بدون سرور تبدیل کنید؟ به قسمت 2 توجه داشته باشید ، جایی که من شما را از طریق مراحل دقیق برای زنده کردن این معماری راهنمایی می کنم.
یک سوال برای شما: بزرگترین ترس شما با سرور چیست؟ آن را به اشتراک بگذارید و 3 مورد اصلی را در قسمت 2 سوار کنید!