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

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

Какие меры предосторожности вы используете, чтобы избежать случайного внесения непреднамеренных изменений в вашу производственную среду при этом?


РЕДАКТИРОВАТЬ:

Приложение представляет собой очень сложное вертикальное веб-приложение B2B. Задействовано много данных. Некоторые таблицы содержат около 100 миллионов записей.


РЕДАКТИРОВАТЬ:

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


РЕДАКТИРОВАТЬ:

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

Основные проблемы связаны с базой данных и данными в файловой системе.

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


person TWA    schedule 05.06.2009    source источник
comment
Когда вы говорите о рабочей среде, что вы имеете в виду? Коробка веб-сервиса? Ящик SQL? Веб-сайт?   -  person Joseph    schedule 05.06.2009
comment
@Joseph - обновил вопрос   -  person TWA    schedule 05.06.2009


Ответы (10)


Самый прямой ответ: «Не делай этого».

person GEOCHET    schedule 05.06.2009
comment
Да, я согласен, но компания не будет вкладывать ресурсы в хорошую сценическую среду. - person TWA; 05.06.2009
comment
@TwistedAphid: Тогда ваша задача — убедиться, что они работают. Они потратят деньги так или иначе. С таким же успехом это было до катастрофы. - person GEOCHET; 05.06.2009
comment
@TwistedAphid - каким-то образом вам нужно убедиться, что они понимают риски, желательно в письменной форме. - person Otávio Décio; 05.06.2009
comment
@Rich B, ocdecio - Мы пытались рассказать им о риске, и недавно у нас даже была потеря некоторых данных из-за этой проблемы. Они заплатили около 20 тысяч долларов компании по восстановлению данных за восстановление файла базы данных SQL-сервера. Мы просто не можем заставить их увидеть ценность профилактики. - person TWA; 05.06.2009
comment
Ты работаешь в очень глупой компании. Я предлагаю найти другого, который не будет отрывать себе ногу при каждой возможности. - person TheTXI; 05.06.2009
comment
@TwistedAphid: пора искать новую работу. - person GEOCHET; 05.06.2009
comment
Если вы консультант, возможно, пришло время закрыть рот и собирать чеки каждый раз, когда он сгорает. - person GEOCHET; 05.06.2009
comment
@Rich B - Может быть, ты прав. Я просто ненавижу видеть, как такое происходит. Это действительно сказалось на моральном духе разработчиков здесь. В конце концов, они несут на себе большую боль от необходимости карабкаться, чтобы восстановить ущерб, когда это произойдет. По крайней мере, мне платят по часам. :) - person TWA; 05.06.2009
comment
20 000 долларов — это приличная сумма (2–3 ТБ) хранилища Dell SAN. Это довольно высокая цена за одноразовое восстановление после сбоя. - person Chris K; 05.06.2009

управления источником. ничто не сравнится с откатом, когда дела непоправимо испорчены. Кроме того, diff может помочь вам реплицировать изменения в другие производственные системы.

person Jimmy    schedule 05.06.2009
comment
Если у них его еще нет, то TwistedAphid должен найти новую работу как можно скорее. - person David Thornley; 05.06.2009
comment
ну, это было скорее напоминанием о том, что вы можете сохранять версии своих производственных файлов, чем вообще использовать систему управления версиями. - person Jimmy; 05.06.2009
comment
+1 за хранение файлов производственных данных в системе контроля версий. Часто упускаемая из виду передовая практика. - person DarkSquid; 05.06.2009
comment
Не поможет вам, если ваши изменения были неправильными и испортили бесчисленное количество миллионов записей. И я НЕ являюсь источником, управляющим экспортом SQL объемом 200 ГБ. :-) - person Chris K; 05.06.2009

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

Мы сохраняем предыдущие производственные версии на случай возникновения проблем.

Если что-то ломается (что не должно часто случаться при надлежащей процедуре тестирования и управляемых выпусках), мы можем либо откатиться, либо исправить. Часто, когда что-то ломается в реальном времени, а исправление небольшое, мы можем исправить, а затем перенести исправление в тест, чтобы провести надлежащее тестирование.

Тем не менее, иногда что-то проходит...

person JeeBee    schedule 05.06.2009

разрешить доступ для записи только определенным учетным записям, поэтому вам нужно войти в систему по-другому, чтобы внести изменения

на веб-сервере есть две структуры каталогов, которые отражают друг друга, одна, в которой может писать только один идентификатор, другая промежуточная директория, которую может писать каждый.

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

ОДНАКО, если у вас есть неверный запрос или какие-либо ресурсы в вашей промежуточной системе, ресурсы будут извлечены из производства, и машина может зависнуть.

