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

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

<p>я бы начал с:</p><ol> <li><strong>всегда</strong> есть какая-то система резервного копирования. даже лучше, если у него есть история.</li> <li>рассмотрим отдельные точки отказа и как с ними справиться, если они потерпят неудачу.</li> <li>в зависимости от количества задействованных компьютеров, поиск какого-либо способа создания и создания стандартного образа на разных компьютерах облегчит жизнь всем - никакое "это не работает на моем", потому что у них есть такая и такая программа, которая обычно не устанавливается.</li> <li>документируйте все, хотя бы потому, что вы <strong>будете</strong> забыли, как что-то настраивали.</li> <li>будьте в курсе обновлений безопасности.</li> </ol>

<p><вставьте большой отказ от ответственности здесь></p><p>некоторые из них были сказаны ранее, но стоит повторить.</p><p>документация:</p><ul> <li> <p>документ все. если у вас его нет, установите вики-версию под радаром, но обязательно сделайте резервную копию. начните со сбора фактов, и однажды образуется большая картина.</p> </li> <li> <p>создавайте диаграммы для каждого логического блока и обновляйте их. я не мог сосчитать, сколько раз точная карта сети или кластерная диаграмма спасли меня.</p> </li> <li> <p>сохраняйте журналы сборки для каждой системы, даже если это просто копирование и вставка команд для сборки.</p> </li> <li> <p>при сборке вашей системы установите и настройте свои приложения, протестируйте их и проведите сравнительный анализ. теперь протрите диски. шутки в сторону. 'dd' - первый мегабайт на передней панели дисков, иначе он не сможет загрузиться. время идет: докажите, что ваша документация может восстановить ее с нуля (или, что еще лучше, докажите, что ваш коллега может сделать это только с вашей документацией). это составит половину вашего плана аварийного восстановления.</p> </li> <li> <p>теперь у вас есть первая половина вашего плана аварийного восстановления, запишите остальные; как вернуть состояние вашего приложения (восстановить файлы с ленты, перезагрузить базы данных из дампов), сведения о поставщике/поддержке, требования к сети, как и где получить замену оборудования - все, что вы можете придумать, поможет восстановить вашу систему.</p> </li> </ul><p>автоматизация:</p><ul> <li>автоматизируйте столько, сколько сможете. если вам нужно что-то сделать три раза, убедитесь, что вторая часть потрачена на разработку вашей автоматизации, а третья полностью автоматизирована. если вы не можете автоматизировать это, запишите это. есть комплекты автоматизации - посмотрите, сможете ли вы заставить их работать на вас.</li> </ul><p>мониторинг:</p><ul> <li> <p>прикладная аппаратура из чистого золота. возможность наблюдать за транзакциями, проходящими через систему, значительно упрощает отладку и устранение неполадок.</p> </li> <li> <p>создавайте сквозные тесты, которые доказывают не только то, что приложение живое, но и действительно выполняет то, что должно. очки ваши, если их можно подключить к системе мониторинга для целей оповещения. это служит двойной обязанности; помимо проверки работоспособности приложения, оно значительно упрощает модернизацию системы (мониторинг системных отчетов зеленый, обновление сработало, время идти домой).</p> </li> <li> <p>оценивайте, отслеживайте и собирайте метрики для всего, что для этого необходимо. тесты показывают, когда ожидать, что что-то испустит волшебный дым. мониторинг говорит вам, когда он имеет. метрики и статистика облегчают получение нового комплекта (со свежим волшебным дымом) через управление.</p> </li> <li> <p>если у вас нет системы мониторинга, внедрите ее. бонусные баллы, если вы действительно включите в него вышеописанные сквозные тесты.</p> </li> </ul><p>безопасность:</p><ul> <li> <p>"chmod 777" (он же предоставляет все права доступа) никогда не является решением проблемы.</p> </li> <li> <p>подпишитесь на принцип "наименьшего бита"; если он не установлен, скопирован или иным образом находится на диске, он не может быть скомпрометирован. установка "кухонной раковины" ос и программного обеспечения может облегчить жизнь на этапе сборки, но в конечном итоге вы заплатите за это в будущем.</p> </li> <li> <p>знайте, для чего предназначен каждый открытый порт на сервере. регулярно проверяйте их, чтобы убедиться в отсутствии новых.</p> </li> <li> <p>не пытайтесь очистить скомпрометированный сервер; это должно быть восстановлено с нуля. перестройте на резервный сервер со свежескачанными носителями, восстановив только данные из резервных копий (так как двоичные файлы могут быть скомпрометированы), или клонируйте скомпрометированный хост куда-нибудь изолированным для анализа, чтобы вы могли восстановить на том же наборе. вокруг этого существует целый правовой кошмар, так что ошибайтесь в сторону сохранения на тот случай, если вам нужно искать законные пути. (примечание: ianal).</p> </li> </ul><p>оборудование:</p><ul> <li> <p>никогда не предполагайте, что что-то будет делать то, что написано на коробке. докажите, что он делает то, что вам нужно, на случай, если это не так. вы обнаружите, что говорите "это почти работает" чаще, чем вы ожидаете.</p> </li> <li> <p>не экономьте на удаленном управлении оборудованием. последовательные консоли и управление освещением следует считать обязательными. бонусные баллы за дистанционно управляемые удлинители питания в те моменты, когда у вас нет выбора.</p> </li> </ul><p>(кроме того, есть два способа решения проблемы в 3 часа ночи, один из которых заключается в том, чтобы быть тёплым, работать на ноутбуке через vpn в вашей пижаме, другой - в толстой куртке и подъезжать к центру обработки данных/офису. я знаю, какой предпочитают.)</p><p>управление проектом:</p><ul> <li> <p>вовлеките людей, которые будут поддерживать систему с первого дня жизненного цикла проекта. время выполнения заказов и время на подготовку могут и будут удивлять, и нет никаких сомнений в том, что они будут (должны?) иметь стандарты или требования, которые станут зависимостями проекта.</p> </li> <li> <p>документация является частью проекта. у вас никогда не будет времени, чтобы написать все это после того, как проект будет закрыт, и система перейдет на техническое обслуживание, поэтому убедитесь, что это включено в график в начале работы.</p> </li> <li> <p>внедрите запланированное устаревание в проект с первого дня и начните цикл обновления за шесть месяцев до дня выключения, указанного вами в проектной документации.</p> </li> </ul><p>серверы имеют определенный срок службы, когда они пригодны для использования в производстве. конец этого срока службы обычно определяется как каждый раз, когда поставщик начинает взимать больше при ежегодном обслуживании, чем это будет стоить обновить комплект, или около трех лет, в зависимости от того, что меньше. по истечении этого времени они отлично подходят для сред разработки/тестирования, но вы не должны полагаться на них для ведения бизнеса. пересмотр среды за 2 1/2 года дает вам достаточно времени, чтобы перепрыгнуть через необходимые управленческие и финансовые операции для заказа нового комплекта и осуществить плавную миграцию, прежде чем отправлять старый комплект крупному поставщику в небе.</p><p>разработка:</p><ul> <li>убедитесь, что ваши разработки и системы постановки напоминают производство. вм или другие методы виртуализации (зоны, ldom, vservers) упрощают создание клонов "в реальном мире, в каждом смысле, но производительности".</li> </ul><p>резервные копии</p><ul> <li> <p>данные, которые вы не сохраняете, - это данные, которые вам не нужны. это неизменный закон. убедитесь, что ваша реальность соответствует этому.</p> </li> <li> <p>резервные копии сложнее, чем они выглядят; некоторые файлы будут открыты или заблокированы, в то время как другие должны быть приостановлены, чтобы иметь хоть какую-то надежду на восстановление, и все эти проблемы необходимо решить. в некоторых пакетах резервного копирования есть агенты или другие методы для работы с открытыми/заблокированными файлами, в других - нет. сброс баз данных на диск и их резервное копирование считается одной из форм "успокоения", но это не единственный метод.</p> </li> <li> <p>резервные копии бесполезны, если они не проверены. каждые несколько месяцев вынимайте случайную ленту из архивов, убедитесь, что на ней действительно есть данные, и что данные согласованы.</p> </li> </ul><p>и, самое главное...</p><p>выберите режимы отказа, или мерфи будет ... и мерфи не работает по вашему расписанию.</p><p>проектируйте для отказа, документируйте спроектированные слабые места каждой системы, что вызывает их и как восстановить. это будет иметь значение, когда что-то пойдет не так.</p>

