Рассказ подрывника основ, или Как мы строили магазин на Linux

Логотип компании
Рассказ подрывника основ, или Как мы строили магазин на Linux
Как и положено правильной истории, у этой есть преамбула, фабула и мораль. Причем преамбулы две.
Я пойду пошшупаю: быват ишшо оптический обман здрения!
М/ф «Волшебное кольцо» (Л. Носырев, 1979).

Я в общем, тут чуть не подорвался...
Просили рассказать. Мамаша! Что, я не понимаю? ...
Ну, действительно, чуть все не сыграли в!..
М.Жванецкий


Как и положено правильной истории, у этой есть преамбула, фабула и мораль. Причем преамбулы две.

Преамбула первая

Степь... Канал...
Идет баржа... Белая!..
Длинная, как!..
Ромашки!.. Ну просто!..
И тут подрывники суетятся!..
Заложили килограмм по пятьсот тола и тротила... его знает!

М.Жванецкий
==========================================
Once upon a time, то есть, говоря по-русски, в 90-х годах прошлого века, разругавшись со своим АСУ-шным начальством, я ушел работать механиком — в ОГМ Светогорского ЦБК. Моя работа заключалась в написании софта для учета подшипников. Поскольку, как это обычно бывает, никто толком не мог мне сказать, что именно нужно сделать, я решил написать «нечто универсальное». И написал. Называлась моя софтина OWTable, исполнена она была на Clipper и представляла собой ядро, считывающее конфигурационный файл. В файле же были описаны структуры всех таблиц, подчиненность и т.д. Ядро обеспечивало набор стандартных операций. Никогда не забуду первого сеанса демонстрации программы. Я занес пару сотен строк в базу и торжественно вывел их на матричный принтер. Старый механик потрясенно прижал листки к груди. В глазах его стояли слезы. «Это что?» — воскликнул он. «Если я сейчас в эту штуку, — он показал рукой на принтер, — засуну эту книгу… — он задумчиво взял с полки полупудовый фолиант и с ленинским прищуром прицелился, — то все это залезет в компьютер?»

Идея универсального ядра оказалась столь плодотворной, что когда в «Кее» мне понадобилось автоматизировать работу торгового предприятия, я пошел примерно тем же путем. Никаких «1С» тогда еще не существовало, Windows в учебниках называли «бессмысленной оболочкой». На Clipper  было написано ядро, обеспечивающее набор стандартной бизнес-логики. Я назвал его Shop и с тех пор высказывания типа «надо поковыряться в Shop-е» прочно вошли в нашу жизнь.

Это был славный зверек, умный, шустрый, надежный, не требовательный к ресурсам и потрясающе гибкий. Все делалось через файлы настройки и, к моменту снятия с эксплуатации в 2010 г., исходные тексты ядра были уже лет десять как утеряны «за ненадобностью». А развернуть снова компилятор и линкер от Clipper я смог бы только под страхом смертной казни.

Однако у всего в этой жизни есть свое начало и свой конец. Тихо умер DOS, стали анахронизмом файл-сервера. И в 2005 г. в штаб-квартире воцарилась Axapta. Которая тогда была еще не совсем Microsoft и совсем не Dynamix. Но Shop-а уцелела. Она продолжала трудиться во всех магазинах сети, исправно обеспечивая складской учет, работу операторов безналичных расчетов и многое другое. Ставить локально Axapty в каждом магазине было безумно дорого, идея централизованной системы разбилась о рифы качества связи в далеких Верхненижненсках и прочих Заднепередонсках. Shop-у теснили сделанные на злобу дня доработки в .NET и вынесенные на внутренний портал функции. Но она держалась. Однако уже чувствовалось, что дни ее сочтены. И в 2007 г. был открыт проект реавтоматизации.

Преамбула вторая

А главный орет: "Махну платком!..
Но только - по платку!..
Если дернешь!..
Мы ж будем проплывать!.. Следи за рукой!.."