person KM.    schedule 05.06.2009

Для веб-серверов и серверов приложений я бы попытался скопировать среду в новое место (но в ту же среду) и заставить затронутых людей воспроизвести поведение на копии. Это, по крайней мере, даст вам уровень отделения от случайного обмана со 100% ваших клиентов.

Для серверов баз данных я бы настроил учетные записи пользователей в производственной системе, чтобы предоставить им права только на чтение.

person Joseph    schedule 05.06.2009

Только для чтения/гостевые учетные записи. Шутки в сторону. По той же причине вы не всегда входите в систему как root или администратор.

person Alex Beardsley    schedule 05.06.2009
comment
Бьюсь об заклад, я мог бы запустить некоторый SQL с учетной записью только для чтения, чтобы поставить вашу производственную среду на колени. ;) - person tom; 05.06.2009
comment
Это ничего не защитит. - person GEOCHET; 05.06.2009
comment
Я всегда вхожу в систему как пользователь root, потому что никогда не ошибаюсь. - person Pesto; 05.06.2009
comment
@Nalandial: Я сделаю это за него: если у них есть разрешения, необходимые для отладки производственной среды, то у них есть разрешения, необходимые для непреднамеренного уничтожения этой производственной среды. - person Pesto; 06.06.2009

Это сложная вещь, и она связана с территорией «без промежуточной среды».

По многим причинам лучше иметь выделенный (дубликат) PROD, который вы можете использовать для промежуточного развертывания... и для отладки, но я знаю, что иногда, когда вы начинаете, это не работает так быстро или тщательно, как мы хотели бы.

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

Что касается избегания изменений в PROD во время отладки: есть ли причина, по которой вам нужно что-то изменить, чтобы облегчить отладку? Если это так, возможно, стоит поискать решение другим способом.

person DarkSquid    schedule 05.06.2009
comment
Иногда, чтобы воссоздать проблемы, мы должны ввести тестовые заказы (очень сложная система), а затем возиться с базой данных для отладки. - person TWA; 05.06.2009
comment
Это идеальное время для использования виртуальной машины (или двух: одной для вашего приложения и одной для БД). При необходимости вы можете захватить сеанс/ввод из PROD и воспроизвести его против своей виртуальной машины. - person DarkSquid; 05.06.2009

Контроль версий очень полезен для управления изменениями в производственной среде — просто сделайте свою производственную среду рабочей копией соответствующего каталога или каталогов из репозитория. Когда вы развертываете обновление, ваша система контроля версий гарантирует, что ВСЕ измененные файлы будут скопированы. Когда обновление что-то ломает, вы можете откатить производственную рабочую копию до последней версии, которая не была сломана. Кроме того, вы можете проверить свой производственный WC с помощью бирки, а не из багажника; таким образом вы можете решить, какие версии репозитория применять к производственной среде, изменив тег.

Если вы не знакомы с концепциями систем контроля версий, я бы посоветовал вам провести небольшое исследование. Они концептуально сложны, но невероятно полезны и мощны. Статья в Википедии — хорошее место для начала: http://en.wikipedia.org/wiki/Revision_control< /а>

person The Digital Gabeg    schedule 05.06.2009
comment
Отличная идея. Кроме того, вот сценарий: эй, мы заметили, что это изменение в SP_doSomething привело к тому, что все эти 20 000 транзакций оказались ошибочными случайным образом, но у нас есть 20 000 000 транзакций в системе, поэтому мы не можем откатиться. Вот от чего не может вас защитить контроль версий. - person Chris K; 05.06.2009

Извините, у вас должна быть промежуточная среда. Там нет обойти это. Если это означает, что вам нужно отсеять размер ваших наборов данных, то это то, что вы должны сделать. Используйте VMware и конвертер VMware для импорта производственных систем в периоды простоя, если они у вас есть (это многочасовой процесс, поэтому, возможно, непрактичный).

Есть определенный класс проблем, которые вы не можете решить, не имея полного доступа к рабочим БД (или копии), производительность - одна из них. Но вам действительно следует создать промежуточную среду, даже если она находится на чьем-то настольном компьютере с урезанным набором данных.

Кроме того, в прошлом мне приходилось жить с некоторыми из них, и на самом деле вы ничего не можете сделать, кроме множества резервных копий. Каждому вносимому вами изменению должны предшествовать добавочные резервные копии. Таким образом, если вы что-то испортили, сумма, которую вы потеряли, не будет существенной. SQL-сервер может делать дифференциальные резервные копии, которые ограничивают объем дискового пространства, используемого для резервных копий. Оракл тоже может.

person Chris K    schedule 05.06.2009

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

person jerryjvl    schedule 05.06.2009