Злой одмин (vladdt) wrote,
Злой одмин
vladdt

Categories:

Централизация вс децентрализация.

aКак-то, уже в другой стране, в Акропольской Максиме, в кассах-автоматах – устроили с Форсажем интересный спор. (Правда завалить кассу как это вышло в Ики – не удалось. В Ики оказывается на ХР, хотя мне кто-то упорно доказывал что на Линуксе.) Но спор зашел о том, почему людей до сих пор не заменили правильными роботами, и вообще – смерть всем человекам! В смысле вечная тема всех сисадминов – как создать неубиваемую систему. Конечно на примере нашей конторы.

Есть два пути для таких конторок как наша – путь централизации и путь децентрализации.

Централизация – это понятно. Есть могучий датацентр, есть неубиваемые линии связи. И все пос-терминалы и прочая бугалтерия на всех сайтах пашет через них. Разделение баз на OLTP и DW – это все внутри самого датацентра, конкретные реализации это уже детали, в них не вдаемся.

Детецентрализация – это OLTP базы на местах, связаные репликами. А Data Warehowse – уже либо в центре, либо тоже зеркала на местах, для размазывания нагрузки.

Весь прикол в том, что у нас, например, создалась дикая смесь и того и другого. Единой архитектуры системы не существует как класса. Вся эта хрень больше всего напоминает покосившийся сарай, подпертый палками с разных сторон, с многочисленными пристройками разного возраста. “Вот это мы построили при Наполеоне, потому что пролетело ядро и разбило часть построек. Нужно было срочно чем-то заткнуть дыру. Вот эту будку мы пристроили потому что срочно потребовалось куда-то положить мешки с дерьмом, а места не было. Вот это мы заколотили, потому что с этой стороны когда-то пробрался вор. Вот это трогать нельзя, потому что его когда-то построили давно помершие строители. И что там внутри никто не знает, а инструкций они не оставили. Но оно работает. Если будет дуть с этой стороны, берем этот лист фанеры, и ставим сюда. А вот если подует с этой стороны, то все конструкции п..ц, но поскольку с этой стороны ветер ни разу не дул – оно пока стоит.”

Впрочем, подозреваю что в той или иной степени такая картина во многих крупных конторах. (Поправка. В той конторе что уже работаю – разительно не так.) Системный архитектор, говорящий родственнику президента: “А вот х.й тебе в нос, а не этот проект, потому что он нарушает целостность системы!” – несбыточная мечта любого ИТ-шного подразделения. Картина скорее всего обратная – проездом с Канар на Багамы, на обьект забегает Кто-то Очень Важный и говорит: “А немедленно передвинуть мне этот инфоцентр, он закрывает мне вид из любимого кабинета!” А то что в этом инфоцентре десяток машин и к нему идет толстенный пук кабелей – ему глубоко поипать. (Че, смешно? Это реальные и далеко не единичные случаи. Как у нас всякие пидары мановением руки курочили когда-то нормально спроектированную сеть – это отдельная и печальная история.) (Вот впрочем обедали с Альбертом, и он мне сказал, что когда-то была крутая и мужественная девушка, которая и выполняла роль системного архитектора. Без ее подтверждения не проходило ни одно изменение системы. Найти бы и пожать ее мужественную лапу! Но уже не доведется.)

Но если больше конкретики. У вас есть куча обьектов по стране, и это либо супермаркеты, либо грузовые терминалы. Вся эта хрень постоянно должна обмениваться данными, желательно, или даже обязательно – в реальном времени. Данных она генерирует – туеву хучу. В трудно представимых простому юзеру обьемах. Шарку или Линке обьяснять не надо, а вот если это читает кто-то не работавший в сетках с более чем 500+ машин – нужно пояснить. (Потому как даже Форсаж, вроде как слету могущий сдать на кучу сертификатов, откровенно сказал, что не поработав и не попробовав – просто невозможно понять что это в реальности такое. Это совершенно и абсолютно другое, чем администрировать сетку на 25-100 машин. Обьяснять бесполезно, это надо испытать на своей шкуре.) Вот допустим в деревне Гадюкино, где у вас есть филиал, какой-то колхозник закупает себе 10 мешков цемента. В филиале этих мешков нету, зато они в избытке на складе в Урюпинске. Проблем нету – система позволяет все сделать автоматически. В магазине товар закажут, на складе получат информацию, мешки погрузят в машину, машина максимум через день выгрузит их клиенту в нужной деревне. Все сопутствующие документы и все платежи за доставку генерируются автоматически. Это все в идеале. Потому что скажем если информация до склада по каким-то причинам не дошла – эти мешки может купить другой клиент, а потом доходит заказ и ой! (Мне как-то на иксбите какой-то такой домашний программистег доказывал что он подобную систему наклепает за недельку. ЛОЛ) Вот эта вот необходимость в реалтаймовой информации – очень критичная вещь. Потому как таких операций сотни тысяч за день и это миллионы реальных денег. За которые идет реальная ответственность. Чего с трудом могут себе представить домашние одминчеги или одинокие линуксоиды. Каждый обрыв связи, каждый глюк в информации, каждый простой такой системы – это тысячные, а иногда и миллионные убытки.

