Які речі щодо систематики повинен знати кожен програміст?


96

Як програміст, ми схильні сприймати сисадмін як належне. Кілька разів, коли я був без гарного сисадміна, по-справжньому змусив мене оцінити те, що ви робите. Коли ми заходимо в навколишнє середовище без сисадміна, які слова мудрості ви можете нам запропонувати?

Відповіді:


70

Я б почав із:

  1. Завжди мати якусь резервну систему. Ще краще, якщо вона має історію.
  2. Розглянемо окремі пункти провалу і як з ними боротися, якщо вони не зможуть.
  3. Залежно від кількості зайнятих комп'ютерів, розгляд способу створення та створення стандартного зображення на комп’ютерах полегшить життя кожному - ні "це працює на моєму", оскільки у них така програма, як правило, не встановлена.
  4. Документуйте все, хоча б тому , що забудете, як ви щось налаштували.
  5. Будьте в курсі оновлень безпеки.

11
документування всіх кроків - це те, що я бачив, як роблять хороші сисадміни, і я почав це робити сам. Дуже корисно, справді.
Nathan DeWitt

2
Розглянемо системи самодокументування. Наприклад, навіщо зберігати список імен хостів у текстовому файлі чи вікі десь, коли добре коментований файл Zone є канонічним джерелом інформації.
Дейв Чейні

3
Дейв, чи доступний всім добре коментований файл Zone? Якщо я нова людина, яка приходить на борт, чи не простіше сказати "перейдіть на цю вікі за всіма своїми відповідями", а не "все документується скрізь. DNS задокументовано в налаштуваннях DNS. Whozit задокументовано в whozit Конфігураційний файл. База даних задокументована у файлі конфігурації бази даних. " Це здається мені дуже недружелюбним.
Nathan DeWitt

5
Натан, Дейв: Трюком, звичайно, є використання сценарію для оновлення вікі з канонічного джерела. Для мене це творить чудеса, я дуже шкодую, що не можу використовувати його там, де зараз працюю.
Андерс Евреній

6
Я додам до цього: Створіть тестову систему. Вам потрібне середовище, де невдача - це варіант. У мене для цього працює сервер VirtualBox, але я використовував свою персональну робочу станцію, коли сервери недоступні
Марк Портер

44

<вставити сюди велику відмову від відповідальності>

Деякі з них були сказані раніше, але варто повторити.

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

  • Документуйте все. Якщо у вас немає, встановіть вікі, що не знаходяться на радарі, але переконайтеся, що ви створили резервну копію. Почніть з збирання фактів, і одного дня сформується велика картина.

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

  • Тримайте журнали збирання для кожної системи, навіть якщо це просто копіювати та вставляти команди для її створення.

  • Під час створення вашої системи встановіть та налаштуйте ваші програми, протестуйте, чи вона працює, і виконайте свої показники. Тепер витріть диски. Серйозно. 'dd' перший мегабайт з передньої сторони дисків або іншим чином поле зробить незавантаженим. Годинник тикає: доведіть, що ваша документація може відновити її з нуля (а ще краще, доведіть, що ваш колега може нічого, крім вашої документації). Це складе половину вашого плану відновлення після стихійних лих.

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

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

  • Автоматизуйте скільки завгодно. Якщо вам доведеться щось робити тричі, переконайтесь, що другий витрачено на розвиток вашої автоматизації, щоб третій був повністю автоматизованим. Якщо ви не можете автоматизувати це, документуйте. Там є набори автоматизації - подивіться, чи можете ви змусити їх працювати для вас.

Моніторинг:

  • Приладобудування - це чисте золото. Можливість перегляду транзакцій, що проходять через систему, набагато простішає налагодження та усунення несправностей.

  • Створіть цілі тести, які доводять не лише те, що програма жива, але й справді робить те, що їй належить. Окуляри ваші, якщо їх можна ввести в систему моніторингу для оповіщення. Це служить подвійним обов'язком; окрім доведення роботи програми, це значно покращує оновлення системи (моніторингові системи звітів зелені, оновлення працювало, час повертатися додому).

  • Бенчмарк, відстежуйте та збирайте метрики щодо всього, що потрібно зробити для цього. Тести підказують, коли очікувати, що щось випустить чарівний дим. Моніторинг повідомляє, коли він є. Показники та статистика полегшують отримання нового набору (зі свіжим чарівним димом) через управління.

  • Якщо у вас немає системи моніторингу, застосуйте її. Бонусні бали, якщо ви дійсно зробите в ньому вищезазначені тести.

