На протяжении многих лет команда Compo Soft успешно создавала eCommerce‑решения, клиентские порталы, PIM‑системы и другие решения малого и среднего бизнеса. Для этих задач было достаточно привычного стека на PHP и связанных с ним технологий. Когда в 2018 компания приняла стратегическое решение о выходе в сегмент Enterprise — встал вопрос о новом стеке. Им стала Java. В этой статье решили поделиться своим пониманием и опытом — почему сделан такой выбор, и почему PHP «не вывозит» Enterprise‑решения.

К моменту переноса стратегии развития продуктов с СМБ на Enterprise, Compo Soft имела более чем 10-летний опыт разработки цифровых платформ в сегменте B2B. Но каждая новая версия и новые фичи давались все труднее — по мере роста требований заказчиков и уровня кастомизации их проектов становилось очевидно, что возможности прежней технологической базы (PHP) достигли потолка.
Акцент на построение масштабируемых, модульных и высоконагруженных решений потребовал пересмотра архитектурных подходов, выбора нового технологического стека и переосмысления принципов разработки. Мы выбрали переход от PHP‑монолита к Java и MACH‑архитектуре (Microservices, API‑first, Cloud‑native, Headless) — современному стеку, отвечающему требованиям крупного бизнеса.
О проблемах развития прежней PHP‑платформы Compo Soft
Мы не хотим говорить, что платформа на PHP — это что‑то условно плохое. Нет, просто для каждого типа решений нужен адекватный технологический стек с перспективой долгосрочного развития.
PHP, на котором Compo Soft разрабатывала свои продукты с 2011 года, долгое время успешно справлялся с нашими задачами. Основной версией платформы был MVC движок, дополненный некоторыми компонентами Symfony. После этого был предпринят переход на Laravel — и довольно успешный. Это решило тактические проблемы legacy в моменте, но не решило стратегических проблем.
Однако с ростом разнообразия бизнес‑кейсов, объема данных, заводимых клиентами в платформу и требований по кастомизации, архитектура по модели MVC начала тормозить развитие. Некоторые ограничения PHP стали критичными именно в момент перехода в сегмент Enterprise.
Модель MVC — это архитектурный шаблон проектирования программного обеспечения (Model‑View‑Controller (Модель‑Представление‑Контроллер). MVC используется в веб‑разработке (и не только) для организации кода, чтобы его было проще поддерживать, масштабировать и развивать.
Архитектура MVC ограничивала масштабирование
Прежде всего, архитектура нашей платформы на PHP представляла собой монолит по классической модели MVC. Такое решение упрощало старт проекта, но в долгосрочной перспективе затрудняло масштабирование — изменения в одном месте могли повлечь цепочку непредсказуемых эффектов в других модулях.
Добавление новых функций превращалось в рискованную и затратную по рабочему времени затею. Например, при интеграции с новым каталогом товаров приходилось переписывать не только backend‑логику, но и менять фронтенд и механизмы импорта, что увеличивало сроки и стоимость проекта. Иными словами, базовая модель MVC, не позволяла масштабировать отдельные компоненты (например, каталог или корзину) без риска покрэшить остальную систему.
Пример: при повышенной нагрузке на модуль оформления заказа деградировала производительность всей платформы — нельзя было изолировать один компонент.
2. Ограничения по технологиям фронтенда
Ситуацию усугубляли ограничения технологии на стороне клиента. Фронтенд строился с использованием AngularJS и jQuery, а в качестве сборщика использовался Gulp. Это означало устаревшие подходы к архитектуре фронтенда, слабую поддержку SEO и невысокую производительность интерфейсов. Эти технологии не поддерживали современные требования к производительности, безопасности и адаптивности.
Рендеринг происходил на сервере, из‑за чего отклик от платформы до клиентского устройства (особенно в мобильных сетях) доходил медленнее, чем хотелось бы нашим заказчикам (которым клиенты жаловались в техподдержку).
Пример: отсутствие реактивного интерфейса и слабая поддержка мобильных устройств ограничивали производительность интернет‑магазинов, созданных на PHP, в периоды высокого спроса.
3. “Недопоиск” и отсутствие аналитики
Большой проблемой оказался и поиск. Вместо специализированного движка вроде Elasticsearch применялись обычные SQL‑запросы к базе данных. Это не позволяло реализовать такие базовые для eCommerce‑функции, как фасетная навигация, гибкие фильтры или подсчет количества товаров по категориям.
Пользователь не мог быстро отфильтровать, например, «все ноутбуки с 16 ГБ RAM и SSD от 512 ГБ» — база данных просто не выдерживала сложных агрегирующих запросов без потери производительности. Да, такие запросы можно было делать, но их выполнение длилось неприемлемо долго.
Пример: в поиске сложно реализовывались бизнес‑функции, повышающие средний чек, такие как «сопутствующие товары к вашей покупке».
4. Слабая интеграция и обмен данными
Интеграции с внешними системами, такими как ERP, логистика, маркетплейсы, происходили через протокол FTP и json‑файлы. Такой обмен был не только медленным, но и нестабильным — при возникновении ошибки, данные могли быть искажены или вовсе не доставлены, а механизмы контроля и повторной отправки отсутствовали.
Пример: было сложно реализовать брокеридж сообщений или очередь задач, что затрудняло асинхронное взаимодействие между модулями и системами.
5. Отсутствие централизованного DAM-хранилища
Цифровые активы на сайтах магазинов (фотографии, видео, документация, прайс‑листы) хранились локально или на сервере владельца магазина в разрозненных папках. Не было единого DAM‑хранилища с API‑доступом, контролем версий и тегированием.
Пояснение: централизованное DAM‑хранилище‑ это единая система управления цифровыми активами (Digital Asset Management), предназначенная для хранения, организации, поиска и распространения всех медиафайлов, используемых в ИТ‑решении: изображений, видео, документов.
Управление медиафайлами, — фотографиями, инструкциями, логотипами и так далее, — велось вручную. Из‑за этого одни и те же файлы могли дублироваться, иметь разные версии в разных разделах интернет‑магазина, а связка с товарными карточками могла теряться.
6. Ограниченные возможности фоновой обработки
Фоновая обработка была представлена отдельными CLI‑скриптами, которые запускались вручную или по расписанию. Это сильно ограничивало возможности автоматизации. Массовая выгрузка каталога могла выполняться часами, блокируя другие процессы и требуя постоянного контроля со стороны разработчиков.
Фоновая логика (например, генерация отчетов, пересчет цен, уведомления) реализовывалась через cron запуск команд (cron — это планировщик задач в Unix‑подобных системах, позволяет запускать команды или скрипты по расписанию). Это мешало автоматизации и не позволяло обрабатывать задачи в реальном времени.
Пример: загрузка каталога могла затем потребовать отладки на живой базе.
7. Отсутствие многопоточности и асинхронности
Еще один существенный недостаток PHP — отсутствие многопоточности и асинхронной обработки. PHP традиционно работает в однопоточном режиме: каждый запрос обрабатывается отдельно, без возможности эффективного использования ресурсов на уровне серверного ядра.
Поочередные запросы к внешним API, медленные SQL‑запросы, генерация отчетов — это тормозило работу всей системы. Ядро платформы не поддерживало асинхронную обработку и многопоточность, что критично для масштабируемых решений.
Пример: так как операции выполнялись последовательно, это тормозило обработку большого числа ecommerce заказов в пиковые даты («черная пятница» и тому подобное).
8. Низкий уровень типизации
PHP — динамически типизированный язык. Динамическая типизация в контексте PHP означает, что переменные не имеют жестко заданного типа данных, и этот тип определяется во время выполнения программы, а не заранее (в коде).
Соответственно, динамическая типизация усложняла контроль качества продукта, делала код трудночитаемым, а поведение функций — с риском непредсказуемости. С ростом объема кода это приводило к увеличению числа багов, времени на тестирование и отладку.
Пример: в сложных B2B‑сценариях это приводило к ошибкам на этапе выполнения и затрудняло реализацию желаемой клиентом бизнес‑логики (например, проверок по десяткам условий).
9. Зависимость от нестабильных библиотек
Использовались сторонние библиотеки с GitHub без надежной поддержки, часто без документации и обновлений. Это тормозило разработку, повышало риски безопасности и зависимость от стороннего кода.
Вот небольшой пример. Допустим возникает необходимость работы с брокером rabbitmq. Для PHP мы пользуемся библиотекой, поддерживаемой очень крутыми ребятами и энтузиастами. И даже rabbitmq ее в своем гайде рекомендует.
А вот для Java — сам rabbitmq непосредственно разрабатывает и поддерживает библиотеку. Несомненно, есть разница. И таких примеров тысячи.
Некоторые ключевые функции прежней платформы зависели от open‑source‑модулей, которые давно не обновлялись. При возникновении проблем приходилось самостоятельно изучать и патчить чужой код, что увеличивало риски багов и непредсказуемо удлиняло сроки разработки.
Таблица: Сводка ограничений старой платформы
Проблема |
Проявление |
Монолитная MVC‑архитектура |
Сложность изменений, отсутствие модульности |
Устаревший фронтенд (AngularJS, jQuery) |
Плохая производительность, слабая масштабируемость UI |
SQL‑поиск по базе данных |
Невозможно реализовать фасетный поиск, фильтрацию, агрегации |
Обмен через FTP и файлы |
Нет актуальности данных в реальном времени, отсутствие отказоустойчивости |
Отсутствие DAM‑системы |
Потеря и дублирование файлов, ручное управление цифровыми активами |
Ручная фоновая обработка (CLI) |
Отсутствие автоматизации, высокая нагрузка на команду |
Нет многопоточности и асинхронности |
Блокировки процессов, снижение производительности при больших объемах данных |
Динамическая типизация PHP |
Ошибки в рантайме, сложность масштабирования бизнес‑логики |
Зависимость от нестабильных библиотек |
Рост техдолга, снижение надежности, трудности с безопасностью и обновлениями |
Сухой остаток: Хотя мы по‑своему любим PHP, но накопившиеся недостатки платформы приходилось решать условными «костылями». Приходилось постоянно подстраиваться под инструмент, под нужную версию какой‑то чужой библиотеки и без возможности какого‑то адекватного развития. С функциональностью поиска приходилось изощряться на основе возможностей СУБД и писать хитрую логику, реализующую хоть какой‑то внятный поиск и фильтрацию.
Почему выбрали именно Java
Мы много консультировались с коллегами из разных компаний, включая банки и обсуждали с ними наши проблемы. Совет в 99% был классический — «начните переписывать компоненты» и потихоньку так переведите всю платформу на другую архитектуру. Так действительно принято делать и считается более безопасным. Однако мы посчитали что такой подход затянет переход и даст неразбериху — ведь придется иметь две команды (PHP + Java), то есть раздувать штат. Часть инженеров будет поддерживать новые компоненты, часть старые и как‑то между собой интегрироваться. Это путь к большому хаосу и поэтому было решено переписывать на Java всю платформу сразу.
Java нередко критикуют за многословность и, как считается, устаревшую модель ООП. Тем не менее в enterprise‑разработке у нее множество сильных сторон, которые сложно игнорировать. Эти сильные стороны и перевесили. Кстати говоря, для любителей большего удобства, лаконичности и современного подхода к программированию в java‑мире есть Kotlin. Который обладает всеми преимуществами языка Java, при этом в нем отсутствуют проблемы присущие Java, например, NPE, который многих до исступления доводит. А самое главное, что Kotlin и Java интероперабельны. То есть, мы, программируя на Kotlin, можем подключать java‑библиотеки и спокойно работать с ними.
Итак, решение перейти на Java было осознанным и стратегическим. Перед командой стояла задача не просто заменить один язык другим, а создать фундамент разработки, на котором можно строить зрелую, масштабируемую и надежную B2B‑платформу уровня серьезного Enterprise. Были рассмотрены альтернативы — Node.js,.NET, Python — но ни одна из них, как бы хороша не была, не обеспечивала требуемого баланса зрелости, производительности, богатства экосистемы и поддержки именно под наши условия.
Теперь подробнее, какие критерии мы принимали во внимание, выбирая Java.
Зрелость и стабильность языка и его развития

Java существует более 25 лет, входит в ТОП языков программирования в различных рейтингах, включая российские, и активно развивается под управлением Oracle и профессионально‑зрелого сообщества. Это не экспериментальный язык, не «фреймворк года», а технология, которая пережила целые поколения веб‑решений и доказала свою надежность в финансовых, государственных, телеком‑ и корпоративных системах.
Платформа Java поддерживает долгосрочные версии (LTS), имеет строгую обратную совместимость и предсказуемый релизный цикл. Это особенно важно для тех, кто строит продукт с горизонтом развития на 10+ лет.
Наличие проверенной временем экосистемы
Выбор Java открывает доступ к мощной и зрелой экосистеме:
Spring Framework и его компоненты (Spring Boot, Spring AI, Spring Cloud, Spring Data, Spring Batch) позволяют быстро создавать микросервисы, REST API, интеграции с базами данных, брокерами сообщений и другими системами.
Apache Kafka, Camel, Solr, Lucene, Hadoop — инструменты обработки данных, очередей, поиска и интеграций, изначально ориентированные на Java.
Инструменты крупных компаний: Google активно использует Java (GCP SDK, Android), Microsoft обеспечивает поддержку Java в Azure, а IBM развивает корпоративные Java‑решения (WebSphere, Open Liberty).
Документация "корпоративного уровня"
Если в мире PHP часто приходится ориентироваться на статьи в блогах и фрагментированные туториалы, то в Java‑инфраструктуре документация — это полноценные спецификации, официальные мануалы от мировых вендоров, четкие стандарты.
Например:
Spring имеет обширную официальную документацию с примерами, схемами и архитектурными рекомендациями;
OpenJDK и Oracle JDK поддерживают версии LTS с подробной документацией по API;
Apache и другие фонды публикуют white papers и производственные гайды.
Зрелая документация важна при проектировании сложных компонентов (например, обработки заказов, шлюзов, очередей, безопасности) — где используется не «хак» после долгого гугления, а устойчивое, предсказуемое решение.
Наличие качественного обучения, комьюнити и поддержки
Поскольку Java — один из самых популярных языков в мире, это отражается в доступности качественного обучения:
Обширные курсы от Udemy, Coursera, JetBrains Academy, Stepik;
Множество книг: «Effective Java», «Spring in Action», «Clean Code» (в том числе на русском);
Активные комьюнити: Stack Overflow, Reddit, Spring Community;
Конференции и митапы.
Кроме того, многие проблемы в стеке уже решены до нас — достаточно загуглить ошибку, и, скорее всего, она уже обсуждалась с десятком вариантов решения.
Производительность и инженерная дисциплина
Java показывает высокую производительность по сравнению с динамическими языками (в т.ч. PHP и Python), благодаря JIT‑компиляции, сборке мусора, многопоточности и оптимизации под железо.
Также Java приучает к инженерной культуре: строгая типизация, архитектурные подходы (DDD, Hexagonal, Clean Architecture), юнит‑тесты, CI/CD, работа с профайлерами и метриками — все это не «отдельные навыки», а часть каждодневной работы Java‑разработчика.
“Сухой остаток” по нашему выбору в пользу Java
Переход на Java не был попыткой следовать моде. Это было осознанный выбор архитектуры, направленный на создание надежной платформы, выдерживающей нагрузку и рост. Для нас были важны обеспечение совместимости с внешними системами и стандартами, возможность масштабирования по командам и сервисам и, конечно, повышение контроля над качеством и безопасностью кода.
Иными словами, Java и MACH‑архитектура стали основой трансформации платформы Compo Soft в полноценный Enterprise‑продукт, готовый к высоким требованиям крупнейших клиентов из B2B‑сегмента.
Таблица: Java и PHP в контексте Enterprise‑разработки
Критерий |
Java |
PHP |
Типизация |
Статическая, строгая — повышает надежность и масштабируемость |
Динамическая — быстрая разработка, но меньше контроля |
Производительность |
Высокая (JIT, многопоточность, сборка мусора) |
Ниже, особенно при высоких нагрузках |
Масштабируемость |
Подходит для микросервисов, асинхронной обработки, кластеров |
Ограничена архитектурно, требует сторонних решений |
Поддержка многопоточности |
Полноценная (через java.util.concurrent, виртуальные потоки в Loom) |
Отсутствует в ядре — только через внешние расширения |
Зрелость и стандарты |
Используется в банках, телекомах, госсекторе десятилетиями |
Распространен в вебе и SME, но реже в крупных системах |
Инструменты и фреймворки |
Spring, Quarkus, Micronaut, Kafka, Apache Camel и др |
Laravel, Symfony, Yii — меньше ориентированы на Enterprise |
Документация и best practices |
Стандартизирована, поддерживается вендорами |
Фрагментарна, часто зависит от сообщества |
Безопасность |
Большое внимание, поддержка стандартов (OAuth2, JWT, TLS) |
Требует больше ручного контроля и аудита |
Обучение и комьюнити |
Широкое покрытие книгами, курсами, сертификациями |
Тоже есть, но в основном заточено под веб‑разработку |
Экосистема и интеграции |
Интеграция с Big Data, брокерами, поисковыми движками |
Ограничена, требует дополнительных обвязок |
Краткий гайд: что делать вендорам, которые хотят масштабироваться со своим софтовым продуктом, но не могут (советы IT директору)
Обобщая наш опыт, возьмем на себя смелость дать совет другим вендорам. Если вы чувствуете, что ваша текущая платформа перестала справляться с ростом нагрузки или ее сложно масштабировать, стоит задуматься о смене архитектурного фундамента.
Вначале подсчитайте стоимость «ничего не делать, остаться как есть». Учитывайте технический долг, кадровые риски, узкие места, нестабильность зависимостей. Иногда проще и дешевле — сделать продукт заново на новом стеке.
Ориентируйтесь на лидеров. Изучите, на чем работают крупнейшие игроки в вашем сегменте (например, SAP, Salesforce, Adobe). Платформы уровня Enterprise редко строятся на PHP — и это факт.
Анализируйте тренды, а не только «модно‑молодежно». Посмотрите не только на популярность технологий, но и на то, как они развивались последние 5–10 лет. Java — один из немногих языков, который стабильно держится в Enterprise.
Сравните документацию и зрелость фреймворков. Хорошо написанная и регулярно обновляемая документация экономит месяцы на проекте. У зрелых стеков — системный подход, стандарты и lifecycle.
Соберите исследовательскую команду. Сформируйте пилотную группу (архитектор, разработчики, DevOps), дайте ей задачу протестировать альтернативы и создать прототипы на разных стеках.
Инвестируйте в переобучение команды. Разработчики, хорошо знающие предметную область, после переобучения могут быстро войти в продуктивную фазу и сохранить экспертизу внутри.
Заключение

Переход с PHP на Java для команды Compo Soft стал не просто техническим апгрейдом, а стратегическим решением: выйти на новый уровень разработки, стабильности и гибкости. MACH‑архитектура дала свободу строить действительно современную B2B‑платформу, а Java — язык, вокруг которого собрано все необходимое для Enterprise‑уровня.
Более подробно об архитектуре нашей платформы уже на Java можно посмотреть в презентации (запрос по ссылке).
И если вы находитесь в точке принятия такого решения — возможно, настало время пересмотреть и ваш стек.
Комментарии (28)

gun2rin
07.10.2025 09:33На определённом этапе PHP-стек (пусть и с современными фреймворками) перестал закрывать наши требования по масштабируемости, фоновой обработке и долгоживущим процессам. Swoole, Porto и подобные решения действительно многое умеют, но требуют отдельной инфраструктуры и компетенций, тогда как в Java эти механизмы доступны “из коробки”. Да, можно конечно было зарефакторить старую платформу, улучшить архитектуру, но новый стек дал нам гораздо больше преимуществ.

Zalechi
07.10.2025 09:33В поисках идеального стека для интерпрайза <в нашем конкретном случае>.
;)

