ermouth: (Default)
[personal profile] ermouth

Сайт Формозы работает на Битриксе. В весьма дорогой комплектации, имхо правильное название которой – Кривое Говно.

Битрикс глючит – пользователи жаловались, что в магазине Битрикса (штатный функционал) пропадают разделы и товары. Глючит модуль, загружающий прайсы из 1С.

Впервые мы заметили эту проблему в декабре. Повторно она вылезла в марте. Мы сначала решили, что дело в нас. Потом – что в менеджерах офлайного магазина, заносящих товары. Потом, всё перебрав и написав контрольный скрипт, выяснили, что Битрикс глючит – причём глючит как и любое такое говно, по-тихому. Записывая в логи “Всё ок”. Это выяснилось окончательно в апреле – и мы написали в саппорт.

Криворукие из саппорта Битрикса две недели трахали нам мозги, регулярно присылая нам обновления скрипта, создавая видимость работы, отвечая на тикеты… Скрипт всё равно глючит, разделы и товары пропадают. Они даже не подобрались за эти две недели к причине проблемы.

После звонка и разговора на повышенных тонах проблеме присвоили типа какой-то там важный статус. Отправили из саппорта разработчикам. Я думал, волшебный пендель поможет. Я был дурак и недооценил степень застойности болота.

Разработчики, почесав репу один день и палец о палец не ударив для решения собственной криворукости, посоветовали нам перенастроить сервер и, по сути, самостоятельно реализовать функционал запуска по таймеру авторизованного php-скрипта.

Дело, на минуточку, происходит в Винде, никакого cron’a там нет, а назначенные задачи по ряду причин не подходят.

Проблема происходит потому, что кривой компонент Битрикса не успевает отработать 15000+ строк в csv-файле за 10 отведённых минут (занимает примерно 15 минут). А кривой Битрикс-агент убивает “зависший” скрипт и запускает новый.

Вообще, это надо было ещё ухитриться написать такое говно, которое на многоголовом жирном  Intel Xeon разбирает по 15 строк в секунду. Отличная скорость разбора и записи простых текcтовых данных – примерно 300 килобайт в минуту. Это 40kbps – скорость работы дешевого модема в конце 90-х годов. Я не могу себе даже представить степень криворукости и непрофессионализма говнокодера, родившего такое. Скрипт, как мне показалось по беглому осмотру, типичный пример сложности O(n^2), а достаточно O(n).

Потом надо было ещё ухитриться написать агенты, не учитывающие состояния запущенного скрипта.

А потом надо было ухитриться, протрахав клиенту, заплатившему несколько тысяч долларов за лицензию, мозги две недели, свалить решение проблемы на него.

Одарённые из Битрикса, с кем я имел дело, поимённо:

  • Иван Лузин – робот из партнёрского отдела Битрикса, который ухитрился проговорив со мной несколько минут гнусавым шёпотом, несколько раз повысить на меня голос, поучить меня жизни и не ответить ни на один заданный вопрос.
  • Денис Шаромов – который пообещал поставить проблему на контроль, результатом которого явилась просто констатация проблемы. “Да, мы обосрались – но решать вам”.

Гореть им в аду.

А вам, дорогие читатели, как только предлагают сделать магазин на Битриксе – сразу бейте в лицо.

Date: 2012-05-04 06:43 pm (UTC)
From: [identity profile] morfizm.livejournal.com
Надо же. Ты про Битрикс уже писал как-то раз, ты всё ещё не начинаешь разговор с клиентом сразу с предложения перейти на другой фреймфорк?

Date: 2012-05-04 07:13 pm (UTC)
From: [identity profile] rezkiy.livejournal.com
а скрипт io-bound или cpu-bound?

Date: 2012-05-05 03:26 pm (UTC)
From: [identity profile] ermouth.livejournal.com
я не копал так глубоко. по беглому взгляду -- cpu-bound, оно алгоритмически чудовищно.

Date: 2012-05-04 07:14 pm (UTC)
From: [identity profile] a-bishop.livejournal.com
а чем eCommerce не устраивает?

