استفاده از لاراول برای نرم افزارهای بزرگ و سازمانی (Enterprise app)

۰۶ شهریور ۱۳۹۸
فریمورک لاراول

دیروز به قسمت جدید پادکست لاراول با حضور تیلور آتول (Taylor Otwell)، جفری وی (Jeffrey Way) و مت استافر (Matt Stauffer) گوش دادم. آن‌ها در نهایت درباره‌ی ساختن نرم‌افزارهای بزرگ به وسیله‌ی لاراول صحبت کردند. در آخر این سؤال که «آیا لاراول به اندازه‌ی کافی مناسب استفاده در پروژه‌های مهم و بزرگ است؟» بسیار پرسیده شد. به این خاطر که از پادکست‌ رونوشتی ارائه نمی‌شود و گوش دادن به پادکست ۵۰ دقیقه‌ای بسیار خسته‌کننده است تصمیم گرفتم که خلاصه‌ای به همراه نقل قول‌ها به صورت مکالمه و پاسخ‌ها را به شکل خواناتری مانند پرسش و پاسخ و نکته‌های مهم و همچنین لینک‌های مربوط بنویسم. پس بیایید شروع کنیم!

موضوع ۱: یک نرم‌افزار بزرگ چیست؟

مت: قبل از این که شروع کنیم به این بپردازیم که تعریف نرم‌افزار سازمانی چیست؟ آیا درباره‌ی تعداد خطوط کد است، درباره‌ی وابستگی‌هاست، درباره‌ی امنیت است یا درباره‌ی ترافیک است؟

جفری: من هم سؤال مشابهی را دارم. نمی‌دانم برخی از فریم‌ورک‌ها به خاطر چه ویژگی‌ها یا قابلیت‌هایی در دسته‌ی نرم‌افزارهای سازمانی‌ (Enterprise app) قرار می‌گیرند در صورتی که لاراول هم همان قابلیت‌ها و ویژگی‌ها را داراست. از نظر من فریم‌ورکی مانند زِند(Zend Framework) حاصل یک شرکت است در حالی که لاراول این‌گونه نیست و حاصل کار و موفقیت تیلور است.

برای کسانی که نمی‌دانند، برنامه به این صورت است.

تیلور: به نظرم اکثر افراد فکر می‌کنند نرم افزار سازمانی نرم افزاری است که کلاس‌های زیادی داشته باشد یا حجم کدش زیاد باشد.

موضوع ۲: آیا می‌توان از لاراول برای نرم‌افزارهای بزرگ استفاده کرد؟

تیلور: مسلماً می‌گویم بله. می‌توان از آن برای نرم‌افزارهای بزرگ استفاده کرد چون:

  1. همان طور که از قبل درستی این قضیه را می‌دانیم لاراول برای نرم‌افزارهای بزرگی در گذشته نیز استفاده شده است.
  2. هم‌چنین معتقدم که لاراول مناسب هر نرم‌افزاری است که PHP نیز برای آن مناسب است و این واقعاً به خودتان بستگی دارد. زمانی که از کنترلر (Controller) عبور می‌کنید آزادی کامل برای انجام هر چیزی که خواستار انجام آن هستید به دست می‌آورید.
  3. هم‌چنین معتقدم که لاراول به نوعی منحصر به فرد است و در ساختن نرم‌افزارهای بزرگ به چند دلیل بهتر از بقیه‌ی فریمورک های PHP که در حال حاضر پیشنهاد می‌شوند عمل می‌کند. اول اینکه وابستگی‌ها، پیچیدگی و کانتینر تزریق وابستگی‌های لاراول (Laravel’s Dependency Injection Container) وجود دارد که بسیار خوب است. زمانی که درباره‌ی نرم‌افزارهای پیچیده صحبت می‌کنید درباره پردازش کارها در پس‌زمینه (background job processing) هم صحبت می‌کنید و لاراول تنها فریم‌ورکی است که سیستم صف و نوبت‌دهی آماده دارد. البته ویژگی انتشار رویداد (Event Broadcasting) هم وجود دارد که یکی دیگر از ویژگی‌هایی است که برای نرم‌افزارهای سازمانی اهمیت پیدا می‌کند.

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

به نظرم کمی گمراه کننده است چون کارکردن با لاراول بسیار آسان است اما هم‌زمان با نیازهای شما در تقابل است.

موضوع ۳: مردم غیرمنطقی هستند.

تیلور: به هرحال مردم به طور منطقی فریم‌ورک‌ها را انتخاب نمی‌کنند. برخی مربوط به مسائل شخصیتی است. شاید آن‌ها روشی را که فریم‌ورک خاصی به بازار عرضه می‌شود را دوست ندارند. شاید سبک دوستانه لاراول را دوست ندارند. بنابراین به سراغ چیز جدی‌تر و حرفه‌ای تری مانند زند می‌روند. بعضی اوقات آن‌ها به شخصه از من خوششان نمی‌آید!

موضوع ۴: دنیای نرم‌افزارهای سازمانی

مت: صحبت از نرم‌افزارهای سازمانی شد. در واقع تفاوت فاحشی بین پروژه‌های بزرگ و پروژه‌های سازمانی وجود دارد(Big app and enterprise app). ما مشتری‌هایی داریم که همیشه می‌گویندمدیر عامل، هیئت مدیره، مدیر ارشد مالی، وکلا یا هرکس دیگری از شرکت چند میلیارد دلاری ما بسیار نگران این هستند که ما قرار است یک عالمه پول و زمان را در چیزی مانند این سرمایه‌گذاری کنیم و…» بنابراین بسیاری از توسعه دهنده‌ها از کسانی که توسعه‌دهنده نیستند استفاده می‌کنند و من متعجبم از اینکه محدودیت‌هایی از این قبیل وجود دارد که از لاراول استفاده نکنند.