gun2rin
07.10.2025 09:33Идеального стека не существует конечно — просто в нашем случае “идеальный” оказался подозрительно похож на тот, на котором половина enterprise-планеты (если не больше), уже лет двадцать работает (если не больше) )))

Zalechi
07.10.2025 09:33В курсе).
Могу только добавить, что пожалуй, самые главные «виновные» (можно и без кавычек) по проблемам поиска идеального стека — это пожалуй бизнес и маркетинг (со своими дедлайнами и хотелками), а потом уже все остальные)

Cyxen
07.10.2025 09:33Добавлю "5 копеек". Вот совсем недавно обсуждал с товарищем поиск баланса между исследовательской и коммерческой деятельностью! Бывают ситуации, когда нужно чувствовать на что сделать больший упор в решении задачи или создании продукта. Самое обидное, когда заложено время на некий ресёрч в проекте, но приходит бизнес и начинает всё сдвигать в угоду заказчиков!

Zalechi
07.10.2025 09:33Такое состояние вещей, —пожалуй обычно для вендоров железа, но не только лишь)

olku
07.10.2025 09:33Как бывший пыхер, создалось впечатление что статья про PHP 7 без Композера. На 7ке делалось много магазинов с ElasticSearch и хранилищем файлов с GridFS. API и SSR средствами кодогенерации фреймворка делается раза в два быстрее за счёт отсутствия перекомпиляции. Да, многопоточность, общая память и расписания это вещь. Но за нее придется платить циклами GC и занимательным дебагом утечек памяти на проде.