Date: 2012-05-05 07:37 am (UTC)
From: [identity profile] ermouth.livejournal.com
не я платформу выбирал.

Date: 2012-05-05 07:37 am (UTC)
From: [identity profile] ermouth.livejournal.com
да решим мы проблему, просто убило мозгоёбство и отношение. ну, кривому говну -- кривая техподдержка (

Date: 2012-05-05 08:51 am (UTC)
From: [identity profile] tvguide-khv.livejournal.com
ну массы же как-то юзают... просто врут про то что масштабируется нормально. для хомпаг с меняющимися на морде тремя картинками это писано.

Date: 2012-05-05 05:14 pm (UTC)
From: [identity profile] net-cat.livejournal.com
Массы юзают говно во всех сферах и отраслях.

Date: 2012-05-05 01:36 pm (UTC)
From: [identity profile] 1c-bitrix.livejournal.com
Всегда у меня дилемма, отвечать на такие вот сообщения или нет..

Ну давайте сначала по существу.

Я Денис Шаромов, руководитель отдела поддержки компании Битрикс. К вашей проблеме относились очень внимательно. Но ясности с ней не было полной. Я лично разговаривал с вами по телефону пытался вникнуть в проблему и найти какое-то решение. Бывает, что ты пытаешься помогать решить проблему, а со стороны клиента занимают такую позицию, что как говорится "сквозь зубы", и не помощи в локализации и сам еще дурак, что позвонил. Так было и с вами, к сожалению.

Разговор с вами не помог локализовать проблему, но некоторые эксперименты помогли выяснить причину проблемы.

Вы делаете тяжелую операцию импорта, длительностью более 10 минут, на хитах 4 раза в день.
1. Изначально озадачило нас, почему 10 минут. 15 000 товаров не так много, должно было бы быть быстрее.
2. Ну и делать это на хитах совсем неправильно, для таких долгих процедур есть возможность вынести агенты на внешний планировщик.

Что в итоге выяснилось.

1. Проблема медленного импорта.

Импорт работает медленно потому что в файле импорта нет XML_ID, в итоге поиск существующих разделов идет по названию, что очень долго.
Банально, XML_ID с индексом, строка без. Ероме того, в XML файле с вашими данными есть лишние данные, которые парсятся, но не импортируются.
Проблема бы решилась, если бы вы выгружали символьный идентификатор, настроив для него соответствие в профиле импорта.

В случае такого изменения импорт бы работал быстро. Не за секунду, конечно, 15000 товаров в XML надо разобрать и проверить, но все же было бы быстро. Но и в этом варианты мы рекомендуем выносить на агентов такие процедуры.

2. Проблема импорта на хитах.

На вашем проекте было выявлено, что два агента запускались одновременно и с отставанием в 10 минут делали импорт в тот же инфоблок.
Мои сотрудники начали пытаться получить положительный результат при работе с агентами. А не нужно было это делать.
Надо было сразу переводить выполнение на задания и планировщик.

А теперь не по существу.

Можно ли было быстрее решить вашу проблему? Да, я думаю можно было быстрее.

Могли ли вы внимательнее относиться к разработке своего проекта? Да, как программист вы должны понимать физику процесса, а не занимать поверхностную позицию.

Date: 2012-05-05 02:24 pm (UTC)
From: [identity profile] ermouth.livejournal.com
Мы купили лицензию, выполнили техтребования и никому не могло и в голову прийти, что 15000 строк могут разбираться несколько минут -- как я уже написал, модуль импорта делал криворукий какой-то. Это не мы, а вы должны были подумать как программисты. Подарите Кнута говнокодеру, который писал импорт, ну чесслово.

Или предупреждайте честно, что ваша поделка непригодна для "больших" (15000 строк как я понял невыносимая нагрузка для софта за несколько килобаксов) наборов данных. А вы -- как и полагается неумехам -- валите всё на клиента и его данные.

По поводу хмл-ид. Начнем с того, что это не xml, а csv. XML-ID есть в каждой строке -- вы поленились даже файл открыть. Ну, куда там. Отписки то проще писать.

И не надо про то, что было бы быстрее -- у меня написан скрипт, который разбирает тот же csv и пишет экселевский прайс. Он отрабатывает за 5 секунд. Я потестировал с проверкой и укладкой в MySQL-базу -- 30 секунд, это при том, что у меня там говнокод и очень слабая виртуальная машина. Видите ли, в базу можно укладывать не построчно, а сразу по несколько строк -- это, вы не поверите, круто быстрее.

Чуваки, 15 минут -- это запредельно, без всяких оправданий. Остальное -- тоже. И я вижу, что вы даже не почешетесь.

Ну ничего, Гугл помнит всё, и я вам торжественно обещаю, что это не конец истории. Потому что вы украли у нас кучу времени, продали нам говно с ограничениями, про которые не удосужились нас уведомить, и до сих пор считаете, что в этой ситуации мы неправы и делали что то не так.

Вместо того чтобы напрячься и решить проблему.

Date: 2012-05-05 02:39 pm (UTC)
From: [identity profile] ermouth.livejournal.com
И да, про "поиск строк". Искать, чуваки, в таких случаях надо не строки, а их хэши. Поиск по хэш-таблице вообще О(1) сложности операция.

Date: 2012-05-18 09:18 am (UTC)
From: [identity profile] boombick.livejournal.com
Какие хэши? Криворукие битриксоиды даже слов такие не знают. Битрикс - бесподобное феерическое говнище, изначальное написанное так, чтобы можно было бесконечно тянуть его поддержку. Мне кажется, что там просто 1000 обезьян за клавиатурами проверяют теорию вероятности. Другого объяснения я не вижу

Date: 2012-05-18 05:10 pm (UTC)
From: [identity profile] ermouth.livejournal.com
битрикс имхо как венда -- по деталям вроде ок, а в целом -- чёрте что (

Date: 2012-05-18 05:16 pm (UTC)
From: [identity profile] boombick.livejournal.com
http://habrahabr.ru/company/bitrix/blog/139721/ - тред, за который мне слили карму в ноль :)
Срач начался с фразы:
Битрикс изнутри напоминает unix — набор простых и неубиваемых концепций, никаких извращенных десятиэтажных объектных конструкций, доступным избранным умам. Поэтому простой или сложный проект делается на Битриксе — неважно, куда не ткни, система раскладывается на простые кубики, покрытые изнутри инструментами профилирования и отладки.

Это вынесло мне мозг просто :)

Date: 2012-05-18 05:36 pm (UTC)
From: [identity profile] ermouth.livejournal.com
ой, ну нет, какой нахрен юникс. Битрикс как раз напоминает винду -- набор всеобъемлющих сложных концепций, умеющих всё и всё хреново. и с чудовищной моделью безопасности -- медленной, тяжелой, всеобъемлющей -- и реулярно дырявой.

Да даже чисто внешне -- явно пузыри с win xp срисовывали. ну и деревья эти виндовые, и layout как в mmc.

Date: 2012-05-21 08:22 am (UTC)
From: [identity profile] metaclass.livejournal.com
Они может еще и строки линейным поиском ищут, вместо хотя бы двоичного?

Date: 2012-05-18 08:06 am (UTC)
From: [identity profile] norguhtar.livejournal.com

Импорт работает медленно потому что в файле импорта нет XML_ID, в итоге поиск существующих разделов идет по названию, что очень долго.


Тут цитата вот эта отлично подходит:

— Так у нас проблемы с производительностью, надо добавить кэширование, вертикальное партиционирование и NoSQL DB для логинов.
— Парни — я тут посмотрел EXPLAIN — у Вас fullscan запрос на 4,000 строк, я попробовал создать индекс — все ускорилось в 26 раз

Date: 2012-05-07 08:01 pm (UTC)
From: [identity profile] x-fox.livejournal.com
15 минут? Хехехехехе ))) У нас прайс в Предприятии 1.5 часа экспортируется ;)