М.Жванецкий
=============================================
1С — удивительно простая и последовательная система. Не важно, что вы пытаетесь на ней сделать, все равно получится бухгалтерия.
    Основная проблема таких проектов в том, что пользователь уже «балованный», на кривой козе к нему не подьедешь. У него все давно автоматизировано, к каждой кнопочке он привык, и будет биться за нее до последней капли твоей крови. Поэтому типовой системой не обойдешься, все придется дотачивать на колене напильником. Рекламные заявления о «супер-системах, которыми пользуются 90% всех торговых предприятий деревни Гадюкино» были «отметены с негодованием, как неорганизованные» (читайте Стругацких). В качестве платформы была выбрана «1С v8.1». После долгих колебаний определился и подрядчик. Который так и не доделал проект, объяснив, что «из-за кризиса проектные команды сократили». Мы доделывали проект сами, по локоть в крови, и в 2008 г. первый магазин сети перешел на «1С».
Когда-нибудь я напишу сагу об этом эпическом подвиге. А на стене петербуржского магазина по адресу Московский, 172 появится мемориальная табличка со словами: «Ненастным октябрьским утром 2008 г. этот магазин первым принял на себя удар от внедрения «1С». Подвиг ваш — бессмертен. Опыт ваш — бесценен. Память о вас — вечно в наших сердцах». Время шло, конфигурация обкатывалась. За первым магазином пошли следующие.

Мы отработали классную процедуру развертывания. Как говаривал Лев Толстой,  «Die erste Kolonne marschiert, die zweite Kolonne marschiert.» . В офисе готовился полный комплект железа, сервера и рабочие станции, ставился весь софт. Магазин — штука не простая. Сервер базы данных, сервер «1С», файлопомойка, сервер AD, VPN, связь с эквайрингом и многое другое. Специализированное оборудование, принтеры липких этикеток, терминалы сбора данных,  фискальные регистраторы, десятки рабочих станций... Все это завозилось в очередной магазин, а с вечера мои «ИТ-командос» десантировались на объект, чтобы утром магазин уже стартовал на «1С». Старое железо отправлялось в апгрейд. Мы переводили один магазин в 10 дней. И все это время я задумчиво поглядывал на кривую расходов, которая явно пыталась изобразить из себя Монблан. Серверное железо, лицензии на MS-сервера, лицензии на SQL, лицензии на ОС на рабочих станциях, лицензии «1С» и куча железа, не подлежащего апгрейду и сваливаемового грудой на складе.

Фабула классическая

Ну, он только собрался, тут все готово... баржа огромная, ну, как!..
И ни одной!.. Ну, действительно, как!.. Ну, точно!..
Он уже поднял платок, мы думаем: ну!.. Бинокли...

М.Жванецкий
===========================================
На очередном, вовсе не  ИТ-шном, конгрессе меня попросили провести ИТ-шную секцию для директоров и владельцев бизнеса. Что может заинтересовать владельцев?  Достижение результата с минимальными затратами. И мы с Google и SUN решил рассказать про СПО. Получилась классная секция, и вот тогда я всерьез задумался. Типовой проект локального магазина на СПО. Кубик, черный ящик. На вход цены, количества и данные о приходе товара, на выходе данные о продажах. Кому какая разница, что там внутри? Мы так долго говорим про СПО, что пора уже что-то сделать. «С одной стороны, начальные затраты..., хотя если принять во внимание TCO... Не забывая о рисках, следует отметить... хотя между тем...»

Пора просто поставить эксперимент и решить: ходим мы туда, или нет.  Ну сколько реально может стоить такой проект? Ну не получится, что — кроме денег — мы потеряем?
 Мы не очень рисковали проектом перехода на «1С» в целом. В конце концов, типовой магазин на Windows был отработан, не получится на Linux — будем делать то, что умеем.

Нужны были энтузиасты и мы их нашли: ГНУ/Линуксцентр. Они нас выслушали и лихо заявили, что тут «делов-то на две недели». Это был мой далеко не первый проект, и их оптимизма по срокам я не разделял — сразу умножил на два, прибавил 70% и еще раз умножил на два. Я хорошо понимал, что лезу в совершенно неизведанную область и был морально готов к тому, что может вообще ничего не получиться.
Будем «тренироваться на кошках», решили мы. Создадим полигон. А потом уже решим, какой из магазинов исполнит роль подопытного кролика.