Как выглядит сама схема путешествия данных, почему так важна реалтаймовость и в каких именно данных? Вот стоит касса, по научному – POS-терминал. Допустим к ней подходит клиент с телегой всяких гудисов и желает унести с собой свой законный лут. Кассирша берет сканер баркодов и начинает их сканировать. Касса уже должна знать кучу вещей. Для начала – простейшие. Во-первых соответствие баркода и цены. Во-вторых – количество этих товаров на складе. В теории, где-то наверное есть какие-то простейшие системы для которых на этом все и заканчивается. Т.е. клиент дает деньги – кассирша нажимает кнопку “платеж завершен”, система отнимает товар со склада и прибавляет денег в бугалтерскую программу. (На самом деле она еще параллельно пишет копию данных в фискал, и это две системы никак собственно не связаные, что тоже порождает немало своих глюков.) В реальности, сложности начинаются еще на стадии цены. Касса получив баркод – тут же должна поиметь из базы сиюминутную цену товара. (А товар может быть уценен, переоценен, и т.п. “на лету”.)  Возможно что именно этот товар идет по своей ценовой категории – брак, стоял на витрине, повреждена коробка. Узнать нету ли в этот момент какой акции на этот товар, а значит высчитать скидку. Если акций несколько – выбирается та, что с большей скидкой. Далее проверка категории цен по клиенту – это может быть работник, оптовик, привелигированый клиент, с карточкой скидок, разные виды договоров, каждый со своими скидками. Может быть даже что ему скидку руками выставили, с целью привлечь нового оптового покупателя. И это тоже система позволяет делать – выставляя разрешенные проценты от простого начальника отдела до директора магазина. Достаточно? А вот хренушки! Товар может быть зарезервирован, куплен и храниться на складе, привезен из другого города и храниться на складе, продан с доставкой на дом. Это все отдельные услуги и их тоже надо добавить в окончательную цену. А еще на некоторые товары идет акциз, а на некоторые наоборот нету налога. Хватит? Еще нет! В том случае, если клиент имеет кредит в нашей системе и покупает по безналу - касса должна проверить еще кучу вещей. Не исчерпан ли лимит у этого клиента?  А является ли дядька, покупающий товар – доверенным лицом этого клиента, а не просто укравшим карточку жуликом? А не истек ли вообще срок договора с этим клиентом, и распространяется ли он на эту группу товаров? (Цемент, гвозди, велосипед, ноутбук, бензопила, пиво. Разные категории товара, разные скидки. А скажем пиво она вообще не должна дать продать по безналу.) Я уже не говорю про всякие завернутые акции, наподобии “за сумму такую-то – получите карточку скидок на столько-то процентов". Но только если вы покупаете школьные товары, и не являетесь фирмой или не были должны нашему магазину больше чем 2 месяца.

Ну как хватит? А это только про кассу говорили! Отделы должны иметь свои фронтэнды к базе, позволяющие каждое утро печатать новые цены, делать резервации товаров, назначать свои скидки, рапортовать о браке и повреждениях и т.д. и т.п. Отдельная история с автоматическими спец-заказами, это именно то, если требуется заказать недостающие товары с других складов. Склад магазина должен принимать товары, вносить их в базу, получать информацию о продажах и резервациях, выдавать товар оптовикам, и т.д. и т.п. (Ну чтоб жизнь малиной не казалась, добавим такую хрень как удаленные резервации терминалов из других городов, управление потоком фур, выгрузки-разгрузки, выписывание накладных, и прочие веселые развлечения у дварфов.)

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

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