Date: 2012-05-18 05:11 pm (UTC)
From: [identity profile] ermouth.livejournal.com
в эксель конечно же? пишите csv, оно быстрее вроде.

Date: 2012-05-21 02:14 pm (UTC)
From: [identity profile] qmbqx8gh.livejournal.com
Откройте страничку /bitrix/admin/sql.php и выполните "create index ix_section_name on b_iblock_section(NAME)".
Напишите сюда сколько теперь времени уходит на импорт 15K строчного файла.

Date: 2012-05-21 03:55 pm (UTC)
From: [identity profile] ermouth.livejournal.com
спасибо, но мы решили уже по-другому.

Date: 2012-06-08 06:15 pm (UTC)
From: [identity profile] Максим Фалалеев (from livejournal.com)
Битрикс унылое говно. Нам попался проект на битриксе, чистейший избранный говнокод.
Вначале мы подозревали, что прошлая команда разработчиков была уровня "студент", но как оказалось - это сам битрикс, в принципе, обязывает разработчика говнокодить.

Процесс разработки выглядит примерно так:
1 неделя: геморой и порождение костылей (не переписывать же проект с нуля).
2 неделя: покрывание матом и создание кукол вуду команды битрикса.
3 неделя: задумываемся сделать rm -rf проекта, выпить бутылку виски за упокой и собрать все на Yii framework.

