- PVSM.RU - https://www.pvsm.ru -

Можно ли использовать Laravel для больших Enterprise-решений?

Это перевод блогозаписи "Can Laravel Be Used for Big Enterprise Apps? [1]"

Вчера я слушал новый эпизод Laravel Podcast [2] с Тейлором Отвелом (Taylor Otwell [3]), Джеффри Веем (Jeffrey Way [4]) и Мэттом Стаффером (Matt Stauffer [5]) – и они (наконец-то!) поговорили про создание больших приложений на Laravel, в последнее время этот вопрос очень часто задают.

Подходит ли Laravel, достаточно ли он взрослый, для больших проектов?

Так как ребята из подкаста не предоставили стенограмму, и прослушивание 50 минут может быть излишним, я решил написать краткое содержание и разбить ответы в более удобном формате Вопрос-Ответ, с ссылками по теме. Поехали!

1. Что такое большое приложение?

Мэтт: Прежде чем погружаться в тему, давайте определимся, что такое Enterprise приложение? Это о количестве строчек кода, о зависимостях, или безопасности, или о нагрузке?
Джеффри: у меня тот же вопрос. Какие функции/возможности имеют фреймворки, которые делают их энтерпрайзными, а Laravel нет? Имеет ли значение, что Zend имеет за собой большую компанию, тогда как про Laravel все спрашивают «что будет, когда Тейлор умрет? [6]»
Тэйлор: я думаю, что большинство людей имеет ввиду множество классов, и, я полагаю, большое количество кода.

2. Так можно ли использовать Laravel для больших приложений?

Тэйлор: очевидно, я собираюсь сказать да, он может быть использован для больших приложений, потому что:

  • Он уже используется для больших приложений, и мы знаем это.
  • Laravel хорошо подходит для любых приложений, для которых подходит PHP. Здесь все зависит от вас – как только дело дошло до Контроллера, вы можете делать всё, что пожелаете.
  • И еще я думаю что Laravel имеет уникальные преимущества и лучше подходит для создания больших приложений, чем другие PHP решения на текущий момент, по многим причинам. Главная — есть зависимости, сложность и DI [7] в Laravel действительно хорош. Когда вы говорите о сложных приложениях, вы также имеете ввиду фоновую обработку задач, и Laravel единственный имеет встроенную систему очередей [8] из всех основных PHP фреймворков. И еще, естественно, функции Event Broadcasting [9] и другие, присущие большим приложениям.

Так что он не только может использоваться для больших приложений, он однозначно лучше подходит для больших приложений, чем прочие альтернативы на PHP.

Я понимаю, что это вводит в заблуждение, потому что Laravel имеет низкий порог входа. Но в тоже время он масштабируется в соответствие с вашими потребностями.

3. Люди иррациональны

Тэйлор: Между прочим, люди не выбирают фрейморк рационально. Много субъективных вещей. Может, им не нравится маркетинг, может они не любят дружелюбный стиль Laravel, так что они выбирают что-то более строгое, вроде Zend. Иногда им просто не нравлюсь лично я!

4. Мир энтерпрайза

Мэтт: говоря об энтерпрайзе, есть различия между большим и корпоративным проектом. У нас есть люди, постоянно говорящие «Генеральный директор, или совет директоров, или финансовый директор, или юристы, или кто-то еще из нашей многомиллиардной компании, очень обеспокоены тем, что мы собираемся вложить целую кучу времени и денег в Х», поэтому многие разработчики получают входные данные, не относящиеся к разработке, поэтому мне интересно, существуют ли какие-то ограничения, например, не использовать Laravel.

5. Приведите примеры больших приложений, использующих Laravel

Мэтт: давайте отойдем в сторону от энтерпрайза и поговорим о больших приложениях.
Я знаю, что мы не можем назвать много сайтов на Laravel. Я знаю несколько, потому что я под NDA с многими из них, и там тысячи миллионов посещений, из Alexa 500, много компаний из списка Fortune 500. Можем мы рассказать больше?
Тэйлор: различные сайты компьютерных игр, например, Fallout 4, используют Laravel на своих лендингах. Но основной вопрос – зачем людям нужны доказательства, что это работает? Доказательств всегда мало.

6. Дело не в фреймворке

Тейлор: Люди, возможно, хотят узнать: «если я создам свое большое приложение на Laravel, будет ли он вечно поддерживаться и обслуживаться, и … ?». Нет, Laravel не сделает автоматически ваше приложение крутым в поддержке в ближайшие 10 лет.