Безпека:

  • "chmod 777" (він же надає весь доступ / привілеї) ніколи не є рішенням.

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

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

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

Обладнання:

  • Ніколи не припускайте, що щось зробить те, що написано на коробці. Доведіть, що робить те, що вам потрібно, на всякий випадок, якщо цього не зробити. Ви побачите, що говорите "це майже працює" частіше, ніж ви очікували.

  • Не скупіться на віддалене керування обладнанням. Серійні консолі та управління освітленням слід вважати обов'язковими. Бонусні бали за дистанційно керовані смуги живлення за ті часи, коли у вас немає можливості.

(Убік: Існує два способи вирішити проблему о 3 ранку. Один із них - теплий, робота над ноутбуком над VPN у вашій піжамі, інший - товста куртка та приїзд до центру даних / офісу. Я знаю, який з них я віддайте перевагу.)

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

  • Залучіть людей, які будуть підтримувати систему з першого дня життєвого циклу проекту. Час проведення часу та мозку може і здивує, і немає сумнівів, що вони (повинні?) Матимуть стандарти або вимоги, які стануть проектними залежностями.

  • Документація є частиною проекту. Ви ніколи не отримаєте час написати всю справу після закриття проекту та переходу системи на технічне обслуговування, тому переконайтеся, що воно включено як зусилля на графік на початку.

  • З першого дня впроваджуйте планове застарівання в проект та розпочніть цикл оновлення за півроку до дня вимкнення, який ви вказали в проектній документації.

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

Розробка:

  • Переконайтеся, що ваші системи розробки та постановки нагадують виробництво. Відеомагнітофони або інші методи віртуалізації (зони, LDOM, vserver) спрощують виробничі клони в реальному світі в кожному сенсі, але продуктивність.

Резервні копії

  • Дані, які ви не створюєте резервну копію, - це дані, які ви не хочете. Це непорушний закон. Переконайтесь, що ваша реальність відповідає цій.

  • Резервні копії складніше, ніж вони виглядають; деякі файли будуть відкритими або заблокованими, тоді як інші потрібно припинити, щоб сподіватися на відновлення, і всі ці проблеми потрібно вирішити. У деяких пакетах резервного копіювання є агенти чи інші методи роботи з відкритими / заблокованими файлами, інші - не. Скидання баз даних на диск і резервне копіювання цих файлів вважається однією з форм "припинення", але це не єдиний метод.

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

І найголовніше ...

Виберіть свої режими відмов, інакше Мерфі буде ... і Мерфі не працює за вашим графіком.

Дизайн для відмов, документуйте розроблені слабкі моменти кожної системи, що викликає їх і як відновити. Все зміниться, коли щось піде не так.


1
+1 Це як би хтось заглянув мені в голову - і це було красиво; p
Оскар Дювеборн

3
"Бенчмарк, відстежуйте та збирайте показники щодо всього, що можна зробити для цього. Бенчмарки підкажуть, коли очікувати, що щось випустить магічний дим. Моніторинг повідомляє, коли це з'явиться. Метрики та статистика полегшують отримання нового набору (зі свіжою магією) дим) через управління ». Чисте золото
TJ Crowder

43

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


7
+1 для цього. Це не тому , що ми робимо це виглядати легко , що це на самому справі.
Герт М

Як загальний спеціаліст, що займається роботою адміністратора та програмування, я повністю розумію ваше становище. +1
Avery Payne

4
Звичайно, я пішов іншим шляхом, я знайшов декілька типів sysadmin, які насправді не розуміють різницю між типом сценаріїв та невеликими утилітними програмами, які ми всі можемо підбити та "реальними" програмуваннями.
Роб Моїр