موضوع ۵: مثال‌هایی از نرم‌افزارهای بزرگ لاراول

مت: بیایید بحث نرم‌افزارهای سازمانی را کنار بگذاریم و درباره‌ی پروژه‌های بزرگ صحبت کنیم.

می‌دانم که نمی‌توانیم اسامی بسیاری از سایت‌های بزرگ را که اکنون روی لاراول کار می‌کنند نام برد. تعدادی از آن‌ها را می‌شناسم چون با آن‌ها قرارداد عدم افشا دارم. هزاران سایت وجود دارد که میلیون‌ها بازدید کننده دارند و روی لاراول کار می‌کنند مانند سایت‌هایی که رتبه‌ی الکسای آن‌ها زیر ۵۰۰ است و شرکت‌هایی که جزو لیست ۵۰۰ شرکت برتر فورچون (Fortune) هستند. می‌توانیم بیشتر از این به اشتراک بگذاریم؟

تیلور: صفحه فرود سایت‌های بازی‌های ویدیویی مختلفی مانند Fallout4 روی لاراول قرار دارند ولی سؤال اساسی که وجود دارد این است که چرا مردم به مدرک برای اثبات کارکرد آن نیاز دارند. هیچوقت برایشان کافی نیست.

موضوع ۶: قضیه فقط راجع به فریم‌ورک نیست.

تیلور: مردم احتمالاً می‌خواهند بدانند که «اگر من نرم‌افزار بزرگ خودم را روی لاراول ساختم آیا به طور نامحدود قابل نگهداری و پاک و …. خواهد بود؟» نه، لاراول به طور خودکار نرم‌افزار شما را خارق‌العاده نخواهد کرد که به مدت ۱۰ سال حفظ شود.

این فریم‌ورک در حال حاضر یک نگرانی بسیار کوچک‌تر در کد واقعی شما خواهد بود. وظیفه‌ی فریم‌ورک انجام کارهایی مانند مسیریابی، مدیریت نشست (session)، مدیریت کش (caching) و ارتباط با پایگاه داده است اما خود شما کسی هستید که باید مسئله‌ی مربوط به حوزه‌ی کاری خود را حل کنید که پیچیدگی این مسئله نسبت به مسائلی که مربوط به فریم‌ورک است خیلی بیشتر است.

مت: توسعه دهنده بد می‌تواند برنامه‌ی بدی برای هر فریم‌ورکی بنویسد.

موضوع ۷: اکنون چگونه نرم‌افزار بزرگ بسازیم؟

مت: خب تا اینجا فرض کنیم که مردم قبول دارند لاراول خوب است. چگونه نرم‌افزارهای بزرگ بسازیم؟ چه ملاحظاتی برای نرم‌افزارهایی که میلیون‌ها بازدیدکننده در هفته دارند در نظر گرفته می‌شود؟

تیلور: چیزهای ساده‌ای مانند Memcached یا Redis روی سرورهایی مانند Elasticache اگر روی AWS کار می‌‌کنید شما را مطمئن می‌سازد که از درایو کش یا نشست خوبی استفاده می‌کنید.

اگر احتمالاً از تنظیم‌کننده‌ی بار(Load balancer) استفاده کنید استقرار و به کار گرفتن PHP بسیار آسان‌تر خواهد بود.

در سطح لاراول از config:cache، route:cache و composer dump-autoload –optimize استفاده کنید.

جفری: به وسیله‌ی Laracasts که به طور شگفت انگیزی دارای ترافیک بالایی است نیاز به انجام این همه کار ندارم! بسیاری از این چیزها مقدماتی‌اند مانند مردمی که کلاً اندازه‌ی تصاویرشان را در نظر نمی‌گیرند.

تیلور: مزیت خوب دیگری که دارد جداسازی پایگاه داده از سرور وب است. این مزیت به عنوان مثال اگر می‌خواهید سرور دومی اضافه کنید کار مقیاس بندی و به کارگیری آن را راحت‌تر می‌کند.

از مدیریت کش صحبت به میان آمد. من اخیراً بسیار از Cloudflare استفاده می‌کردم. کل وبسایت لاراول روی مدیریت کش سنگین Cloudflare قرار دارد و در واقع تعداد کمی درخواست به سرور اصلی ارسال می‌شود چون همه چیز مانند مستندسازی (documentation) ثابت است.

مت: با این وجود مشکل Cloudflare این است باید مردم بدانند وقتی همه چیز منقضی (expire) می‌شود باید کش را پاک کرد. پس این مشکل Cloudflare نیست مشکل شماست و باید Expires headers را بررسی کنید.

جمع‌بندی کلی

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

پس پرسیدن این سؤال که «آیا لاراول به اندازه کافی خوب و کارآمد هست؟» اشتباه است. باید بپرسید «آیا کد شما به اندازه کافی خوب و کارآمد است؟» و یا اینکه «آیا به اندازه کافی صلاحیت استفاده‌ی مؤثر از لاراول را برای نرم‌افزارهای بزرگ دارید؟»

منبع

0
برچسب ها :
نویسنده مطلب علی فلاحتی

بدون دیدگاه

لینک های مفید