Назад | Перейти на главную страницу

Какие вещи сисадмина должен знать каждый программист?

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

Я бы начал с:

  1. Всегда есть какая-то система резервного копирования. Еще лучше, если у него есть история.
  2. Подумайте об отдельных точках отказа и о том, как с ними справиться, если они потерпят неудачу.
  3. В зависимости от количества задействованных компьютеров поиск какого-либо способа создания и создания стандартного образа на всех компьютерах облегчит жизнь каждому - не «это работает на моем», потому что у них есть такая-то программа, обычно не устанавливаемая.
  4. Документируйте все, хотя бы потому, что вы воля забудь, как ты что-то настраивал.
  5. Будьте в курсе обновлений безопасности.

<вставьте сюда заявление об отказе от ответственности>

О некоторых из них уже говорилось ранее, но стоит повторить.

Документация:

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

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

  • Сохраняйте журналы сборки для каждой системы, даже если она просто копирует и вставляет команды для ее сборки.

  • При создании системы установите и настройте приложения, протестируйте их работу и проведите сравнительный анализ. Теперь протрите диски. Шутки в сторону. 'dd' первый мегабайт от передней части дисков или иным образом сделать ящик не загружаемым. Время идет: докажите, что ваша документация может быть восстановлена ​​с нуля (или, что еще лучше, докажите, что ваш коллега не может ничего, кроме вашей документации). Это составит половину вашего плана аварийного восстановления.

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

Автоматизация:

  • Максимально автоматизируйте. Если вам нужно сделать что-то три раза, убедитесь, что второй раз потрачен на разработку вашей автоматизации, чтобы третий был полностью автоматизирован. Если вы не можете автоматизировать это, задокументируйте это. Существуют пакеты автоматизации - посмотрите, сможете ли вы заставить их работать на вас.

Мониторинг:

  • Аппаратура приложений - это чистое золото. Возможность наблюдать за транзакциями, проходящими через систему, значительно упрощает отладку и устранение неполадок.

  • Создавайте сквозные тесты, которые доказывают не только то, что приложение живо, но и действительно выполняет то, что должно. Очки ваши, если его можно подключить к системе мониторинга для целей оповещения. Это служит двойной задаче; Помимо доказательства работы приложения, оно значительно упрощает обновление системы (система мониторинга сообщает о зеленом цвете, обновление выполнено, пора домой).

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

  • Если у вас нет системы мониторинга, внедрите ее. Бонусные баллы, если вы действительно вставляете в него вышеуказанные сквозные тесты.

Безопасность:

  • "chmod 777" (также известный как предоставить весь доступ / привилегии) ​​никогда не является решением.

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

  • Знайте, для чего предназначен каждый открытый порт на сервере. Часто проверяйте их, чтобы убедиться, что не появляются новые.

  • Не пытайтесь очистить взломанный сервер; его нужно перестраивать с нуля. Выполните перестройку на резервный сервер со свежезагруженным носителем, восстанавливая только данные из резервных копий (поскольку двоичные файлы могут быть скомпрометированы), или клонируйте скомпрометированный хост в изолированное место для анализа, чтобы вы могли восстановить его на том же комплекте. Вокруг этого царит настоящий юридический кошмар, так что сделайте ошибку в пользу сохранения, если вам нужно использовать законные средства. (Примечание: IANAL).

Оборудование:

  • Никогда не предполагайте, что что-то будет делать то, что написано на коробке. Докажите, что он делает то, что вам нужно, на всякий случай. Вы обнаружите, что говорите «это почти работает» чаще, чем вы ожидали.

  • Не экономьте на удаленном управлении оборудованием. Последовательные консоли и управление отключением света следует считать обязательными. Бонусные баллы за удлинители с дистанционным управлением на тот случай, когда у вас нет вариантов.

(Кроме того: есть два способа решить проблему в 3 часа ночи: один - согреться, поработать на ноутбуке через VPN в пижаме, другой - в толстой куртке и поехать в центр обработки данных / офис. Я знаю, какой я предпочитаю.)

Управление проектом:

  • Привлекайте людей, которые будут поддерживать систему с первого дня жизненного цикла проекта. Сроки изготовления комплектов и мозговых работ могут удивить и удивят, и нет никаких сомнений в том, что у них будут (должны?) Быть стандарты или требования, которые станут зависимостями проекта.

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

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

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

Развитие:

  • Убедитесь, что ваши системы разработки и подготовки похожи на производственные. Виртуальные машины или другие методы виртуализации (зоны, LDOM, vservers) упрощают создание реальных производственных клонов во всех смыслах, но с высокой производительностью.

Резервные копии

  • Данные, которые вы не копируете, - это данные, которые вам не нужны. Это непреложный закон. Убедитесь, что ваша реальность соответствует этому.

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

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

И, самое главное...

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

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