2
+1 Роберт: Або sysadmin, який говорить "це просто, якщо заява", щоб обійти погано розроблену мережеву архітектуру. Взаємоповага та розуміння є ключовим.
Стівен Еверс

27
  • Зрозумійте, що на краще чи гірше, багато серверів та / або мережевого обладнання, яким вони, як правило, дуже схожі на дітей з другої родини. Це їхні малюки. Вони прагнуть їх, допомагають їм, коли вони хворі, і пильно стежать за проблемами. Це не повинно бути таким, але через багато років це часто буває . Майте це на увазі, коли ви повідомляєте їм свої занепокоєння щодо того, що обладнання не працює належним чином або очікується. І якщо ви отримаєте відповідь, яку ви не розумієте, спробуйте відфільтрувати її через цей світогляд.
  • Будьте добрими робочими умовами. Звучить нахабно, але він важить своєї ваги в золоті. Якогось дня вам знадобиться якась особлива послуга. І ось одного дня цей сисадмін буде радий вийти зі свого шляху, щоб зробити життя трохи легшим для вас, тільки цього разу.
  • Це робочі стосунки йдуть обома напрямками. Якщо sysadmin дуже зайнятий, і ви могли трохи полегшити життя, написавши невеликий сценарій або програму, тоді робіть це! Вони оцінять це більше, ніж ви знаєте.
  • Будьте дуже чіткими. "Це смокче" не так зрозуміло, як "мати переривчасте мережеве з'єднання - це трохи дратує, будь-який шанс на це подивитися?"
  • Якщо ви думаєте, що ваш додаток буде масштабуватись, попросіть адміністратора, перш ніж припустити, що це буде. Вони можуть "бачити" те, чого ви не знаєте, або знаєте щось про обмеження продуктивності обладнання, яке ви збираєтесь розгорнути.
  • Якщо вашій програмі потрібна настройка, але вона, здається, не є проблемою з кодом, поцікавтеся, як працюють сервери. Сисадміни схильно ставляться до своїх машин і не задоволені, коли вони «хворіють» або «погано поводяться». Прохання добре перетворити хвору машину (або відремонтувати / замінити).
  • (як було зазначено в іншому місці) документуйте налаштування, які ви використовуєте, і чому ви їх використовуєте. Просто встановити прапорець X або "рядок конфігураційного файлу Y" не допоможе. Ви можете встановити параметр, який видаляє всі ваші дані під час наступної перезавантаження для всього, що ви знаєте.
  • Якщо у вас немає часу документувати налаштування на папері, спробуйте задокументувати його в системі, якщо це можливо. З файлами, то це повинно бути майже стандартна практика - всі налаштування зміна має бути штамп дати, з ініціалами, очікуваний ефект від цієї установки, та причина , чому воно було змінено (див перед точкою кулі). Ця маленька звичка не раз врятувала моє бекон за час хрускоту. "Чому ми це зробили?" "Тому що ми мантували політику X, а параметр Y дає нам поведінку, необхідну для політики X".
  • Пиво. Або Кола. Або навіть Вода. Напої завжди вітаються. Бути систематичним спрагою - це спрага.

3
Для проблеми документації / зміни конфігураційного файлу рекомендую помістити всі файли конфігурації в систему контролю версій. Це може бути дуже просто зробити програмістам, оскільки вони, сподіваємося, вже використовують таку систему для свого вихідного коду. Якщо вони також додадуть коментар щоразу, коли вони зроблять зміни, буде легко повернутися в історію і побачити, що було змінено, коли і чому.
Андерс Сандвіг

+1 для цього, оскільки він "закриває цикл" управління змінами. Чудова пропозиція.
Евері Пейн

2
Відмінна пропозиція щодо надання чітких звітів про помилки. Ніщо не засмучує мене більше, ніж після того, як мені сказали, що є проблема, і знаючи, що це може вплинути на багатьох людей, я мушу дражнити деталі у незацікавленого програміста
Дейва Чейні

23

Безпека не є думкою. Хоча зламана програма може змусити програміста виглядати некомпетентним, це (принаймні) втрачені вихідні, проведені на перевірку, очищення та / або відновлення з резервних копій для системного адміністратора.