Они ведь это называют продуктом corporate уровня. Битрикс, вы оху*ли?

P.S. - Извините, слив эмоций, предел терпения.
From: [identity profile] livejournal.livejournal.com
Пользователь [livejournal.com profile] realun сослался на вашу запись в «Bitrix - Кривое говно, трехэтажный пиздец и тупая хуйня! (http://realun.livejournal.com/8488.html)» в контексте: [...] Я не буду расписывать все то что написали тут: http://ermouth.livejournal.com/557869.html [...]

Date: 2012-11-08 01:03 pm (UTC)
From: [identity profile] stan smolin (from livejournal.com)
Поддерживаю все критические отзывы. Два раза сталкивался с битриксом. После первого раза зарекался вообще к нему больше прикасаться, но очень хорошо слезно умоляли знакомые. Второй раз тоже проебся около недели, все сделал, но до сих пор потрясывает, когда битрикс упоминают в моем присутствии. Особенно «нравилось» что битрикс использует несколько десятков тысяч файлов в нескольких тысячах папок.

Date: 2013-06-28 05:51 pm (UTC)
From: [identity profile] fahrain.livejournal.com
Я, конечно, наверное, уже поздно - но вы использовали транзакции при добавлении товаров? Там скорости будут в разы меньше. У меня 6 тыс товаров грузятся за десятки секунд. Правда за счет бОльшего расхода памяти

Date: 2013-07-11 08:13 pm (UTC)
From: [identity profile] ermouth.livejournal.com
попробуйте 20000 – и удивитесь, как время увеличится (раз в 15-20 на втором аплоаде). там не в транзакциях дело, а в кривом алгоритме сложности O(n^2). а достаточно O(n).

Date: 2013-07-11 08:50 pm (UTC)
From: [identity profile] fahrain.livejournal.com
Ну я делаю очень просто: сначала дергаем из базы данных все товары, делаем массив с нужными данными и - главное - соответствиями id->код товара. При добавлении/обновлении товара по коду ищем id и дальше мы уже знаем что с товаром надо сделать. Если код не нашли - значит надо добавить. Нашли - обновить. Если остались товары, которые не обновляли - то их удалить.

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

P.S.: кроме того, остается еще резервный вариант - соответствия между кодом товара и id можно сохранять в файл/спец.таблицу и пользоваться им для работы - так не придется дергать api битрикса для получения каких-то первоначальных данных, а просто собрать список id товаров на обновление и уже по этим id их и запросить. А не дергать все данные из всей базы товаров. Вообщем, даже 10-15 минут на работу алгоритма - это не так и много. Я тут встречал сайты где по два-три часа данные грузят. И без транзакций, по несколько запросов к базе на каждый товар :)