Не думайте, что это легко. Я знаю многих программистов, которые думают, что только потому, что они могут установить IIS или Apache на своем устройстве разработки, они могут запускать веб-ферму. Поймите, что включает в себя эта работа, и проведите свое исследование и планирование, не думайте, что работа системного администратора - это простая вещь, которую вы можете сделать за 10 минут, чтобы развернуть свое приложение.

  • Поймите, хорошо это или плохо, но многие из серверов и / или сетевого оборудования, которые они используют, очень похожи на детей из второй семьи. Это их дети. Они ухаживают за ними, помогают им, когда они больны, и бдительно следят за ними на случай возникновения проблем. это не должен быть таким, но через много лет это часто. Помните об этом, когда будете сообщать им о своих опасениях по поводу того, что оборудование не работает должным образом или чего вы ожидаете. И если вы получите непонятный ответ, попробуйте отфильтровать его через это мировоззрение.
  • Будьте в хороших рабочих отношениях. Звучит банально, но это на вес золота. Когда-нибудь вам понадобится особая услуга. И когда-нибудь этот системный администратор будет счастлив сделать все возможное, чтобы облегчить вам жизнь, только на этот раз.
  • Эти рабочие отношения двусторонние. Если системный администратор очень занят, и вы могли бы немного облегчить жизнь, написав небольшой сценарий или программу, сделайте это! Они оценят это больше, чем вы думаете.
  • Будьте предельно ясны. «Это отстой» не так ясно, как «наличие прерывистого сетевого подключения немного раздражает, есть ли шанс, что вы можете взглянуть на это?»
  • Если вы думаете, что ваше приложение будет масштабироваться, спросите администратора перед предполагая Так и будет. Они могут «видеть» то, чего вы не видите, или знать что-то об ограничениях производительности оборудования, на котором вы собираетесь развернуть.
  • Если ваше приложение нуждается в настройке, но это не проблема кода, вежливо спросите, как работают серверы. Сисадмины с любовью ухаживают за своими машинами и недовольны, когда они «болеют» или «плохо себя ведут». Если вы попросите вежливо, он перевернет больную машину (или отремонтирует / заменит).
  • (как упоминалось в другом месте) задокументируйте используемые вами настройки и Зачем вы их используете. Просто "установить флажок X" или "раскомментировать строку Y файла конфигурации" не помогает. Вы можете установить опцию, которая стирает все ваши данные при следующей перезагрузке, насколько вам известно.
  • Если у вас нет времени задокументировать настройку на бумаге, по возможности постарайтесь задокументировать ее в системе. Для файлов конфигурации это должно быть почти стандартной практикой - каждое изменение параметра должно быть помечено датой, инициалами, ожидаемым эффектом от этого параметра и причиной. Зачем он был изменен (см. предыдущий маркер). Эта небольшая привычка не раз спасала мой бекон во время крушения. "Почему мы это сделали?" «Потому что мы предписали политику X, а настройка Y дает нам поведение, необходимое для политики X».
  • Пиво. Или кола. Или даже Воды. Всегда приветствуются напитки. Быть системным администратором - это изнурительная работа.

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

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

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

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

  • Wireshark, чтобы посмотреть, как ваш код работает в режиме черного ящика, пакет за пакетом
  • Инструменты для прямого подключения к сетевым службам:
    • Telnet, netcat или socat для простых соединений по TCP или UDP
    • OpenSSL то же самое с шифрованием (подсказка: попробуйте openssl s_client -connect target-host:port когда-нибудь), для ручного подключения к сетевым службам
  • копать (в пакете BIND 9) для отладки разрешения имен
  • Возможность определить, какая часть сетевого стека вышла из строя, на основании времени и других характеристик сбойного соединения.
  • Возможно HTTPFox и / или Firebug

Знайте, как устранять проблемы.

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

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

Документируйте все, что можете. Не могу сказать вам, сколько раз последний системный администратор думал, что было бы мило не задокументировать что-то для «безопасности работы», или кто-то просто хотел войти и уйти. Как программист должен оставлять хорошие комментарии, так и системные администраторы должны документировать. Схема топологии тоже была бы неплоха.

План B.

Всегда имейте в виду план аварийного восстановления при проектировании и разработке решения. Определите единичные точки отказа, которые могут привести к отключению.

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

Помимо процесса установки, приложение должно нормально работать при входе в систему со стандартной учетной записью.

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

Требования: на какие модули он полагается? Версии? ОПЕРАЦИОННЫЕ СИСТЕМЫ?

Мониторинг: в идеале разработчики должны включать в приложение информацию для мониторинга и тесты.

Говоря об упаковке, УПАКОВКА! Нет ничего хуже, чем «развертывание», которое означает получение новой версии файла из VCS и копирование ее на несколько серверов. Слишком часто программисты не осознают сложность развертывания программного обеспечения: есть причины, по которым пакетное программное обеспечение с версиями является основой большинства операционных систем.

Если бы разработчик пришел ко мне с RPM, который устанавливался впервые, с краткой, исчерпывающей документацией и некоторыми тестами Nagios, они были бы моим новым лучшим другом.