<p>не думай, что это легко. я знаю многих программистов, которые думают, что только потому, что они могут настроить iis или apache на своем компьютере разработчика, чтобы они могли запускать веб-ферму. понимать, что включает в себя работа, и проводить исследования и планирование, не просто подумайте, что работа системного администратора - это простая вещь, которую вы можете сделать за 10 минут, чтобы развернуть ваше приложение.</p>

<ul> <li>поймите, что, к лучшему или к худшему, многие серверы и/или сетевое оборудование, как правило, очень похожи на детей из второй семьи. <strong>это их дети.</strong> они ухаживают за ними, помогают им, когда они болеют, и бдительно следят за их проблемами. это <em> не должно </em> быть таким, но через много лет <em> это часто бывает </em>. помните об этом, когда будете сообщать им о своих опасениях по поводу того, что оборудование не работает должным образом или не стоит ожидать. и если вы получите ответ, которого вы не понимаете, попробуйте отфильтровать его через это мировоззрение.</li> <li>будьте в хороших рабочих условиях. звучит сырно, но на вес золота. когда-нибудь вам понадобится особая услуга. и однажды этот системный администратор будет рад сделать все возможное, чтобы сделать жизнь немного проще для вас, только в этот раз.</li> <li>эти рабочие отношения идут в обе стороны. если системный администратор очень занят, и вы могли бы немного облегчить жизнь, написав небольшой скрипт или программу, сделайте это! они оценят это больше, чем вы знаете.</li> <li>будь очень ясным. "это отстой" не так ясно, как "наличие прерывистого сетевого подключения немного раздражает, есть ли шанс, что вы можете посмотреть на это?"</li> <li>если вы думаете, что ваше приложение будет масштабироваться, спросите администратора прежде <em>, предполагая </em>, что оно будет. они могут "увидеть" что-то, чего вы не знаете, или узнать что-то об ограничениях производительности оборудования, на котором вы собираетесь развернуть.</li> <li>если ваше приложение нуждается в настройке, но оно не является проблемой кода, спросите, как работают серверы. сисадмины заботятся о своих машинах с любовью и не довольны, когда они "болеют" или "плохо себя ведут". хорошая просьба перевернет больную машину (или отремонтирует/заменит).</li> <li>(как уже упоминалось в другом месте) задокументируйте используемые вами настройки и <em> почему </em> вы их используете. просто "установить флажок x" или "раскомментировать строку конфигурации файла y" не поможет. вы можете установить опцию, которая удаляет все ваши данные при следующей перезагрузке для всего, что вы знаете.</li> <li>если у вас нет времени документировать настройки на бумаге, попробуйте документировать их в системе, если это возможно. для конфигурационных файлов это должно быть практически стандартной практикой - каждое изменение параметра должно быть помечено датами, с инициалами, ожидаемым эффектом этого параметра и причиной <em> почему </em> оно было изменено (см. предыдущий пункт). эта небольшая привычка спасла мой бекон не раз во время хруста. "почему мы это сделали?" "потому что мы предписали политику x, а параметр y дает нам поведение, необходимое для политики x".</li> <li>пиво. или кола. или даже вода. напитки всегда приветствуются. быть сисадмином - это жаждущая работа.</li> </ul>

