2012 год. Бандеролька - сервис по доставке посылок из США по всему миру - стремительно превращается из гаражного эксперимента в бизнес, который теперь оборачивает миллион долларов каждый месяц.
Я одной рукой программирую на PHP, другой записываю это видео, тут видно интерфейс - Drupal CMF, на которой работает Бандеролька. Кто помнит Друпал?
https://www.youtube.com/watch?v=sia6W5JAZ0k
Друпал - это система "low code" программирования, как сейчас такое называют. Мышкой в админке добавляешь на сущности поля, выбираешь тип данных, потом собираешь таблички (модуль для списков назывался views) и потом это все склеиваешь кусками PHP кода.
Задумали мы, например, сделать сущность "посылка". Добавили мышкой к ней десяток полей. Угадаете, сколько табличек в MySQL создаст Друпал седьмой версии для такой сущности?
Правильно, двадцать.
На каждое поле - 1 табличка для актуального значения поля, и еще одна для хранения истории изменений.
В принципе, архитектурное решение неплохое, если мы говорим об универсальности и one-size-fits-all - получше, чем запускать ALTER TABLE parcel .... когда кто-то в веб интерфейсе тыкнул на кнопку "добавить поле" (так оно работало в Drupal 5 - при пустой базе все отлично и красиво, при наполненной базе - на блокировках таблиц MySQL все падало).
Но такое дробление на таблицы работает, когда у тебя в день добавляется сто сущностей - а не пять тысяч каждый день, когда это уже настоящий продукт с кучей данных.
1 новая посылка - 20 x INSERT INTO parcel ...
Отрендерить список на 50 объектов - 3 секунды тяжелой работы, успели глотнуть чайку, и вот Апач, поднатужившись, выплевывает страничку.
Когда финансисты просят написать быстренько SQL для выгрузки данных - материмся и охереваем от количества JOIN-ов в простейшем запросе, писать такое руками было просто невыносимо.
Самое страшное творилось в наших кастомных PHP модулях, где надо было использовать Drupal API и сложную систему хуков. Задачка типа “добавить ajax автокомплит вот тут, и чтобы второе поле разворачивалось если первое заполнено” превращалась в двухдневный квест и не приносило никакой радости - то говно, которое ты написал, не обогащало тебя каким-то полезным или переносимым знанием для обычного, нормального мира веб-разработки, это больше напоминало заклинания для бога Друпала. Половина конфигов хранится в БД, половина - в коде. DEV / STAGING среды? Не сегодня, все равно на проде работает иначе!
Производительность подобной системы можно представить себе. Чтобы открывались страницы - надо закешировать ВСЕ. Кеш складывался в файлы и Redis. И этот кеш был очень большим. Иногда (часто) что-то внутри этого монстра крякало, и кеш надламывался под своим весом.
До сих пор помню липкое ощущение тревоги когда продакшн сайт просто начинает отдавать белую табличку на ломаном кеше.
Бежишь в админку, дергаешь Flush cache, монстр замирает секунд на 30. Посетители в этот момент грустно тыкают F5 в браузерах. Получится ли очистить кеш в этот раз? Жутко, непредсказуемо, и неприятно.
Когда мы наконец переехали с Друпала на Yii2 - это было самое чудесное чувство, когда наконец можно спать спокойно, а все странички открываются быстро и стабильно.
На фото - Аляска, Анкоридж, 2011 год. Первая моя поездка в США - я первый раз увидел синий лед настоящих ледников и огромного лося, переплываюшего протоку. Лоси в Анкоридже регулярно пасутся прямо перед окнами малоэтажных американских домиков. Там мы первый раз лично встретились с Павлом, идейным вдохновителем и основателем Бандерольки, который за год до этого нашел наше с братом "агентство по созданию Drupal сайтов" и попросил немного помочь ему в разработке. Кто знал, что эта работенка затянется на 15 лет?