Date: 2013-07-11 09:08 pm (UTC)
From: [identity profile] ermouth.livejournal.com
Вы всё правильно пишете – только это предполагает самостоятельное написание модуля загрузки, то-есть бубен. Бубном история тогда и закончилось.

Про "10-15 минут – не так и много" – это всё хорошо, пока у вас есть крон. А там была винда.

Смысл поста был в том, что у продукта за $3К+ модуль импорта писал какой-то криворукий дебил, а другие криворукие дебилы вместо того, чтобы устранить проблему, кормили нас говном больше полумесяца.

Как бы не ждёшь, выполнив все техтребования и заплатив кучу денег, что тебя будут настолько бессовестно сливать, когда ты просишь устранить криворучие.

Date: 2013-07-11 09:14 pm (UTC)
From: [identity profile] fahrain.livejournal.com
Согласен, за такие деньги - в битриксе слишком много чего приходится допиливать и доделывать за разработчиками. Причем частенько - даже в базовом функционале. Кроме того, тех. поддержка знает еще меньше чем сам знаешь, документации почти нет - а та, что есть - не всегда актуальна. Комментарии и форумы - частенько бесполезны, пока сам не дорастешь до понимания как решать такую задачу. Тогда форумы опять-таки бесполезны - видишь какой там бред пишут. Вообщем да, все плохо.

Проблема в том, что особых альтернатив нет. Другие cms - еще хуже.

Date: 2013-07-11 11:07 pm (UTC)
From: [identity profile] ermouth.livejournal.com
вот по последнему вы преувеличиваете.

Битрикс действительно гэ. Просто архитектура не позволяет – сочинить на php что-то по-хорошему расширяемое, не дырявое и производительное достаточно сложно. Ну и конечно наблюдается в полный рост в php-системах вот это явление http://en.wikipedia.org/wiki/Greenspun's_tenth_rule. Причём добавление чисто функциональных фич (замыкания, карринг, функции как аргументы) в 5.3 ничего в комьюнити не поменяло – люди, пишущие на бейсике, обречены всю жись писать на бейсике. Да и перелопатить codebase предыдущих версий php-шных cms для изъятия велосипедиков довольно нетривиальная задача.

Но это не проблема – я ни разу не встречал ситуации, в которой нужен был бы весь функционал Битрикса хотя бы близко, поэтому мы ситуационно используем разные решения, не универсальные, которые уделывают битрикс по всем без исключения параметрам конкретной задачи.

Битрикс только по запросу клиента, с предупреждением обо всех прелестях.

Date: 2013-07-12 12:07 am (UTC)
From: [identity profile] ermouth.livejournal.com
вот по последнему вы преувеличиваете.

Битрикс действительно гэ. Просто архитектура не позволяет – сочинить на php что-то по-хорошему расширяемое, не дырявое и производительное достаточно сложно. Ну и конечно наблюдается в полный рост в php-системах вот это явление http://en.wikipedia.org/wiki/Greenspun's_tenth_rule. Причём добавление чисто функциональных фич (замыкания, карринг, функции как аргументы) в 5.3 ничего в комьюнити не поменяло – люди, пишущие на бейсике, обречены всю жись писать на бейсике. Да и перелопатить codebase предыдущих версий php-шных cms для изъятия велосипедиков довольно нетривиальная задача.

Но это не проблема – я ни разу не встречал ситуации, в которой нужен был бы весь функционал Битрикса хотя бы близко, поэтому мы ситуационно используем разные решения, не универсальные, которые уделывают битрикс по всем без исключения параметрам конкретной задачи.

Битрикс только по запросу клиента, с предупреждением обо всех прелестях.

Profile

ermouth: (Default)
ermouth

November 2021

S M T W T F S
 123456
78910111213
14151617181920
21 222324252627
282930    

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Feb. 2nd, 2026 04:51 am
Powered by Dreamwidth Studios