Хорошо, это немного разглагольствует, но:

a) При кодировании предполагайте, что базовая инфраструктура может выйти из строя и не исходит от счастливой-счастливой всегда на земле. Или Google.

б) У нас, вероятно, нет ресурсов для реализации чего-то вроде инфраструктуры, о которой вы читали, так что расслабьтесь, когда что-то пойдет не так. Скорее всего, мы знаем, что нужно делать, но по какой-то причине этого еще не произошло. Мы ваши партнеры!

c) Как сказано выше, было бы очень полезно, если бы вы хоть немного знакомы с инструментами для устранения неполадок в инфраструктуре, такими как ping, traceroute (или их сочетание - mtr), копать и т. д. Огромные бонусные баллы даже за знание Wireshark.

г) Если вы программируете компьютер, вы действительно должны знать, как он подключается к сети, и основы, такие как способность анализировать вывод ipconfig / all или ifconfig. Вы должны иметь возможность установить и запустить подключение к Интернету с минимальной помощью.

В остальном, я думаю, Эйвери в значительной степени справился. Разработчики, которые немного занимаются сисадмином, на вес золота! Но в равной степени системные администраторы, которые понимают, как разработчики работают (включая управление версиями и т. Д.), Очень важны в наши дни.

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

Сохранение Twitter Twitter

Перегородки и война

Первый тест в эксплуатации

  • поговорите со своим администратором как официально, так и неофициально о том, что вы делаете. Обычно они проявляют интерес и могут заранее сообщить о возможных последствиях для производства. Не обязательно соглашаться, но это помогает выявить проблемные места.
  • Нет, вы не можете отдать весь сервер себе ... Если вам нужно, это политическое решение, независимо от того, насколько оно технически обосновано. Если вы хотите заниматься политикой, продолжайте.
  • Производственное оборудование часто выглядит иначе, чем ваш сервер разработки, и даже в пределах фермы спецификации машин отличаются.
  • Узнайте, как настраивается производство, потому что вы, вероятно, не сможете воспроизвести его на своем рабочем столе, это не позволит вам делать неверные предположения.
  • Просто потому, что вы можете кэшировать данные в памяти, не означает, что вам следует сначала дождаться узкого места (при модульном тестировании или предварительном тестировании производительности)
  • если вы вставляете данные в базу данных, подумайте о том, как вы можете разделить данные на данные только для чтения (которые можно масштабировать по горизонтали) и данные для чтения и записи (которые обычно масштабируются только по вертикали).
  • если вы вставляете данные в базу данных, должна быть действительно РСУБД? существуют и другие системы пар ключ-значение, которые лучше масштабируются (netcache).
  • не думайте, что AJAX - это окончательное решение, это выглядит круто, но ограничивает возможности мониторинга и автоматизации. Я не говорю, что не используйте его, просто подумайте дважды.

Это может относиться только к начинающим программистам, но я решаю несколько вопросов в каждом проекте с некоторыми программистами.

  1. «Это работает на моей машине» - неверное утверждение. В обязанности программиста входит создание программы установки для использования на сервере или, по крайней мере, документирование каждого соединения, библиотеки DLL и надстройки, которые потребуются на сервере.

  2. (Я слышал это несколько раз, поэтому, пожалуйста, не смейтесь) Я запускаю exe на сервере со своей машины, и он работает. Но когда я запускаю его на сервере (Citrix, Terminal Server и т. Д.), Он не работает. Пожалуйста, разберитесь с dll и ocx, а также со всем остальным, что требуется вашей программе, где и как они зарегистрированы, и как ваша программа их использует.

Это может показаться простым, но я постоянно с этим сталкиваюсь.

Брайан

Резервное копирование Резервное копирование Резервное копирование .... Протестируйте резервную копию .... Всегда будьте готовы к откату

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

Архитектор инфраструктуры, ставший программистом, может, в будущем захочет откатить эту транзакцию :)

  1. Говорите друг с другом пораньше и чаще. Обсудите проекты с ребятами, которые будут управлять инфраструктурой, в которой будет развернуто ваше приложение (если вы знаете, кто это будет).
  2. Возможна нулевая потеря данных, но это ответственность разработчиков и системных администраторов. Опять же, здесь может помочь общение друг с другом.
  3. Персонал вашей инфраструктуры должен был участвовать в определении нефункциональных требований.
  4. Разложите пиво (когда работа сделана) и пиццу (пока мы работаем). Каким-то образом присутствие такой еды влияет на нашу способность заставлять наши милые маленькие 32 процессора делать то, что вы хотите от них :)

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

Я не видел (пока) объяснения того, что разработчики действительно должны знать продукты, которые они будут использовать для создания программ, за которые им платят. Количество раз, которое мне приходилось объяснять и настраивать серверы apache, установку eclipse и Visual Studio, а также базу данных на машинах разработчиков, немного беспокоит.