<p>безопасность не запоздалая мысль. в то время как взломанное приложение может заставить программиста выглядеть некомпетентным, это (по крайней мере) потерянные выходные, потраченные на проверку, очистку и/или восстановление из резервных копий системного администратора.</p><p>в этом отношении, не рассматривайте резервные копии как контроль версий. они предназначены для аварийного восстановления и не предназначены для восстановления вашего кода, потому что вы забыли, что изменили.</p><p>и перестаньте слепо обвинять обновления windows в нарушении вашего кода. мне все равно, что это сработало раньше, скажите мне, почему это не работает сейчас - тогда мы сможем увидеть, чья это вина.</p>

<p>как отлаживать проблемы с сетью и наблюдать за тем, как ваша программа работает с помощью инструментов sysadmin. как программист, который начал заниматься системным администрированием, я поражен тем, насколько бессильными становятся многие программисты, когда работа в сети "просто прекращается".</p><ul> <li><strong>wireshark</strong>, чтобы посмотреть, как ваш код работает в режиме черного ящика, пакет за пакетом</li> <li>инструменты для прямого подключения к сетевым сервисам: <ul> <li><strong>telnet, netcat или socat</strong> для простых соединений через tcp или udp)</li> <li><strong>openssl</strong> за то же самое с шифрованием (подсказка: попробуйте <code>openssl s\_client -connect target-host:port</code> иногда), для ручного подключения к сетевым сервисам</li> </ul> </li> <li><strong>dig (в пакете bind 9)</strong> для разрешения отладки имени</li> <li>возможность определить, какая часть сетевого стека вышла из строя, исходя из времени и других характеристик неисправного соединения</li> <li>возможно <strong>httpfox и/или firebug</strong></li> </ul>