Например каждое утро из центра растекаются потоки новых цен. Сидит отдел оналитегов и решает, что если этот вот товар отлично раскупается – давайте поднимем на него цену. Нужные отделы, где продается этот товар, каждое утро должны во-первых узнать, что цена изменилась, во-вторых распечатать новые ярлычки с ценами. Потому как отдел рекламы уже раструбил на радио и телевидении, что новый холодильник теперь стоит на 30% дешевле, толпа любителей халявных холодильников побежала его покупать – а тут облом! Начальник отдела сонно хлопает глазами и говорит: “А я ниче об этом не знаю!” А разьяренные клиенты ему по морде рекламным буклетом, где красочно напечатана новая цена. Визг, клочья шерсти. И кому интересно звонят в первую очередь? Хотя как раз по опыту могу сказать что компьютерных-то проблем там бывает процентов 5. (Связь, конфликты реплик.) Остальное – обычная тупость и халатность. (Кто-то промахнулся и забыл поставить галочку что акция и в этом обьекте тоже. Кто-то вечером не подтвердил, поэтому утром не ушло.)

Главные геморойные случаи, и то, что действительно должно работать в реалтайме – это очки лояльности и кредиты. С лояльностью проще, там карточки уникальные и накладок бывает мало. Но скажем один дядька купил на большую сумму товара в одном городе, потом дал жене, та пошла в магазин в другом, а информация по какой-то причине не прошла. Она закатит скандал но это мелкая ерунда, легко решаемая. А вот действительно серьезная проблема, когда например от одной фирмы могут закупаться десяток покупателей в разных местах. В одном городе фирма купила грузовик цемента, и получила за это кучу скидок. А в другом городе через 15 минут что-то покупает другой представитель фирмы. Ему шеф радостно говорит по мобильнику что ты сейчас получишь офигенные скидки, тот радостно бежит заказывать товар, и – облом! Тут визгу и шерсти гораздо больше.

Если эта фирма имеет кредит, (а кредиты все обожают вычерпывать до лимита), то представим что в одном городе кто-то закупается на 90% лимита и то же самое в другом. И вот если информация путешествет по разным базам  - малейшая задержка тут приводит к проблемам. В одном месте касса видит что у него еще есть деньги на счету и спокойно дает купить в кредит. В другом месте информация еще не дошла и касса тоже дает спокойно купить в кредит на ту же сумму. В результате, когда информация сходится – у фирмы оказывается долг 80% кредита. Тут уже визг поднимает бугалтерия. И тут уже не просто визг и клочья шерсти, а серьезные денежные проблемы. Даже если информация тягается репликой между базами каждые 5 минут, даже минуту! У вас все равно есть разрыв в который вы можете попасть. А ведь раньше каналы были не 100 мбит как сейчас, и приходилось думать чем жертвовать. (А теперь представьте, что подобную уязвимость знают жулики, которые делают покупку специально в одно и то же время? А если вы думаете, что на нас жулики не пробовали все мыслимые и немыслимые способы обмана – подумайте еще.) И вот долг составляет десятки тысяч у.е., а фирма невинно хлопает глазами и говорит – это вы виноваты, ваша система дала продать, значит мы ничего вам не должны. А представим, что в одном городе только что уволеный работник фирмы покупает на многобаксов, а в этот же момент директор фирмы заключает договор на новый кредит. А потом долгие судебные разборки – “мы не отвечаем за уволеных жуликов, это сглючила ваша система”!

Вот в общих чертах только часть проблем, с которыми сталкивается такая сеть при децентрализации баз.

Можно решать эту проблему в лоб. Централизацией. Как ее в Каунасе и решили. По крайней мере сервера, на которых крутятся базы очков лояльности и кредитов – это отдельные и единственные сервера. И все пос-терминалы и все бугалтерии, со всей страны получают данные только оттуда, без каких-либо репликаций. Это практически полностью исключило проблему жульничества и накладок. (Правда никак не повлияло на проблемы халатности и тупости.) Зато родилась куча других проблем.

Во-первых, для централизации подобных баз – нужны могучие сервера. Запросы идут со всей страны, и этих запросов миллионы. Только в одном крупном торговом центре до сотни пос-терминалов. И на каждом клиенты суют свои карточки скидок. Каждая операция с карточкой должна получить информацию с центрального сервера, а после подтверждения продажи снова отправить изменения. А могучие сервера стоят денег. (Правда в сравнении с оборотами – микрокопейки, но поскольку тенденция у верховных финансов – удавиться из за каждой копейки…)

Во-вторых для такого траффика нужны толстые-толстые каналы связи. Ну ладно, есть 100 мегабит между городами. Но линии связи тоже стоят денег.