gun2rin
07.10.2025 09:33У нас был и компоузер и пср и еластиксерч. GC очень продвинутые сейчас, можно сказать мы эти накладные расходы не ощущаем, а видим только в виде графиков в метриках. Мы уже 5 лет на Java работаем. У нас много прода. В целом все хорошо. Да, память мы любим конечно)

olku
07.10.2025 09:33Опущены ещё три момента энтерпрайза - капитализация стека (Java дороже), падение популярности PHP и возможность лицензировать сборки или отдельные модули.

gun2rin
07.10.2025 09:33Я бы не сказал что Java дороже прям. Не сегодня. Но популярность PHP действительно падает - по объективным причинам.

bossalex
07.10.2025 09:33Итого? По срокам, по балансу: старое, новое? Получается что в мире цифровизации, трансформации кроме Java нет альтернативы? Всё на Котлин, всё под Оракл и гугл? А если брать легаси типа кобола, где в банках софт с триллионными $ оборотами? Упор на ресурсоемкий кросплатформенный Java, вскоре в следствии ИИ, тоже окажется недостаточно масштабируем. Многие автоматизаторы говорят что переход на Java увеличивает дистрибутивы и кодовые реализации на несколько порядков. Если конечно бюджеты при переходе на Java на порядок возростают наверное стоит, главное итог что с вами будет скажем лет через 5-10.