<p>знать, как решать проблемы.</p><p>это очень легко преодолеть (например, ваша сеть теряет связь с базой данных). это может быть ошибка сети, но у вас должны быть журналы приложений с ошибками, которые, используя google или so, могут выявить проблему в конфигурации приложения.</p><p>каждый любит обвинять аппаратное обеспечение, ос или сеть, поэтому, если вы будете немного больше проявлять должную осмотрительность, вы сделаете сисадмина счастливым человеком. потому что, если не что иное, вы можете указать им конкретное направление относительно того, что может быть не так (в отличие от того, чтобы сказать "ваша сеть отстой" или что-то такое же полезное).</p>

<p>документируйте все, что можете. не могу сказать, сколько раз последний системный администратор думал, что было бы мило не документировать что-либо для "обеспечения безопасности работы" или кто-то просто хотел войти и выйти. как программист должен оставлять хорошие комментарии, так и системные администраторы должны документировать. схема топологии тоже была бы хороша.</p>

<p>план b.</p><p>всегда имейте в виду план аварийного восстановления при проектировании и разработке решения. распознавать отдельные точки отказа, которые могут привести к отключению.</p>

<p>документация: не нужно сходить с ума, но как работает приложение, диаграмма, показывающая, как подходят биты, и способы тестирования каждого компонента, когда все идет не так. пример данных и вывод хороший.</p><p>требования: на какие модули он опирается? версии? операционные системы?</p><p>мониторинг: в идеале разработчики должны включать мониторинг информации и тесты с приложением.</p><p>кстати, об упаковке, упаковке! нет ничего хуже, чем "развертывание", которое означает, что нужно проверить новую версию файла из vcs и скопировать ее на несколько серверов. слишком часто программисты не ценят сложность развертывания программного обеспечения: есть причины, почему версионное, упакованное программное обеспечение составляет основу большинства операционных систем.</p><p>если бы разработчик пришел ко мне с rpm, который был установлен впервые с краткой, исчерпывающей документацией и некоторыми тестами nagios, они были бы моим новым лучшим другом.</p>

<p>я удивлен, что ни один из 17 ответов, приведенных здесь, пока не содержит ничего о том, как обеспечить работу вашего приложения при входе в систему как обычного пользователя.</p><p>помимо процесса установки, приложение должно работать нормально при входе в систему со стандартной учетной записью пользователя.</p>

<ul> <li>поговорите со своим администратором официально и неофициально о том, что вы делаете. как правило, они будут заинтересованы и могут выразить возможные последствия на производстве на раннем этапе. вы не должны соглашаться, но это помогает определить проблемные места.</li> <li>нет, вы не можете иметь весь сервер для себя ... если вам нужно, это политическое решение, независимо от того, насколько оно технически обосновано. если вы хотите работать в политике, идти вперед.</li> <li>производственное оборудование часто выглядит иначе, чем ваш сервер разработки, и даже внутри ферм спецификации на машины отличаются.</li> <li>узнайте, как настроено производство, потому что вы, вероятно, не сможете воспроизвести его на своем рабочем столе, так как это поможет вам сделать неверные предположения.</li> <li>тот факт, что вы можете кэшировать данные в памяти, не означает, что вам следует сначала подождать узкого места (в модульном тестировании или тестировании производительности перед началом производства)</li> <li>если вы помещаете данные в базу данных, подумайте о том, как разбить данные на данные только для чтения (которые можно масштабировать по горизонтали) и данные для чтения и записи (которые обычно масштабируются только по вертикали).</li> <li>если вы помещаете данные в базу данных, должна ли быть действительно субд? существуют и другие системы пар ключ-значение, которые лучше масштабируются (netcache).</li> <li>не думайте ajax - это универсальное решение, оно выглядит круто, но оно ограничивает возможности мониторинга и автоматизации. я не говорю, что не используйте его, просто подумайте дважды.</li> </ul>