Фреймворк позволяет сосредоточится на вашем коде. Фреймворк — это маршрутизация, сессии, кеш, обращения к бд, но вы единственный, кто может описать специфику предметной области и знает проблемы бизнеса, которые намного сложнее, чем особенности фреймворка.
Мэтт: Плохой разработчик напишет плохой код на любом фреймворке.

7. Хорошо, как строить большие приложения?

Мэтт: Ну, предположим, люди согласны, что Laravel хорош. Как создать большое приложение, какие нюансы в приложении с миллионами просмотров в неделю?
Тэйлор: Достаточно просто. Убедитесь, что вы используете хороший драйвер для сессий [10] и кеша [11], вроде Memcached [12] или Redis [13], на сервере вроде Elasticcache [14] на вашем AWS [15].
Вероятно, вам нужен балансировщик нагрузки, PHP очень хорошо масштабируется в этом смысле.
На уровне Laravel, убедитесь, что вы используете config:cache [16], route:cache [17], что вы сделали composer dump-autoload –optimize.
Джеффри: На Laracsts, который, внезапно, тоже хайлоад-проект, я не делал столько всего! Есть многие базовые вещи, которые люди полностью игнорируют, например, размеры их картинок!
Тэйлор: другая хорошая идея – отделить вашу БД от сервера приложения. Это позволит проще масштабироваться, например, если вам потребуется второй сервер.
И, говоря о кешировании, я много использую Cloudflare в последнее время. Весь официальный сайт Laravel жестко закеширован, только несколько запросов на самом деле достигают сервера, потому что почти все статично, например, документация.
Мэтт: С Cloudflare есть другая проблема: необходимо учитывать срок хранения, чтобы обновлять кеш. Так что это даже не проблема Cloudflare, а ваша – проверяйте Expires [18] в заголовках!

Вместо заключения

Выслушав их мысли (спасибо, ребята!), я пришел к тому же выводу – что большие приложения это не про фреймворк, здесь есть еще много предметов для обсуждения: DevOps, механизмы кеширования, уникальная бизнес-логика вашего приложения, структура БД и так далее. Так что вопрос «Достаточно ли хорош Laravel?» — это неправильный вопрос. Лучше спросите, «Достаточно ли хорош мой код?», или «Достаточно ли у меня навыков использовать Laravel эффективно в большом приложении?». Если есть что добавить, то автор статьи принимает комментарии в своем блоге [1], и вот ссылка на сам подкаст [2].

От себя добавлю: сама суть обсуждения достаточно дискуссионна, и во многом я не согласен с категоричностью Тейлора (каждый поп хвалит свой приход, да), но основная мысль, которая сквозит через подкаст — плохой разработчик напишет плохой код, вне зависимости от фреймворка. Фреймворк лишь дает инструменты для того, чтобы сосредоточится на основном — бизнес-логике.

P.P.S: Об ошибках и не точностях сообщайте, пожалуйста, в личку.

Автор: parotikov

Источник [19]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/php-2/255221

Ссылки в тексте:

[1] Can Laravel Be Used for Big Enterprise Apps?: http://laraveldaily.com/can-laravel-used-big-enterprise-apps-summary-laravel-podcast/

[2] новый эпизод Laravel Podcast: http://www.laravelpodcast.com/episodes/68236-episode-53-bigger-better

[3] Taylor Otwell: https://twitter.com/taylorotwell

[4] Jeffrey Way: https://twitter.com/jeffrey_way

[5] Matt Stauffer: https://twitter.com/stauffermatt

[6] что будет, когда Тейлор умрет?: https://www.reddit.com/r/PHP/comments/676vns/if_taylor_otwell_got_hit_by_bus_what_would_happen/

[7] DI: https://laravel.com/docs/5.4/container

[8] систему очередей: https://laravel.com/docs/5.4/queues

[9] Event Broadcasting: https://laravel.com/docs/5.4/events

[10] сессий: https://laravel.com/docs/5.4/session

[11] кеша: https://laravel.com/docs/5.4/cache

[12] Memcached: https://memcached.org/

[13] Redis: https://redis.io/

[14] Elasticcache: https://aws.amazon.com/elasticache/

[15] AWS: https://aws.amazon.com/

[16] config:cache: https://laravel.com/docs/5.4/configuration#configuration-caching

[17] route:cache: https://laravel.com/docs/5.4/controllers#route-caching

[18] Expires: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Expires

[19] Источник: https://habrahabr.ru/post/328610/?utm_source=habrahabr&utm_medium=rss&utm_campaign=sandbox