З цього приводу не слід розглядати резервні копії як контроль версій. Вони призначені для відновлення після аварій, і насправді не призначені для відновлення коду, оскільки ви забули, що змінили.

І перестаньте сліпо звинувачувати оновлення Windows за те, що ваш код порушено. Мені байдуже, що це спрацьовувало добре, скажи мені, чому це не працює зараз - тоді ми можемо побачити, чия це вина.


17

Як налагодити проблеми з мережею та спостерігати за запуском програми за допомогою інструментів sysadmin. Як програміст, який почав працювати в системному адмініструванні, я вражений тим, як безсилі багато програмістів стають, як тільки мережа "просто припиняється".

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

3
+1. Будь-який розробник, який пише програму, залежну від продуктивності мережі, повинен прочитати "TCP / IP Illustrated v1", покійного великого У. Річарда Стівенса, перш ніж коли-небудь починати кодувати.
Муралі Суріар

1
Дякую за всі відгуки хлопці. Мені роками не доводилося бачити програмістів у безпорадному спокої, як тільки основна мережа не вдається. І в наші дні майже все програмування - це мережеве програмування.
jhs

14

Знайте, як вирішити проблеми.

Дуже легко передати долар (наприклад, ваша мережа шлакує моє спілкування з базою даних). Це може бути помилковою мережею, але у вас повинні бути журнали програм із помилками, які за допомогою Google або SO можуть виявити проблему в конфігурації програми.

Всім подобається звинувачувати апаратуру, ОС або мережу, тому, якщо ви будете дотримуватися трохи ретельнішої уваги, ви зробите системного адміністратора щасливою людиною. Тому що, якщо нічого іншого, ви, можливо, зможете вказати їх у конкретному напрямку щодо того, що може бути неправильним (на відміну від того, щоб сказати "ваша мережа смокче" або щось не менш корисне).


1
Абсолютно. Я не можу почати рахувати години, які я витратив на пошуки проблем у неправильних місцях через те, що люди вказували мене в неправильному напрямку
Герт М

8

Документуйте все, що можете. Не можу сказати, скільки разів останній сисадмін думав, що було б мило не документувати щось для «безпеки роботи», або хтось просто захотів увійти та вийти. Так само, як програміст повинен залишати хороші коментарі, системні адміністратори повинні документувати. Діаграма топології теж непогана.


7

План Б.

Завжди майте на увазі план відновлення після катастроф при розробці та розробці рішення. Визнайте окремі точки відмови, які можуть призвести до їх відключення.


6

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

Вимоги: на які модулі вона покладається? Версії? ОС?

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

Якщо говорити про упаковку, УПАКОВКА! Нічого гіршого, ніж "розгортання", що означає перевірку нового перегляду файлу з VCS та копіювання його на купу серверів. Занадто часто програмісти не оцінюють складність розгортання програмного забезпечення: є причини, через які пакетоване програмне забезпечення утворює основу більшості ОС.

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


6

Я здивований, що не з 17 відповідей, що даються тут, включають що-небудь про забезпечення роботи програми, коли ви входите в систему як стандартний користувач.

Окрім процесу інсталяції, додаток має працювати нормально, коли увійти зі стандартним обліковим записом користувача.


4

Резервне копіювання Резервне копіювання ... Тестуйте резервну копію .... Завжди будьте готові до того, щоб повернутись назад


4

Це може стосуватися лише початківців програмістів, але я маю справу з кількома речами кожного проекту з деякими програмістами.

  1. "Це працює на моїй машині" - це ніколи не є дійсним твердженням. Відповідальність програміста є створити інсталяційну програму для використання на сервері або принаймні документувати всі з'єднання та dll та надбудови, які знадобляться на сервері.

  2. (Я чув це кілька разів, тому, будь ласка, не смійтесь) Я запускаю exe на сервері зі своєї машини, і вона працює. Але коли я запускаю його на сервері (Citrix, Terminal Server тощо), він не працює. Будь ласка, зрозумійте dll та ocx та все інше, що вимагає ваша програма, і де та як вони зареєстровані, і як ваша програма їх використовує.