Тут кто-то как заорет: "Стоп!.. Прошу!.."
А главный в мегафон: "Кто крикнул "стоп"?!
Мне интересно, я сейчас из нее!..
Каждую слушать!..
Мы ж баржа!.. Нас же несет!..
Чем я этот "стоп"?! Об какие берега?..

М.Жванецкий
 
=============================================
Мы выделили учебный класс, поставили сервер, аналогичный боевому, и нужное количество рабочих станций.  Если бы я был ИТ-директор не в дырявом свитере, а в костюме «от Кардена», то скорее всего ничего бы не получилось. Эти парни могли легко свести с ума любого последователя PMIBook. Linux-инженеры — это вообще что-то особенное. Именно так изображают ИТ-шников в комиксах. Их рабочий день может начаться в 6 вечера, хотя они клятвенно обещали быть на месте в 10 утра. Ну просто немного проспали, с кем не бывает! Они могут закончить работу в пять утра, отчего проспят и на следующий день. Они очень умные, очень добросовестные и толковые парни, но идеи к ним приходят в любое время суток. В конце концов, мы смирились с неизбежным и выделили им прямой канал в учебный класс. Не через 2 недели и даже не через месяц, но проект задышал. 

Фактически мы проводили не одно изменение, а несколько. Мы перешли на виртуальные сервера на VMWare, перешли на Linux, на работу под эмулятором и на терминальный режим. Как говорила одна дворняга, вспоминая первую встречу с баобабом,  «это было просто неописуемо».
По сути, параллельно работали 3 команды. И каждая достойна того, чтобы воздать ей должное.

Парни из Линуксцентра круглые сутки пытались заставить работать под Linux многочисленное торговое оборудование. Все это напоминало маленький, но очень хорошо организованный сумасшедший дом. Citizen знать не знал ни о каких Linux, однако к его принтерам подошли драйверы от Zebra, которые не подходили к самим Zebra. Логику понимания прозрачности и печати штрих-кода явно придумывали какие-то блондинки.

Etersoft, эмулятор которого мы использовали, выделил два своих отдела, чтобы оперативно выпускать патчи, поскольку под такой нагрузкой их продукт еще никто не «прокачивал». Они смотрели на нас с почтительным и опасливым уважением, примерно так люди на улице смотрят на временно не буйного сумасшедшего.

Команда питерского Тринити занималась поставкой железа, настройкой и конфигурированием VMWare. Это были философы и оптимисты, жизнерадостностью и спокойствием напоминающие бассет-хаунда.

В качестве базы данных мы, следуя рекомендациям «лучших собаководов», выбрали Postgree. Наша конфигурация работала на ней необычайно устойчиво. Я никогда в жизни не видел ничего подобного. Она готова была стоять просто вечно! На всякие досадные вмешательства, например движения мышью или нажатие клавиш, она реагировала со скандинавской невозмутимостью. Чувствовалось, что прежде чем что-то изобразить на экране, ей надо крепко подумать. К счастью, выяснилось, что команды «1С» и IBM совместно  прилагают гигантские усилия, чтобы IBM-овская DB2 хорошо работала с продуктами «1С» и SAP. В DB2 даже оказался специальный режим совместимости c «1C». Мы проверили, и оказалось, что бесплатного варианта DB2 достаточно, и он работает отлично.

Окончательно получилось следующее. На IBM-сервере с помощью VMWare были подняты виртуальные сервера. «1С» работала в терминальном режиме, в режиме эмуляции под WINE@Etersoft. Несовместимые режимы были блокированы и переписаны. В качестве каталога был выбран MDS, в качестве СУБД — DB2, доступ в Интернет контролировался с помощью SQUID. Офисный пакет — Open Office, браузер — Firefox, почтовый клиент — Thunderbird. Оборудование, которое не желало жить с Linux, например фискальные регистраторы, осталось под Windows. Но производительность все равно оставляла желать лучшего. Мы подкручивали и подпиливали. Шел третий месяц проекта. Мы уже раза два заявляли, что следующий магазин переводим на «1С» уж точно под Linux. Но команда технологов, выкрикивая  в воздух « изречения скорее фольклорного, чем дипломатического характера», тестировала системы. И вот, в один прекрасный момент, главный технолог Антон неуверенно произнес: «по-моему, производительность более-менее приемлема».