При подбном подходе – начинаются реальные тормоза. Поскольку архитектура не продумана, и не защищена от посягательств жадного и тупого менеджемента, а централизация становится знаменем не столько техническим, сколько политическим – начинаются серьезные тормоза. Центр упорно стремиться подгрести все под себя, шоб был учет и кантроль. Тонны отчетности, да за каждый чих! Все филиалы начинают работать с центральными файловыми-почтовыми-документов серверами через тот же канал, по которому обмениваются данными пос-терминалы и оставшиеся локальные базы. По этому каналу летают туда-сюда отсканированные на 300 dpi документы, почта, запускаются удаленные копии программ. Жадность не дает манагерам выделить отдельный канал для такого траффика, а тупость – не дает сначала посоветоваться с админами. В результате, в дни когда в магазинах полно народу – ответа на запросы с центральных серверов приходится жать по пол-минуты. Образуются очереди, люди психуют, шум, гам, бардак.

И самый прикол – при централизации такая система становится очень-очень уязвимой. К обрывам связи, к вылетам софта, к вылетам железа. (Линуксоидам начнущим радостно потирать лапки, могу только сказать – идите в Бобруйск. Вашей вонючей операционке даже не снились такие нагрузки и такие режимы работы в которых МС-овские сервера и базы пашут по несколько лет без вылетов. Ради прикола померял перед уходом нагрузку на базу только в одном из центров. Транзакций в секунду в среднем 200-300. Но это было в рабочее время, когда в магазине мало народу. В пиковые часы нагрузка должна подскакивать раза в четыре-пять, но это предположения. Увы, до перформанс монитора уже не доберусь. И это только одна локальная база в одном из магазинов. Что там твориться на центральной базе – не берус предполагать. Тут рядом только ORACLE стоит, но это тоже коммерческие системы. Стоящие космических денег и ложившие болт на весь опенсорс.)

Со стороны софта, тут все ок. МС в серверных системах имела, имеет и иметь будет всякую левую шелупонь еще долго-долго. Может быть даже всегда. Раком, боком или как угодно. Во все дыры и из любой позиции. А вот со стороны людей, админов и программеров – не все ок. Форсаж например, один раз рестартуя SQL сервер забыл поднять агента. Из за этого сервак-то работал, а реплики стояли. Утром не прошли переоценки, было много проблем. Впрочем я тоже два раза так лажался. Из моих ляпов – например при замене резервного UPS-а, взял и отпал san-свич. Бл., какой-то мудак, собиравший шкаф запитал его не от разных упсов. Или это кто-то сделал позже. Соответственно отпала шара с базой. Пока мы ее поднимали – магазин стоял. Это всего минут пять, но это минут пять простоя. А значит убытков. Но это только местные локальные проблемы, и только в одном из центров! Потому что у нас – до сих пор остатки децентрализации. Каждый обьект – своя база, свой сервер. Вылет одного из обьектов, означает проблему только в одном из обьектов.

А вот в Каунасе – через центральный сервер работают даже пос-терминалы. Причем не просто парочки крупных супермаркетов в городе, а еще по моему всех филиалов. И вот однажды, какой-то мудак-программер написал какую-то процедуру, которая не просто завалила SQL-сервер, но и перепортила кучу данных. Никакая кластеризация или зеркалирование тут не спасут. Только откат из бэкапа. И вот ее восстанавливали – пол-дня! И все эти пол-дня вся сеть магазинов стояла и терпеливо ждала пока поднимут базу. Убытки от подобного простоя не сравнятся ни с какими проблемами от кредитных накладок. А еще возможно стояли грузовые терминалы и склады. Я не спрашивал, было как-то неудобно выспрашивать подробности такой катастрофы у людей, которые в этот момент боролись с ее последствиями.

Стояла вся Литва, кроме Вильнюса. Потому как у нас – отдельные базы, которые продолжали работать. Не работали только кредиты и очки лояльности. И что? Люди ворчали, перед ними извинялись, но зато продажи шли и шли себе. А мы периодически позванивали в Каунас и Очень Сочуственным тоном спрашивали, ну как там? А из трубки раздавалось рычание: “Разза, фассса мазззерфакер! Уже 80% прошло!” Да, подобные катастрофы, вызваные людьми случаются раз в год, если не реже. (Правда в связи с паталогической жадностью руководства, и стремительной утечкой кадров – боюсь что скоро и месяц без катастроф это будет слава богу.) Но факт тот, что при централизации – такая катастрофа вызывает остановку всей сети. А вот в случае децентрализации – только одного из обьектов.