Це може здатися простим, але я з цим постійно працюю.

Брайан


4
  • поговорити зі своїм адміністратором як формально, так і неофіційно про те, що ти робиш. Зазвичай вони будуть зацікавлені і можуть виразити можливий вплив на виробництво на початку. Ви не повинні погоджуватися, але це допомагає виявити місця проблем.
  • Ні, ви не можете мати весь сервер для себе ... Якщо вам потрібно, це політичне рішення, незалежно від того, наскільки це технічно звучить. Якщо ви хочете працювати над політикою, йдіть прямо вперед.
  • Виробниче обладнання часто виглядає інакше, ніж у вашого сервера розробки, і навіть у господарствах специфікації на машинах різні.
  • Дізнайтеся, як налаштовується виробництво, оскільки ви, швидше за все, не можете його повторити на робочому столі, це запобігає неправильним припущенням.
  • Тільки тому, що ви можете кешувати речі в пам’яті, це не означає, що вам слід, спочатку дочекайтеся «вузького місця» (під час тестування одиниць або тестування продуктивності перед виробництвом)
  • якщо ви вставляєте дані в базу даних, подумайте, як ви могли розділити ці дані на дані, доступні лише для читання (які можуть бути горизонтально масштабовані) та дані для читання-запису (які зазвичай мають лише вертикальну шкалу).
  • якщо ви вставляєте дані в базу даних, чи справді має бути RDBMS? Є інші парні системи ключових значень там, які краще масштабуються (netcache).
  • не думайте, що AJAX - це всебічне рішення, це виглядає круто, але це обмежує можливості моніторингу та автоматизації. Я не кажу, що не використовуйте, просто подумайте двічі.

4

Гаразд це трохи збивається, але:

а) При кодуванні припустіть, що базова інфраструктура може вийти з ладу, і не походить із суші, щасливого та щасливого. Або Google.

б) Ми, мабуть, не маємо ресурсів, щоб реалізувати щось подібне до інфраструктури, про яку ви читали, тому полегшіть нас, коли все піде на спад. Ймовірно, ми знаємо, що потрібно зробити, але з будь-якої причини це просто ще не сталося. Ми - ваші партнери!

c) Як сказано в jhs, це дійсно допоможе, якби ви ознайомилися з інструментами для усунення несправностей з інфраструктурою, такими як ping, traceroute (або поєднуючи обидва - mtr), dig та ін.

г) Якщо ви програмуєте комп’ютер, ви дійсно повинні знати, як він підключається до мережі, і такі основи, як можливість розбору результатів ipconfig / all або ifconfig. Ви повинні мати можливість налагодити та запустити підключення до Інтернету за мінімальної допомоги.

Інакше я думаю, що Avery дуже прибив її. Деви, які роблять маленький сисадмін, варті своєї ваги в золоті! Але в рівній мірі сисадміни, які розуміють, як розбираються люди (у тому числі версії тощо), дуже важливі в цей день та вік.

Начебто це зараз в ефірі, я помітив більше дискусій про відносини dev / ops у блогах - перевірити

Продовжуючи Twitter

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

Випробування спочатку в операціях


3

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


2

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

  1. Поговоріть один з одним, рано і часто. Перегляньте дизайни з хлопцями, які керуватимуть інфраструктурою вашого додатка, буде розгорнуто (якщо ви знаєте, хто це буде).
  2. Можлива втрата нульових даних, але це відповідальність, яку поділяють розробники та системні адміністратори. Знову ж таки, розмова між собою може допомогти.
  3. Ваш персонал з інфраструктури повинен був брати участь у визначенні нефункціональних вимог.
  4. Влаштуйте пиво (коли робота виконана) та піцу (поки ми працюємо). Якимсь чином присутність такої їжі впливає на нашу здатність змусити наші маленькі приємні 32 коробки для процесора робити все, що ви хочете.

2

Як хтось, хто був системним адміністратором для розробників, і сам розробник, поради, що даються тут, є не лише золотом, але повинні бути частиною найманої документації для нових розробників для компаній у всьому світі.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.