Однажды и на фасаде магазина на Ленинском появится своя мемориальная доска: «В этом магазине впервые в истории «Кея» была развернута конфигурация Linux-магазина».

Ты ж смотри, какая-то плывет... вещь!"
Глядят все, аж!..
Всплыл - тротил или тол, вся в проводах,
никто и не знает, они же специалисты.
Как она эту баржу догнала!..
Мы все на барже, она под баржой!..

М.Жванецкий

===========================================
Начало 2010 г. В качестве первого эксперимента был выбран магазин «поменьше» — чтобы минимизировать потери, если все «встанет колом». Весенним вечером мы прибыли в заданную точку на Ленинском проспекте всей командой. У меня была отдельная особая миссия. Она заключалась в принятии на себя ответственности. Если что-то пошло бы не так, я должен был сказать: «Стоп, все назад». К трем часам ночи диспозиция была следующая: в одном углу слышался нервный смех «1С»-программистов. У них что-то «не шло». Стойку оператора безнала оккупировал лохматый линуксоид с лицом и футболкой одинакового светло-салатового цвета. Он с безумным видом с необычайной скоростью колотил по клавишам. Я стоял сзади и исправлял ошибки, руководствуясь общими знаниями орфографии английского языка. Часам к 7 утра все потихоньку заработало.

 А мы пошли отсыпаться, чистить перышки и готовиться отвечать на вопросы пользователей и запускать следующий магазин.
Так мы поняли, что переход на «1С» — это, конечно, не просто. Но переход на «1С» под Linux — это достойно Хичкока. Реальный магазин сильно отличается от учебного класса: нагрузкой и разнообразием версий старого железа. Это был забег в мешках по минному полю. Формы, которые «проглатывают» пробелы, объединяя все слова в единый текст. Принтеры, печатающие прогноз погоды на Марсе вместо липких этикеток. Отваливающиеся ключи защиты «1С». Черт бы побрал эту защиту, она выпила у нас крови намного больше, чем все остальное, вместе взятое! Периодически сходящий с ума Wine…

И все это в жестком графике. Один магазин в 10 дней. У нас заканчивались пятизначные коды товара, старые системы не поддерживали шестизначные, и мы бежали наперегонки с минутной стрелкой. Каждая новинка приближала нас к моменту, когда  все магазины без «1С» просто перестанут видеть новый товар. Мы успели. На месяц раньше срока.

Это ж был полный!..
Ты б свою Дуську!..
Вот такая приключилась.

М.Жванецкий
=================================================
Каждый новый магазин давался легче предыдущего. Мы перевели на Linux и учебный центр, в котором обучали работе с «1С» персонал переводимых магазинов, и ребята сразу учились работать на том, что ставилось к ним в магазин. И наступил день, когда мы вдруг поняли, что старой Shop-ы больше нет. Я даже не напился. Хотя хотел: ушел кусок жизни. Я держу в руках свою старую фотографию, на которой мне 30. Штормовка, гитара. Никакой лысины. Когда-нибудь я соберусь и сделаю коллаж. На синем фоне заставки главного меню две фотографии — 30-летнего и 47-летнего меня. А эпиграфом напишу фразу белгородского кладовщика, которую он с печалью произнес после перехода на «1С»: «Шопа, — сказал он печально, — она, сцуко, надежная была».

И, наконец, мораль. Свежая и оригинальная

Сейчас развернуто пять типовых Linux-магазинов. К моменту выхода статьи откроется шестой, и тоже на Linux. Отработана процедура боевого развертывания. Мы заработали для своего бизнеса немного денег. С учетом старого железа, которое мы теперь можем использовать, и стоимости лицензий, в 2010 г. бизнес не потратит порядка $100000. Стоят ли наши нервы и нервы наших сотрудников этих денег? Не знаю. Может быть, и нет, если бы мы на этом остановились. Но фирма развивается, и каждый новый магазин обходится на полтора — два десятка тысяч зеленых  дешевле, чем раньше. И, главное, мы теперь точно знаем — «туда» можно ходить. Флажков нет.

Олег Вайнберг, ИТ-директор «Компьютер Центр «Кей»


Опубликовано 21.09.2010