(Блин, вот хорошо, что я уехал! :D Когда писал этот пост, во первых долго трепались с Альбертом в кафешке, во вторых потом встретил Шарка, и вроде все обсудили лично. Никто не хочет писать комменты, когда можно встретится и откомментировать лично. А Форсаж блин, обожает пол-часа спамить по скайпу, но только не писать ничего в ЖЖ. Ничего, сейчас ситуация другая, придется вам товарищи комментировать! :D)

Шарк, как банковский IT сразу встал на сторону централизации. Заявив, что мы лохи, и нормальная связь с дублированием каналов – основа всего. Ну да, наша связь – это была отдельная и печальная песня. Можно помечтать о линиях связи, работающих всегда. Даже в условиях ядерной войны. А можно вернуться в реал. А в реале – связь пропадает. А в последнее время еще и часто. Связано ли это с закрытием Игналинской АЭС, или с тем что хорошие спецы массово удирают заграницу – не знаю. Только факт, что в последнее время вылетов связаных и с потерей электричества и с потерей связи – становится все больше и больше. Ну и конечно здорово добавляет руководство.

Сидели мы на Телекомовской оптике, все было замечательно, вылеты если и случались, то действительно раз в году и по причине – “пьяный экскаваторщик задел магистральный кабель”. Т.е. когда без интернета оставалось пол-Литвы. Но кому-то сверху опять захотелось сэкономить. (Предполагаю кто этот Киса Воробьянинов. Все такие приколы ведут к нему, равно как и замена Интеловских материнок на Асроки в Бангинисе - его рук дело.) И вот, очевидно получив от Балтнеты “выгодное предложение”, (уж не знаю ввиде чего), крупнейшая в Литве фирма отказывается от услуг основного поставщика всей связи в стране, и переходит на связь от какого-то подзаборного субпровайдера. Щас кто-то обидится за свою фирму, но сорри, ребята, сами виноваты. Чувствую было так: Топ Манагер Балтнеты ухаживал за нашими финансистами как за девицами. Дарил им цветы, водил в кино, угощал конфетами. И наконец соблазнил. Вот контракт подписан, все радостные и довольные – и на этом все. Качество, какое качество? И вот совершенно без всяких землетрясений и войн связь  бац – и рвется в первый же месяц! Ой бяда! Балтнета забегала – щас исправим! Ихний техник сел в машину, и поехал куда-то в какой-то сарай, где стоял очевидно первый пень на линуксе и выполнял роль самодельного роутера. Перегружать его ручками. Через пару недель – снова так же картина. Вот после третьего раза, даже наше руководство решило от греха подальше вернуться обратно на Телекомас. Но сам факт, что хватанув крупного клиента, Балтнета даже не почесалась исправить ситуацию с левым оборудованием – говорит о качестве услуг.

Цисковские коробочки, которыми так хвастался Шарк, нам тоже только снились. Почему – я до сих пор не могу понять. Почему за 5 лет работы автоматического перехода на резервную линию так и не было сделано – у меня не укладывается в голове. Конечно наших деревенских финансистов тоже можно понять. Электричество и физика для них – это что-то вроде черной магии. Бьет током и жрет деньги. И размышления на уровне сельского священника – “Шайтан-коробка стоит денег, да и темное это дело! А на концах провода все равно сидит по обезьяне, так за что мы им деньги платим?” И вот когда обрывалась связь, на нашем конце мы должны были срочно залогиниться на центральный свич и ручками сменить ему гейтвей. А в одном из центров запустить батничек, меняющий роутинг на всех кассах, чтоб кард-ридеры могли связываться с процессинг центром. (Почему такой дебилизм не спрашивайте, сетевой админ из центра за последние два года раз десять обещал это исправить.) Потом позвонить в Каунас, и тамошнего дежурного просить зайти в серверную, и физически переткнуть патчик из одного порта в другой. Самое смешное, что однажды, тамошний дежурный отказался это делать, и побежал вызванивать сетевого админа, с целью получить на это разрешение. (Обучение персонала? Какое обучение?)

В общем, хрен его знает, чего тут еще ляпнуть, потому как вроде обо всем лично переспорили. Я все-таки сторонник локальных баз на сайтах, связаных репликами. Способ избежать глюков – я описал Евгению и Форсажу. Чего там случится с той системой, и как она рухнет – это уже к счастью не моя головная боль. :D

Subscribe
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 3 comments