gun2rin
07.10.2025 09:33Мы как раз не считаем, что “кроме Java нет альтернатив”. Просто на нашем этапе Java оказалась компромиссом между зрелостью, инструментарием и предсказуемостью развития.
Да, экосистема тяжеловесная, но в обмен получаешь стабильность, совместимость и массу готовых решений для enterprise-масштаба.
Kotlin, Go, Rust, .NET — все достойные варианты, и если бы мы стартовали проект с нуля сегодня, возможно, смотрели бы шире.А что будет через 5–10 лет — покажет практика. Скорее всего, Java не исчезнет, а просто станет ещё одной “основой под капотом” множества технологий, как сейчас JVM используется в большом количестве инструментов.
Так что переход для нас — не культ Java, а шаг к более устойчивой и управляемой архитектуре.
olku
07.10.2025 09:33Для тех кто ещё выбирает куда с PHP слезать. Есть компании, которые с микросервисами прыгнули в Go ибо целевая система это всегда контейнер, и ява машина просто трата ресурсов.

gun2rin
07.10.2025 09:33Знаю, видел это своими глазами. Go — классный выбор. Для лёгких микросервисов и быстрых контейнеров — вообще топ. Мы посчитали Go недостаточно подходящим под наши задачи. Но кстати, миф о «тяжёлой Java» уже давно неактуален: современные JDK и фреймворки отлично дружат с контейнерами. На Go кстати хайп несколько спал, насколько я вижу, по сравнению с прошлыми годами.
satmaelstorm
Редко что комментурю, но ваша итоговая таблица, прям просит это сделать.
Типизация - PHP, конечно, динамически типизированный, но статическую типизацию туда завозят очень давно. И, при некоторых условиях, она работает очень хорошо. Особенно в паре с линтерами.
Производительность - в PHP 8 завезли JIT. Внезапно. А у вас, простите, CPU-Bound задачи, чтобы указывать именно на производительность языка?
Масштабируемость - напилить микросервисов на Symfony конечно же нельзя, да? Не понимаю какое тут может быть архитектурное ограничение, кроме как в голове архитектора.
Поддержка многопоточности - тут не спорю, в PHP это либо форки, либо танцы с бубном. Пока движуха ограничилась файберами
Зрелость и стандарты - экосистема PHP - вполне зрелая. Набор PSR - это стандарты. Всё там нормально с этим.
Инстурменты и фреймворки - PHP-экосистема очень даже зрелая. А Symfony - по сути фреймворк Enterprise уровня. Может не стоило переходить в свое время на Laravel, а надо был смотреть в сторону более сложного фреймворка? Документация к Symfony отличная, да и по остальным важным инструментам - всё отлично.
Документация и best practices - ну я уже всё написал. На энтерпрайз решения - всё документировано. На поделки - ну тут как автор поделки захочет.
Безопасность - в PHP нет поддержки JWT? OAuth? Ну вы сейчас не серьезно же, да?
Обучение и комьнити - противопоставление странное. И там и там полно возможностей.
Экосистема и интеграции - покажите примеры, чего вам не хватало и пришлось писать руками? BigData? А что именно?
Сама таблица ограничений проекта на PHP :
Монолитная MVC‑архитектура - ну так распилите :)
Устаревший фронтенд (AngularJS, jQuery) - причем тут PHP?
SQL‑поиск по базе данных - причем тут PHP?
Обмен через FTP и файлы - причем тут PHP?
Отсутствие DAM‑системы - причем тут PHP?
Ручная фоновая обработка (CLI) - причем тут PHP?
Нет многопоточности и асинхронности - если с многопточностью я еще худо-бедно соглашусь, она не тривиальна, то асинхронность - ну вы просто не умеете ее готовить в PHP, так и скажите.
Динамическая типизация PHP - делайте статическую + линтеры
Зависимость от нестабильных библиотек - используйте стабильные, такие как Symfony, например, и ее компоненты.
Итог: вы просто хотели переехать на java. Хотели бы поддержать решение на PHP - поддержали бы и всё отлично могло работать. Ну или можно было критические части системы сделать на более производительных технологиях, оставляя те, что IO-Bound на более дешевых.
P.S. Хотя сам на PHP уже не пишу, но приведенные аргументы прямо просят им оппонировать.
gun2rin
Спасибо за развернутый комментарий — многие ваши тезисы справедливы, но мы, пожалуй, немного по-разному смотрим на контекст.
Наша статья не про то, что «PHP плох», а про то, что в определенных классах задач Java объективно дает больше преимуществ — особенно когда речь о долгоживущих, масштабируемых системах с высокой нагрузкой и требованиями к надежности и поддерживаемости.
Типизация и масштабируемость кода
Да, PHP давно имеет строгую типизацию и линтеры, но язык изначально проектировался как динамический. Это сказывается на архитектуре и инструментах. В Java типовая строгость встроена в саму модель платформы — с полноценной системой generic-ов, строгими контрактами и compile-time проверками. Это не просто про синтаксис, а про возможность контролировать сложность в больших командах и кодовых базах на сотни тысяч строк.
Производительность и предсказуемость исполнения
JIT в PHP 8 действительно улучшил ситуацию, но модель выполнения всё ещё однопоточная и request-based. Java-виртуальная машина (JVM) — это другой уровень: адаптивная оптимизация, профилирование, hot-swap, параллельная сборка мусора и стабильная работа под нагрузкой. Для сервисов, работающих 24/7 с постоянным state, это критично.
Архитектура и многопоточность
Да, можно строить микросервисы и на PHP, но платформа Java предоставляет это «из коробки»: concurrency API, async I/O, thread pools, reactive-фреймворки. PHP-экосистема только приближается к этому уровню зрелости. Поэтому масштабирование вширь и вглубь (нагрузка, количество инстансов, межсервисные взаимодействия) в Java проще и надежнее.
Экосистема и стандарты
PSR — это хорошо, но они не сопоставимы по охвату и глубине с Java EE / Jakarta EE, Spring-экосистемой или стандартами интеграции, безопасности и мониторинга JVM-мира. Для enterprise-интеграций Java-экосистема более полная и проверенная десятилетиями в банках, телекомах и госсекторе.
Поддержка и развитие
На Java-проект можно безболезненно нанимать разработчиков из любой страны, с любым уровнем специализации. На PHP хорошие специалисты есть, но их меньше, и они чаще ориентированы на веб-сайты, а не на распределенные системы с бизнес-логикой и интеграцией с внешними сервисами.
Итог
PHP — отличное решение для классического веба, сайтов, CMS и легких API.
Java — инструмент для долгосрочных систем, где важны производительность, поддерживаемость и архитектурная предсказуемость.
Так что вопрос не в том, что «на PHP нельзя» — а в том, что на Java проще, надежнее и стратегически оправданнее для выбранного класса задач.
dezinger
Думаю вы перешли потому что ваши потенциальные клиенты ("Java-экосистема более полная и проверенная десятилетиями в банках, телекомах и госсекторе") другое серьезно не воспринимают, а все остальное уже притянуто за уши.
gun2rin
Частично согласен — восприятие технологий клиентами действительно играет роль, особенно в крупных и консервативных отраслях. Но переход был не из-за имиджа Java, а из-за практических ограничений старого стека.
На определённом масштабе PHP-проекту стало сложно поддерживать нужный уровень асинхронности, фоновой обработки и интеграций. Java просто дала больше возможностей “из коробки” и стабильнее показала себя под нагрузкой.
Так что да, клиентам комфортно слышать “Java”, но решение было прежде всего инженерным, а не маркетинговым.
dezinger
Расскажите что было с сотрудниками?
IgorN Автор
А вот об этом мы напишем в следующей статье!
MyraJKee
Какая версия пхп у вас была? В 2025 году как-то уже не комильфо говорить про слабую типизацию. Она конечно до java не дотягивает, но не драматично.
Что случилось с разработчиками пхп?
Микросервисы на java? Почему не go? Что-то подсказывает мне, что это было бы быстро и не так дорого как java. Потому что сейчас есть некоторое количество разработчиков пхп, которые так же могут и в Golang. Либо быстро переучиться. У нас в компании и так и сяк например.
gun2rin
Во, нормальные вопросы по делу.
1. Мы закончили работать на 7ке, на 8ку были некоторые надежды и проводились эксперименты но жава выиграла в этом.
2. Это как раз материал для отдельной статьи - скоро выпустим. Вкратце - довольно тяжело, но успешно. Кто хотел - того мы переучили с помощью курсов, тренингов и т.д. Ну почти вся команда мигрировала собственно. В дурку никто не уехал )
3. Go — норм вариант, и мы его рассматривали. Он действительно быстрее стартует, проще по синтаксису и хорошо подходит для микросервисов с высоким уровнем параллельности.
Но у нас проект не только про микросервисы, а про большую экосистему: интеграции, очереди, транзакции, сложную бизнес-логику и долгоживущие процессы.
Здесь Java даёт больше зрелых инструментов “из коробки” — Spring Boot, Spring Cloud, Spring-batch, Spring-whatever ), средства тестирования, мониторинга и оркестрации.
Go в этих областях требует больше ручной сборки и собственных решений, а мы как раз шли в сторону унификации и стандартизации.
SerafimArts
В PHP из коробки более мощная система типов. В PHP null - это null, а не псевдо-object. Никаких ошибок NPE в принципе нет и использовать NULL не только можно, но и нужно. В PHP есть алгебраические типы данных, есть юнионы и интерсекшены. И это всё из коробки.
А прикручивая линтер получаешь и дженерики, и коваринтантные/инвариантные и прочие параметры и даже call-site variance для дженериков (чего даже в котлине нет).
Плюс, не стоит забывать о таких типах в PHP как
int<0, 42>илиnon-empty-string, когда даже в Scala подобное что-то не припомню что возможно.А что мешает взять свул и использовать и многопоток, и воркеры и вот это вот всё?
gun2rin
Да что угодно можно конечно сделать. Взять это, это и вот это и дело в шляпе) Но так не работает в долгосрочном плане, мы убедились в этом.
PHP серьёзно прокачался — типы, юнионы, интерсекшены, даже алгебраические конструкции через стат-анализаторы. Но важно понимать: это всё надстройки, а не часть самого языка и рантайма. В Java строгая типизация встроена изначально, и на ней держится весь экосистемный фундамент.
То же и со Swoole — мощная штука, но отдельный движок со своей инфраструктурой и зависимостями. В enterprise-реальности это значит: поддержка, обновления, CI/CD, совместимость — всё на вашей совести.
Ну и например коллекции — отдельная история: хочешь нормальные типизированные структуры данных — ставь стороннюю библиотеку, следи за обновлениями и совместимостью.
В Java это всё идёт из коробки и живёт десятилетиями без боли.
SerafimArts
Только это на уровне языка. А на уровне стат-анализаторов дженерики и прочее.
vkdv
Товарищи просто свой непрофессионализм свалили на пхп) есть отличные решения типа porto+apiato+swoole. Да и без Porto + Apiato многое можно было решить "руками" Если включить голову. Ну и Ларавель они не знали естественно, иначе не писали бы про крон и проблемы с бэкграунд задачами, для многих они ушли в 2013-м. В целом я сижу на архитектуре PHP с 2020 года которая решает 90 процентов указанных проблем и просто превосходно масштабируема, имеет атомарный слабо связанный код и прекрасную 100 процентную надёжную возможность покрытия тестами, плюсом - низкий порог входа для джунов в проект и высокую базовую безопасность. DDD в PHP была ограничено популярно еще в 2012-м, А классический MVC в Java spring я встречал в проектах и намного позже и сейчас уверен многие кодят через классический MVC.
Но в целом автор затронул действительно важную и интересную тему, до сих пор многие компании не понимают что такое "архитектура" И лепят как "на душу положат" А потом вырастают монстры
SerafimArts
;)
satmaelstorm
Не спорю. И pthreads есть еще и много всего. Но ZTS и еще одно расширение. Но - главным образом - ZTS. Это я и назвал "танцы с бубном" :) Может быть я и не прав.