<p>ок, это немного разглагольствует, но:</p><p>а) при кодировании предположите, что базовая инфраструктура может выйти из строя и не приходит от счастливой счастливой всегда на суше. или гугл.</p><p>б) у нас, вероятно, нет ресурсов для реализации чего-либо вроде инфраструктуры, о которой вы читали, так что будьте спокойны, когда дела пойдут плохо. вероятно, мы знаем, что нужно сделать, но по какой-то причине это еще не произошло. мы ваши партнеры!</p><p>c) как сказал выше jhs, было бы очень полезно, если бы вы были знакомы с инструментами для устранения неполадок инфраструктуры, такими как ping, traceroute (или объединение обоих - mtr), dig и т. д. огромные бонусные баллы за то, что вы даже знаете о wireshark.</p><p>d) если вы программируете компьютер, вы действительно должны знать, как он подключается к сети, а также основам, таким как возможность анализировать выходные данные ipconfig/all или ifconfig. вы должны быть в состоянии установить ваше интернет-соединение с минимальной помощью.</p><p>в противном случае я думаю, что эйвери в значительной степени прибил это разработчики, которые делают немного сисадмина, на вес золота! но в равной степени, системные администраторы, которые понимают, как разработчики идут о вещах (включая управление версиями и т.д.), очень важны в наше время.</p><p>кажется, в данный момент это происходит, я заметил больше дискуссий об отношениях dev/ops в блогах.</p><p> <a href="http://radar.oreilly.com/2009/05/velocity-preview---keeping-twi.html">сохранение твиттера в твиттере</a> </p><p> <a href="http://www.agileweboperations.com/partitions-and-warfare/">разделы и война</a> </p><p> <a href="http://www.build-doctor.com/2009/05/07/test-first-in-operations">сначала тест в операциях</a> </p>

<p>резервное копирование резервное копирование .... проверьте резервную копию .... всегда будьте готовы к откату</p>

<p>это может относиться только к начинающим программистам, но я имею дело с некоторыми вещами в каждом проекте с некоторыми программистами.</p><ol> <li> <p>"это работает на моей машине" не является действительным утверждением. программист несет ответственность за создание программы установки для использования на сервере или, по крайней мере, документирование каждого соединения и dll и надстройки, которые потребуются на сервере.</p> </li> <li> <p>(я слышал это несколько раз, поэтому, пожалуйста, не смейтесь) я запускаю exe на сервере со своей машины, и он работает. но когда я запускаю его на сервере (citrix, terminal server и т.д.), он не работает. пожалуйста, поймите, dll, ocx и все остальное, что требуется вашей программе, где и как они зарегистрированы, и как ваша программа использует их.</p> </li> </ol><p>это может показаться простым, но я занимаюсь этим постоянно.</p><p>брайан</p>

<p>что ни одна группа или функция не "лучше", чем другая, и что ни одна из них не требует "большего мозга", чем друг друга. я видел, как обе стороны проявляют примадонность в компании другой - вы все пытаетесь достичь одних и тех же целей - сосредоточьтесь на этих сходствах, а не на том, что вы используете разные инструменты.</p>

<p>архитектор инфраструктуры, ставший программистом, возможно, захочет откатить эту транзакцию в будущем :)</p><ol> <li>поговорите друг с другом, рано и часто. просмотрите проекты с парнями, которые будут управлять инфраструктурой, на которой будет развернуто ваше приложение (если вы знаете, кто это будет).</li> <li>нулевая потеря данных возможна, но ответственность за это несут разработчики и системные администраторы. снова, общение друг с другом может помочь здесь.</li> <li>сотрудники вашей инфраструктуры должны были участвовать в определении нефункциональных требований.</li> <li>организовать пиво (когда работа сделана) и пиццу (пока мы работаем). каким-то образом присутствие такой еды влияет на нашу способность заставить наши милые маленькие 32 процессорные коробки делать то, что вы от них хотите :)</li> </ol>

<p>как кто-то, кто был системным администратором для разработчиков и сам разработчик, совет, данный здесь, не только золотой, но и должен быть частью документации по найму новых разработчиков для компаний во всем мире.</p><p>что-то, что я не видел (пока) объяснил, так это то, что разработчики действительно должны знать продукты, которые они будут использовать для создания программ, за которые им платят. количество случаев, когда мне приходилось объяснять и настраивать серверы apache, установки eclipse и visual studio, а также базы данных на компьютерах разработчиков, вызывает некоторое беспокойство.</p>