โปรแกรมเมอร์ทุกคนควรรู้อะไรบ้าง?


96

ในฐานะโปรแกรมเมอร์เรามักจะใช้ sysadmins เพื่อรับสิทธิ์ ไม่กี่ครั้งที่ฉันไม่เคยดูแลระบบที่ดีมาก่อนก็ทำให้ฉันซาบซึ้งในสิ่งที่พวกคุณทำ เมื่อเราเข้าไปในสภาพแวดล้อมที่ไม่มีระบบการดูแลระบบคุณสามารถเสนอคำแห่งปัญญาให้เราได้บ้าง

คำตอบ:


70

ฉันจะเริ่มต้นด้วย:

  1. มีระบบสำรองข้อมูลเสมอ ดียิ่งขึ้นถ้ามันมีประวัติ
  2. พิจารณาประเด็นความล้มเหลวเพียงจุดเดียวและวิธีจัดการกับพวกเขาหากพวกเขาล้มเหลว
  3. ขึ้นอยู่กับปริมาณของคอมพิวเตอร์ที่เกี่ยวข้องการหาวิธีสร้างและสร้างภาพมาตรฐานในคอมพิวเตอร์จะทำให้ชีวิตของทุกคนง่ายขึ้น - ไม่ "ใช้งานได้จริง" เพราะมีโปรแกรมดังกล่าวและโปรแกรมดังกล่าวไม่ได้ติดตั้งตามปกติ
  4. บันทึกเอกสารทุกอย่างหากเพียงเพราะคุณจะลืมวิธีการตั้งค่าบางอย่าง
  5. หมั่นอัพเดทความปลอดภัย

11
การบันทึกทุกขั้นตอนเป็นสิ่งที่ฉันเห็นว่า sysadmins ทำดีและฉันเริ่มทำเอง มีประโยชน์มากจริง ๆ
Nathan DeWitt

2
พิจารณาระบบการจัดทำเอกสารด้วยตนเอง ตัวอย่างเช่นเหตุใดจึงต้องเก็บรายชื่อโฮสต์ไว้ในไฟล์ข้อความหรือวิกิที่ไหนสักแห่งเมื่อไฟล์ Zone ที่มีความเห็นดีคือแหล่งข้อมูลที่เป็นที่ยอมรับ
Dave Cheney

3
เดฟเป็นไฟล์ Zone ที่มีความคิดเห็นดีทุกคนหรือไม่ ถ้าฉันเป็นคนใหม่ที่มาบนกระดานจะไม่ง่ายกว่าที่จะบอกว่า "ไปที่วิกินี้สำหรับคำตอบทั้งหมดของคุณ" แทนที่จะ "ทุกอย่างมีการบันทึกไว้ทุกที่ DNS มีการบันทึกไว้ในการตั้งค่า DNS whozit มีการบันทึกไว้ใน whozit ไฟล์ config ฐานข้อมูลถูกบันทึกไว้ในไฟล์กำหนดค่าฐานข้อมูล " ดูเหมือนว่า ... เป็นมิตรกับฉันมาก
Nathan DeWitt

5
นาธานเดฟ: เคล็ดลับคือการใช้สคริปต์เพื่ออัปเดตวิกิจากแหล่งที่เป็นที่ยอมรับ มันเป็นสิ่งมหัศจรรย์สำหรับฉันฉันขอโทษจริงๆที่ฉันไม่สามารถใช้งานได้ในที่ที่ฉันทำงานอยู่ตอนนี้
Anders Eurenius

6
ฉันจะเพิ่มไปนี้สร้างระบบทดสอบ คุณต้องการสภาพแวดล้อมที่มีความล้มเหลวเป็นตัวเลือก ฉันมีเซิร์ฟเวอร์ที่ใช้ VirtualBox สำหรับเรื่องนี้ แต่ฉันได้ใช้เวิร์กสเตชันส่วนบุคคลของฉันเมื่อเซิร์ฟเวอร์ไม่สามารถใช้งานได้
Mark Porter

44

<ใส่ข้อความปฏิเสธความรับผิดชอบโพสต์ใหญ่ที่นี่>

บางส่วนของแนวหินเหล่านี้เคยพูดมาก่อน แต่มันก็คุ้มค่าที่จะทำซ้ำ

เอกสารอ้างอิง:

  • บันทึกเอกสารทุกอย่าง หากคุณยังไม่มีให้ติดตั้งวิกิเรดาร์ภายใต้เรดาร์ แต่ให้แน่ใจว่าคุณสำรองไว้ เริ่มต้นด้วยการรวบรวมข้อเท็จจริงและวันหนึ่งภาพใหญ่ก็จะปรากฏขึ้น

  • สร้างไดอะแกรมสำหรับแต่ละกลุ่มตรรกะและปรับปรุงให้ทันสมัยอยู่เสมอ ฉันไม่สามารถนับจำนวนครั้งที่แผนผังเครือข่ายที่ถูกต้องหรือไดอะแกรมคลัสเตอร์ช่วยฉันได้

  • เก็บบันทึกการสร้างสำหรับแต่ละระบบแม้ว่าจะเป็นเพียงการคัดลอกและวางคำสั่งสำหรับวิธีการสร้าง

  • เมื่อสร้างระบบของคุณให้ติดตั้งและกำหนดค่าแอปทดสอบการทำงานและดำเนินการเปรียบเทียบของคุณ ตอนนี้เช็ดดิสก์ อย่างจริงจัง. 'dd' เมกะไบต์แรกที่อยู่ด้านหน้าของดิสก์หรือทำให้กล่องไม่สามารถบูตได้ นาฬิกากำลังฟ้อง: พิสูจน์ว่าเอกสารของคุณสามารถสร้างใหม่ได้ตั้งแต่ต้น (หรือดีกว่าพิสูจน์ว่าเพื่อนร่วมงานของคุณสามารถทำได้โดยไม่มีอะไรมากกว่าเอกสารของคุณ) นี่จะเป็นครึ่งหนึ่งของแผนการกู้คืนความเสียหาย

  • ตอนนี้คุณมีแผนกู้คืนภัยพิบัติในครึ่งแรกของคุณแล้ว วิธีคืนสถานะแอปพลิเคชันของคุณ (กู้คืนไฟล์จากเทปโหลดฐานข้อมูลจากการทิ้ง) รายละเอียดผู้ขาย / สนับสนุนข้อกำหนดเครือข่ายวิธีการและตำแหน่งที่จะรับฮาร์ดแวร์ทดแทน - สิ่งใดก็ตามที่คุณคิดว่าจะช่วยให้ระบบสำรองข้อมูล

ระบบอัตโนมัติ:

  • อัตโนมัติให้มากที่สุด ถ้าคุณต้องทำอะไรซักอย่างสามครั้งตรวจสอบให้แน่ใจว่าสิ่งที่สองนั้นถูกใช้ไปกับการพัฒนาระบบอัตโนมัติของคุณดังนั้นสิ่งที่สามก็คือระบบอัตโนมัติทั้งหมด หากคุณไม่สามารถทำให้เป็นเอกสารอัตโนมัติ มีห้องสวีทอัตโนมัติที่นั่น - ดูว่าคุณสามารถทำให้มันทำงานให้คุณได้ไหม

การตรวจสอบ:

  • การประยุกต์ใช้เครื่องมือวัดเป็นทองคำบริสุทธิ์ ความสามารถในการดูธุรกรรมที่ทำผ่านระบบทำให้การดีบักและแก้ไขปัญหาง่ายขึ้นมาก

  • สร้างการทดสอบแบบครบวงจรที่พิสูจน์ได้ว่าไม่เพียง แต่แอปพลิเคชั่นยังมีชีวิตอยู่ แต่ทำในสิ่งที่มันควรจะเป็นจริง คะแนนเป็นของคุณหากสามารถต่อเข้ากับระบบตรวจสอบเพื่อแจ้งเตือนได้ ทำหน้าที่สองหน้าที่นี้; นอกเหนือจากการพิสูจน์ว่าแอปใช้งานได้แล้วมันทำให้การอัพเกรดระบบง่ายขึ้นอย่างมาก (ระบบการตรวจสอบรายงานสีเขียวอัพเกรดทำงานได้เวลากลับบ้าน)

  • เกณฑ์มาตรฐานตรวจสอบและรวบรวมตัวชี้วัดในทุกสิ่งที่ควรทำ เกณฑ์มาตรฐานบอกคุณเมื่อต้องคาดหวังว่าบางสิ่งจะทำให้ควันวิเศษออกไป การตรวจสอบจะบอกคุณเมื่อมี ตัวชี้วัดและสถิติทำให้ง่ายต่อการรับชุดใหม่ (ด้วยควันเวทย์ใหม่) ผ่านการจัดการ

  • หากคุณไม่มีระบบการตรวจสอบให้ดำเนินการอย่างใดอย่างหนึ่ง คะแนนโบนัสหากคุณทำการทดสอบแบบ end-to-end ด้านบน

การรักษาความปลอดภัย:

  • "chmod 777" (หรือที่รู้จักกันว่าให้สิทธิ์การเข้าถึง / สิทธิ์ทั้งหมด) ไม่เคยเป็นทางออก

  • สมัครสมาชิกหลักการ 'น้อยที่สุด'; หากยังไม่ได้ติดตั้งคัดลอกหรืออาศัยอยู่บนดิสก์จะไม่สามารถทำลายได้ "อ่างล้างมือในครัว" การติดตั้งระบบปฏิบัติการและซอฟต์แวร์อาจทำให้ชีวิตง่ายขึ้นในระหว่างขั้นตอนการสร้าง แต่คุณต้องจ่ายเงินเพื่อติดตาม

  • รู้ว่าทุกพอร์ตที่เปิดอยู่บนเซิร์ฟเวอร์นั้นมีไว้เพื่ออะไร ตรวจสอบพวกเขาเป็นประจำเพื่อให้แน่ใจว่าไม่มีของใหม่ปรากฏขึ้น

  • อย่าพยายามทำความสะอาดเซิร์ฟเวอร์ที่ถูกบุกรุก จำเป็นต้องสร้างใหม่ตั้งแต่เริ่มต้น สร้างใหม่ไปยังเซิร์ฟเวอร์สำรองด้วยสื่อที่ดาวน์โหลดใหม่การกู้คืนข้อมูลจากการสำรองข้อมูลเท่านั้น (เนื่องจากไบนารีอาจถูกบุกรุก) หรือโคลนโฮสต์ที่ถูกบุกรุกไปยังที่อื่นที่แยกได้เพื่อการวิเคราะห์เพื่อให้คุณสามารถสร้างชุดใหม่ได้ มีฝันร้ายทางกฎหมายอยู่รอบตัวนี้ดังนั้นทำผิดทางด้านการดูแลรักษาในกรณีที่คุณต้องการดำเนินการทางกฎหมาย (หมายเหตุ: IANAL)

ฮาร์ดแวร์:

  • อย่าสันนิษฐานว่าอะไรจะทำตามที่พูดในกล่อง พิสูจน์ว่ามันทำในสิ่งที่คุณต้องการในกรณีที่มันไม่ คุณจะพบว่าตัวเองพูดว่า "ใช้งานได้" บ่อยกว่าที่คุณคาดหวัง

  • อย่าข้ามการจัดการฮาร์ดแวร์ระยะไกล คอนโซลการจัดการแบบอนุกรมและการจัดการไฟควรพิจารณาให้เหมาะสม คะแนนโบนัสสำหรับแถบพลังงานที่ควบคุมจากระยะไกลในช่วงเวลานั้นเมื่อคุณไม่มีตัวเลือก

(นอกเหนือจาก: มีสองวิธีในการแก้ไขปัญหาเวลา 3:00 น. หนึ่งครั้งเกี่ยวข้องกับความอบอุ่นทำงานบนแล็ปท็อปผ่าน VPN ในชุดนอนของคุณอีกวิธีหนึ่งเกี่ยวข้องกับแจ็คเก็ตหนาและไดรฟ์ไปยังดาต้าเซ็นเตอร์ / สำนักงาน ต้องการ.)

การจัดการโครงการ:

  • ให้ผู้คนมีส่วนร่วมในการรักษาระบบตั้งแต่วันแรกของวงจรชีวิตของโครงการ เวลานำในชุดและเวลาสมองสามารถและจะแปลกใจและไม่ต้องสงสัยเลยว่าพวกเขาจะ (ควร?) มีมาตรฐานหรือข้อกำหนดที่จะกลายเป็นการพึ่งพาโครงการ

  • เอกสารเป็นส่วนหนึ่งของโครงการ คุณจะไม่มีเวลาเขียนสิ่งต่าง ๆ ทั้งหมดหลังจากที่โครงการถูกปิดและระบบได้ย้ายไปที่การบำรุงรักษาดังนั้นให้แน่ใจว่ามันรวมอยู่ในความพยายามตามกำหนดเวลาที่เริ่มต้น

  • ใช้การล้าสมัยตามแผนในโครงการตั้งแต่วันแรกและเริ่มวงจรการรีเฟรชหกเดือนก่อนวันปิดที่คุณระบุในเอกสารโครงการ

เซิร์ฟเวอร์มีอายุการใช้งานที่กำหนดเมื่อเหมาะสมสำหรับใช้ในการผลิต จุดสิ้นสุดของอายุการใช้งานนี้มักจะถูกกำหนดเป็นเมื่อใดก็ตามที่ผู้ขายเริ่มคิดค่าบริการเพิ่มเติมในการบำรุงรักษารายปีมากกว่าที่จะเสียค่าใช้จ่ายในการรีเฟรชชุดอุปกรณ์หรือประมาณสามปี หลังจากเวลานี้พวกเขาเหมาะสำหรับสภาพแวดล้อมการพัฒนา / ทดสอบ แต่คุณไม่ควรพึ่งพาพวกเขาในการดำเนินธุรกิจ การกลับมาใช้สภาพแวดล้อมอีกครั้งใน 2 1/2 ปีให้เวลากับคุณในการจัดการห่วงและการเงินที่จำเป็นสำหรับชุดใหม่ที่จะสั่งซื้อและใช้การโยกย้ายที่ราบรื่นก่อนที่คุณจะส่งชุดเก่าไปยังผู้ขายรายใหญ่บนท้องฟ้า

การพัฒนา:

  • ตรวจสอบให้แน่ใจว่าระบบการพัฒนาและการจัดเตรียมของคุณคล้ายกับการผลิต เทคนิคการจำลองเสมือนของ VM หรืออื่น ๆ (โซน, LDOM's, vservers) ทำให้การผลิตโคลนนิ่งใช้งานได้จริง แต่มีประสิทธิภาพ แต่ใช้งานง่าย

การสำรองข้อมูล

  • ข้อมูลที่คุณไม่ได้ทำการสำรองข้อมูลคือข้อมูลที่คุณไม่ต้องการ นี่เป็นกฎหมายที่ไม่เปลี่ยนรูป ตรวจสอบให้แน่ใจว่าความเป็นจริงของคุณตรงกับสิ่งนี้

  • สำรองข้อมูลยากกว่าที่พวกเขามอง; ไฟล์บางไฟล์จะเปิดหรือล็อคในขณะที่คนอื่น ๆ จะต้องสงสัยว่าจะมีความหวังในการกู้คืนและปัญหาเหล่านี้จะต้องได้รับการแก้ไข แพ็คเกจสำรองบางอันมีเอเจนต์หรือวิธีอื่น ๆ เพื่อจัดการกับไฟล์เปิด / ล็อค การดัมพ์ฐานข้อมูลลงในดิสก์และสำรองข้อมูลนั้นนับเป็นรูปแบบหนึ่งของ "quiescing" แต่ไม่ใช่วิธีการเดียว

  • การสำรองข้อมูลไม่มีค่าหากไม่ได้ทำการทดสอบ ทุกสองสามเดือนดึงเทปสุ่มออกจากที่เก็บถาวรตรวจสอบให้แน่ใจว่ามีข้อมูลอยู่ในนั้นและข้อมูลนั้นสอดคล้องกัน

และที่สำคัญที่สุด ...

เลือกโหมดความล้มเหลวของคุณมิฉะนั้นเมอร์ฟีจะ ... และเมอร์ฟีไม่ทำงานตามกำหนดเวลาของคุณ

ออกแบบสำหรับความล้มเหลวบันทึกจุดอ่อนที่ออกแบบไว้ของแต่ละระบบสิ่งที่กระตุ้นให้พวกเขาและวิธีการกู้คืน มันจะสร้างความแตกต่างเมื่อมีอะไรผิดพลาด


1
+1 มันเหมือนมีคนมองเข้าไปในใจของฉัน - และมันก็สวยงาม; p
Oskar Duveborn

3
"มาตรฐานตรวจสอบและรวบรวมตัวชี้วัดในทุกสิ่งที่ควรทำเช่นนั้นมาตรฐานจะบอกคุณว่าเมื่อไรจะมีบางสิ่งที่จะทำให้ควันแห่งเวทมนตร์หายไปการตรวจสอบจะบอกคุณเมื่อมี ควัน) ผ่านการจัดการ " ทองคำบริสุทธิ์
TJ Crowder

43

อย่าถือว่าง่าย ฉันรู้ว่าโปรแกรมเมอร์หลายคนที่คิดว่าเพียงเพราะพวกเขาสามารถติดตั้ง IIS หรือ Apache บนกล่อง dev มีที่พวกเขาสามารถเรียกใช้เว็บฟาร์ม ทำความเข้าใจกับงานที่เกี่ยวข้องและทำการวิจัยและการวางแผนของคุณไม่เพียง แต่คิดว่างานระบบดูแลระบบเป็นสิ่งที่ง่ายที่คุณสามารถทำได้ภายใน 10 นาทีเพื่อนำแอปไปใช้งาน


7
+1 สำหรับสิ่งนี้ ไม่ใช่เพราะเราทำให้มันดูง่ายที่เป็นจริง
Gert M

ในฐานะที่เป็นนักเขียนทั่วไปที่ทำงานทั้งผู้ดูแลระบบและการเขียนโปรแกรมฉันเข้าใจสภาพของคุณอย่างเต็มที่ +1
Avery Payne

4
แน่นอนว่ามันเป็นไปในทางอื่นฉันพบผู้ดูแลระบบสองสามคนที่ไม่เข้าใจความแตกต่างระหว่างการจัดเรียงของสคริปต์และโปรแกรมอรรถประโยชน์ขนาดเล็กที่เราทุกคนสามารถทำได้และการเขียนโปรแกรม "ของจริง"
Rob Moir

2
+1 Robert: หรือดูแลระบบที่พูดว่า "มันเป็นคำสั่งง่ายๆ" เพื่อหลีกเลี่ยงสถาปัตยกรรมเครือข่ายที่ออกแบบมาไม่ดี ความเคารพและความเข้าใจซึ่งกันและกันเป็นกุญแจสำคัญ
Steven Evers

27
  • ตระหนักดีว่าดีกว่าหรือแย่กว่านั้นคือเซิร์ฟเวอร์และ / หรืออุปกรณ์เครือข่ายจำนวนมากที่พวกเขามักจะเป็นเหมือนเด็กจากครอบครัวที่สอง นี่คือลูกของพวกเขา พวกเขาโน้มน้าวพวกเขาช่วยเหลือพวกเขาเมื่อพวกเขาป่วยและเฝ้าระวังพวกเขาอย่างระมัดระวังสำหรับปัญหา นี้ไม่ควรเป็นแบบนี้ แต่หลังจากหลายปีที่ผ่านมาก็มักจะ จำไว้ว่าเมื่อคุณสื่อสารกับพวกเขาถึงความกังวลของคุณเกี่ยวกับอุปกรณ์ที่ทำงานไม่ถูกต้องหรือคาดหวัง และถ้าคุณได้รับคำตอบที่คุณไม่เข้าใจให้ลองกรองผ่านมุมมองโลกนี้
  • ใช้เงื่อนไขการทำงานที่ดี ฟังดูตลก แต่ก็คุ้มค่ากับน้ำหนักที่เป็นทอง สักวันคุณจะต้องได้รับความช่วยเหลือพิเศษ และบางวันผู้ดูแลระบบจะมีความสุขที่จะออกไปเพื่อทำให้ชีวิตง่ายขึ้นสำหรับคุณเพียงแค่ครั้งเดียว
  • ความสัมพันธ์ที่ทำงานนั้นไปได้ทั้งสองทาง หากดูแลระบบไม่ว่างมากและคุณสามารถทำให้ชีวิตง่ายขึ้นเล็กน้อยโดยการเขียนสคริปต์หรือโปรแกรมเล็ก ๆ แล้วทำมัน! พวกเขาจะซาบซึ้งมากกว่าที่คุณรู้
  • มีความชัดเจนมาก "สิ่งนี้แย่มาก" ไม่ชัดเจนเท่ากับ "การมีการเชื่อมต่อเครือข่ายเป็นระยะ ๆ นั้นน่ารำคาญนิดหน่อยโอกาสที่คุณจะได้ดูมัน?"
  • หากคุณคิดว่าแอปของคุณจะขนาดขอให้ผู้ดูแลระบบก่อนสมมติว่ามันจะ พวกเขาอาจ "เห็น" สิ่งที่คุณทำไม่ได้หรือรู้อะไรบางอย่างเกี่ยวกับขีด จำกัด ประสิทธิภาพของอุปกรณ์ที่คุณจะนำไปใช้งาน
  • หากแอปของคุณต้องการการปรับแต่ง แต่ดูเหมือนว่าจะไม่เป็นปัญหาเกี่ยวกับรหัสให้ถามเกี่ยวกับประสิทธิภาพของเซิร์ฟเวอร์ Sysadmins มักใช้เครื่องจักรด้วยความรักและไม่พอใจเมื่อพวกเขา "ป่วย" หรือ "ประพฤติตัวไม่เหมาะสม" ถามอย่างจะเปิดเครื่องไม่สบายรอบ ๆ (หรือรับซ่อม / เปลี่ยน)
  • (ดังที่กล่าวไว้ในที่อื่น) บันทึกการตั้งค่าที่คุณใช้และสาเหตุที่ใช้ เพียงแค่มี "ตั้งช่องทำเครื่องหมาย X" หรือ "uncomment config file line Y" ก็ไม่ได้ช่วยอะไร คุณสามารถตั้งค่าตัวเลือกที่จะลบข้อมูลทั้งหมดของคุณในการรีบูตครั้งถัดไปสำหรับสิ่งที่คุณรู้
  • หากคุณไม่มีเวลาบันทึกการตั้งค่าบนกระดาษให้ลองจัดทำเอกสารในระบบหากเป็นไปได้ ด้วย config ไฟล์นี้เกือบควรจะปฏิบัติตามมาตรฐาน - การเปลี่ยนแปลงทุกการตั้งค่าควรจะ datestamped กับชื่อย่อของผลกระทบที่คาดหวังของการตั้งค่าที่และเหตุผลที่ว่าทำไมมันถูกเปลี่ยน (เห็นจุดกระสุนก่อน) นิสัยเล็กน้อยนี้ช่วยเบคอนของฉันมากกว่าหนึ่งครั้งในช่วงที่กระทืบ "ทำไมเราถึงทำอย่างนั้น?" "เนื่องจากเราได้รับคำสั่งนโยบาย X และการตั้งค่า Y ทำให้เรามีพฤติกรรมที่เราต้องการสำหรับนโยบาย X"
  • เบียร์. หรือโคล่า หรือแม้แต่น้ำ เครื่องดื่มต้อนรับเสมอ การดูแลระบบเป็นการทำงานที่กระหายน้ำ

3
สำหรับเอกสารการกำหนดค่า / ปัญหาการเปลี่ยนแปลงฉันแนะนำให้วางไฟล์การกำหนดค่าทั้งหมดในระบบควบคุมเวอร์ชัน สิ่งนี้น่าจะง่ายสำหรับโปรแกรมเมอร์ที่จะทำเนื่องจากพวกเขาหวังว่าจะใช้ระบบดังกล่าวสำหรับซอร์สโค้ดของพวกเขาแล้ว หากพวกเขาเพิ่มความคิดเห็นเมื่อใดก็ตามที่พวกเขาทำการเปลี่ยนแปลงมันจะง่ายต่อการย้อนกลับไปในประวัติศาสตร์และดูว่ามีการเปลี่ยนแปลงเมื่อใดและทำไม
Anders Sandvig

+1 สำหรับสิ่งนั้นเนื่องจากมัน "ปิดลูป" ในการจัดการการเปลี่ยนแปลง ข้อเสนอแนะที่ดี
Avery Payne

2
ข้อเสนอแนะที่ยอดเยี่ยมสำหรับการให้รายงานข้อผิดพลาดที่ชัดเจน ไม่มีอะไรหงุดหงิดฉันมากกว่าหลังจากที่ได้รับการบอกว่ามีปัญหาและรู้ว่ามันอาจจะส่งผลกระทบต่อคนจำนวนมากที่ฉันมีการหยอกล้อรายละเอียดจากโปรแกรมเมอร์นำพา
เดฟเชนีย์

23

ความปลอดภัยไม่ได้เป็นในภายหลัง ในขณะที่แอพที่ถูกแฮ็กสามารถทำให้โปรแกรมเมอร์ดูไร้ความสามารถ แต่อย่างน้อยก็ต้องใช้เวลาในการตรวจสอบทำความสะอาดและ / หรือคืนค่าจากการสำรองข้อมูลสำหรับการดูแลระบบ

สำหรับเรื่องนั้นไม่ถือเป็นการสำรองข้อมูลเป็นตัวควบคุมเวอร์ชัน สำหรับการกู้คืนจากความเสียหายและไม่ได้ออกแบบมาเพื่อกู้คืนรหัสของคุณเพราะคุณลืมสิ่งที่คุณเปลี่ยน

และหยุดโทษ Windows Update อย่างไม่ระมัดระวังเนื่องจากรหัสของคุณเสีย ฉันไม่สนใจว่ามันใช้งานได้สบายบอกฉันทีว่าทำไมมันไม่ทำงานตอนนี้ - จากนั้นเราจะเห็นว่ามันเป็นความผิดของใคร


17

วิธีแก้ปัญหาเครือข่ายและดูโปรแกรมของคุณทำงานด้วยเครื่องมือดูแลระบบ ในฐานะโปรแกรมเมอร์ที่เริ่มต้นในการบริหารระบบฉันประหลาดใจที่โปรแกรมเมอร์หลายคนไร้สมรรถภาพกลายเป็นเครือข่ายเพียงครั้งเดียว "หยุด"

  • Wiresharkเพื่อดูรหัสของคุณทำงานในรูปแบบกล่องดำแพ็คเก็ตโดยแพ็คเก็ต
  • เครื่องมือในการเชื่อมต่อโดยตรงกับบริการเครือข่าย:
    • Telnet, netcat หรือ socatสำหรับการเชื่อมต่อธรรมดาผ่าน TCP หรือ UDP
    • OpenSSLสำหรับสิ่งเดียวกันกับการเข้ารหัส (คำใบ้: ลองopenssl s_client -connect target-host:portบางครั้ง) สำหรับการเชื่อมต่อกับบริการเครือข่ายด้วยตนเอง
  • ขุด (ในแพ็คเกจ BIND 9)สำหรับการแก้ปัญหาการแก้ไขชื่อ
  • ความสามารถในการบอกได้ว่าส่วนใดของเครือข่ายสแต็กล้มเหลวตามเวลาและคุณสมบัติอื่น ๆ ของการเชื่อมต่อที่ล้มเหลว
  • อาจเป็นไปได้HTTPFox และ / หรือ Firebug

3
+1 นักพัฒนาที่เขียนแอปพลิเคชันขึ้นอยู่กับประสิทธิภาพเครือข่ายที่มั่นคงควรอ่าน 'TCP / IP Illustrated v1' โดย W. Richard Stevens ผู้ยิ่งใหญ่ก่อนที่จะเริ่มเขียนโค้ด
Murali Suriar

1
ขอบคุณสำหรับพวก upvotes ทั้งหมด มันทำให้ฉันลำบากใจหลายปีที่จะเห็นโปรแกรมเมอร์ที่หยุดทำอะไรไม่ถูกเมื่อเครือข่ายพื้นฐานล้มเหลว และทุกวันนี้การเขียนโปรแกรมเกือบทั้งหมดเป็นการเขียนโปรแกรมเครือข่าย
jhs

14

รู้วิธีแก้ไขปัญหา

มันง่ายมากที่จะผ่านการจ่ายเงิน (เช่นเครือข่ายของคุณกำลังปกปิดการสื่อสารของฉันกับฐานข้อมูล) อาจเป็นความผิดพลาดของเครือข่าย แต่คุณควรมีบันทึกแอปพลิเคชันที่มีข้อผิดพลาดที่ใช้ Google หรือดังนั้นอาจเปิดเผยปัญหาในการกำหนดค่าของแอป

ทุกคนชอบที่จะตำหนิฮาร์ดแวร์ระบบปฏิบัติการหรือเครือข่ายดังนั้นหากคุณฝึกฝนความขยันเนื่องจากคุณจะทำให้ผู้ดูแลระบบมีความสุข เพราะหากไม่มีอะไรอื่นคุณอาจชี้ไปในทิศทางที่เฉพาะเจาะจงกับสิ่งที่อาจผิด (ตรงข้ามกับการพูดว่า "เครือข่ายของคุณแย่ลง" หรือบางสิ่งที่มีประโยชน์เท่าเทียมกัน)


1
อย่างแน่นอน ฉันไม่สามารถเริ่มต้นที่จะนับชั่วโมงฉันได้ใช้เวลาค้นหาปัญหาในสถานที่ที่ไม่ถูกต้องเนื่องจากคนชี้ให้ฉันในที่ผิดทิศทาง
เกิร์ต M

8

บันทึกเอกสารทุกอย่างที่คุณทำได้ ไม่สามารถบอกคุณได้ว่ากี่ครั้งที่ระบบดูแลระบบล่าสุดคิดว่ามันน่ารักที่จะไม่จัดทำเอกสารเกี่ยวกับ 'ความปลอดภัยในการทำงาน' หรือมีคนที่ต้องการเข้าออก เช่นเดียวกับโปรแกรมเมอร์ควรแสดงความคิดเห็นดี sysadmins ควรจัดทำเอกสาร แผนภาพของทอพอโลยีก็ดีเช่นกัน


7

แผนข

มีแผนการกู้คืนความเสียหายในใจเสมอเมื่อออกแบบและพัฒนาโซลูชัน ตระหนักถึงความล้มเหลวเพียงจุดเดียวที่สามารถนำไปสู่การหยุดทำงาน


6

เอกสาร: ไม่จำเป็นต้องไปที่ถั่ว แต่วิธีการทำงานของแอพพลิเคชั่นไดอะแกรมแสดงให้เห็นว่าบิตเหมาะสมและวิธีการทดสอบแต่ละองค์ประกอบเมื่อมันผิดพลาดทั้งหมด ข้อมูลตัวอย่างและผลลัพธ์เป็นสิ่งที่ดี

ข้อกำหนด: โมดูลใดที่ต้องพึ่งพา รุ่น? OS?

การตรวจสอบ: นักพัฒนาที่ดีเลิศจะรวมถึงข้อมูลการตรวจสอบและทดสอบด้วยแอปพลิเคชัน

การพูดของบรรจุภัณฑ์บรรจุภัณฑ์! ไม่มีอะไรจะแย่ไปกว่า "การปรับใช้" ซึ่งหมายถึงการตรวจสอบการแก้ไขใหม่ของไฟล์จาก VCS และคัดลอกไปยังเซิร์ฟเวอร์จำนวนมาก บ่อยครั้งที่โปรแกรมเมอร์ไม่ได้ชื่นชมความซับซ้อนของการปรับใช้ซอฟต์แวร์: มีเหตุผลว่าทำไมซอฟต์แวร์รุ่นที่ทำแพคเกจแล้วเป็นกระดูกสันหลังของระบบปฏิบัติการส่วนใหญ่

หากนักพัฒนามาหาฉันพร้อม RPM ซึ่งติดตั้งครั้งแรกด้วยเอกสารที่กระชับรัดกุมและการทดสอบ Nagios บางอย่างพวกเขาต้องการเป็นเพื่อนที่ดีที่สุดคนใหม่ของฉัน


6

ฉันประหลาดใจที่ไม่ใช่คำตอบ 17 ข้อที่ให้ไว้ ณ ที่นี้รวมถึงสิ่งใด ๆ เกี่ยวกับการรับรองว่าแอปพลิเคชันของคุณจะทำงานเมื่อเข้าสู่ระบบในฐานะผู้ใช้มาตรฐาน

นอกเหนือจากกระบวนการติดตั้งแอปพลิเคชันควรทำงานได้ดีเมื่อเข้าสู่ระบบด้วยบัญชีผู้ใช้มาตรฐาน



4

สิ่งนี้อาจใช้กับโปรแกรมเมอร์เริ่มต้นเท่านั้น แต่ฉันจัดการกับบางสิ่งในทุกโครงการที่มีโปรแกรมเมอร์บางคน

  1. "มันใช้งานได้กับเครื่องของฉัน" ไม่ใช่คำสั่งที่ถูกต้อง เป็นความรับผิดชอบของโปรแกรมเมอร์ในการสร้างโปรแกรมติดตั้งสำหรับใช้บนเซิร์ฟเวอร์หรืออย่างน้อยก็เอกสารทุกการเชื่อมต่อและ dll และ Add-in ที่จะต้องมีบนเซิร์ฟเวอร์

  2. (ฉันเคยได้ยินมาหลายครั้งแล้วดังนั้นโปรดอย่าหัวเราะ) ฉันเรียกใช้ exe บนเซิร์ฟเวอร์จากเครื่องของฉันและใช้งานได้ แต่เมื่อฉันเรียกใช้บนเซิร์ฟเวอร์ (Citrix, Terminal Server ฯลฯ ) มันไม่ทำงาน โปรดเข้าใจ dll's และ ocx's และสิ่งอื่นใดที่โปรแกรมของคุณต้องการและที่ไหนและอย่างไรที่พวกเขาลงทะเบียนและวิธีการใช้โปรแกรมของคุณ

สิ่งเหล่านี้อาจดูเรียบง่าย แต่ฉันจัดการกับมันตลอดเวลา

ไบรอัน


4
  • พูดคุยกับผู้ดูแลระบบของคุณอย่างเป็นทางการและไม่เป็นทางการเกี่ยวกับสิ่งที่คุณกำลังทำ พวกเขามักจะสนใจและสามารถแสดงผลกระทบที่เป็นไปได้เมื่อมีการผลิตก่อน คุณไม่จำเป็นต้องเห็นด้วย แต่มันช่วยระบุปัญหา
  • ไม่คุณไม่สามารถมีเซิร์ฟเวอร์ทั้งหมดให้กับตัวคุณเอง ... ถ้าคุณต้องการมันเป็นการตัดสินใจทางการเมือง หากคุณต้องการทำงานทางการเมืองไปข้างหน้า
  • ฮาร์ดแวร์การผลิตมักจะมีลักษณะที่แตกต่างกันซึ่งเซิร์ฟเวอร์การพัฒนาของคุณและแม้แต่ในฟาร์มข้อมูลจำเพาะบนเครื่องนั้นแตกต่างกัน
  • เรียนรู้วิธีการตั้งค่าการผลิตเนื่องจากคุณอาจไม่สามารถทำซ้ำบนเดสก์ท็อปของคุณการทำเช่นนี้ทำให้คุณไม่สามารถตั้งสมมติฐานได้
  • เพียงเพราะคุณสามารถแคชสิ่งต่าง ๆ ในหน่วยความจำไม่ได้หมายความว่าคุณควรรอคอขวดก่อน (ในการทดสอบหน่วยหรือการทดสอบประสิทธิภาพก่อนการผลิต)
  • หากคุณกำลังผสานข้อมูลในฐานข้อมูลให้คิดถึงว่าคุณจะแยกข้อมูลออกเป็นข้อมูลแบบอ่านอย่างเดียวได้อย่างไร (ซึ่งสามารถปรับขนาดในแนวนอน) และอ่านข้อมูลเขียนได้
  • ถ้าคุณกำลังผสานข้อมูลในฐานข้อมูลต้องเป็น RDBMS จริง ๆ หรือไม่ มีระบบจับคู่คีย์ - ค่าอื่น ๆ
  • อย่าคิดว่า AJAX เป็นโซลูชั่นแบบ end-all มันดูเท่ห์ แต่มัน จำกัด การตรวจสอบและความเป็นไปได้ของระบบอัตโนมัติ ฉันไม่ได้บอกว่าอย่าใช้มันแค่คิดสองครั้ง

4

ตกลงนี่คุยโวเล็กน้อย แต่:

a) เมื่อการเข้ารหัสให้สมมติว่าโครงสร้างพื้นฐานนั้นอาจล้มเหลวและไม่ได้มาจากดินแดนที่มีความสุขตลอดเวลา หรือ Google

b) เราอาจไม่มีทรัพยากรที่จะนำไปใช้ประโยชน์อะไรเช่นโครงสร้างพื้นฐานที่คุณได้อ่านเอาไว้ดังนั้นเมื่อเรามีปัญหา เป็นไปได้ว่าเรารู้ว่าต้องทำอะไร แต่ไม่ว่าจะด้วยเหตุผลใดก็ตาม เราเป็นหุ้นส่วนของคุณ!

c) เช่นเดียวกับ jhs ที่กล่าวไว้ข้างต้นมันจะช่วยได้จริงๆถ้าคุณมีความคุ้นเคยในการใช้เครื่องมือในการแก้ไขปัญหาโครงสร้างพื้นฐานเช่น ping, traceroute (หรือรวมทั้ง - mtr), ขุดและอื่น ๆ คะแนนโบนัสจำนวนมากสำหรับการรู้เกี่ยวกับ Wireshark

d) ถ้าคุณตั้งโปรแกรมคอมพิวเตอร์คุณควรรู้ว่ามันเชื่อมต่อกับเครือข่ายอย่างไรและพื้นฐานเช่นการแยกวิเคราะห์เอาต์พุตของ ipconfig / all หรือ ifconfig คุณควรจะสามารถเชื่อมต่ออินเทอร์เน็ตของคุณและทำงานด้วยความช่วยเหลือน้อยที่สุด

ไม่อย่างนั้นฉันคิดว่าเอเวอรี่ค่อนข้างตอกย้ำมัน ผู้ที่ดูแลดูแลระบบเล็กน้อยมีค่าน้ำหนักในทองคำ! แต่อย่างเท่าเทียมกันผู้ดูแลระบบที่เข้าใจว่า devs ไปเกี่ยวกับสิ่งต่าง ๆ (รวมถึงเวอร์ชัน ฯลฯ ) มีความสำคัญมากในวันนี้และอายุ

ตอนนี้ดูเหมือนว่าจะอยู่ในอากาศแล้วฉันได้สังเกตการสนทนาเพิ่มเติมเกี่ยวกับความสัมพันธ์ dev / ops ในบล็อก - ลองดู

การรักษา Twitter Twitter

ฉากกั้นและสงคราม

ทดสอบครั้งแรกในการดำเนินงาน


3

ว่าไม่มีใครในกลุ่มหรือฟังก์ชั่น 'ดีกว่า' อีกกลุ่มหนึ่งและไม่มีใครต้องการ 'สมองที่ใหญ่กว่า' ซึ่งกันและกัน ฉันเห็นว่าทั้งสองฝ่ายได้รับพรีมาโดน่าทั้งหมดใน บริษัท อื่น - คุณทุกคนพยายามบรรลุเป้าหมายเดียวกัน - มุ่งเน้นความคล้ายคลึงกันเหล่านี้ไม่ใช่ความจริงที่ว่าคุณใช้เครื่องมือที่แตกต่างกัน


2

สถาปนิกโครงสร้างพื้นฐานหันมาเขียนโปรแกรมอาจต้องการย้อนกลับการทำธุรกรรมนั้นในอนาคตแม้ว่า :)

  1. คุยกันเร็วและบ่อยครั้ง ตรวจสอบการออกแบบกับคนที่จะจัดการโครงสร้างพื้นฐานแอปของคุณจะถูกนำไปใช้งาน (ถ้าคุณรู้ว่าจะเป็นใคร)
  2. การสูญเสียข้อมูลเป็นศูนย์เป็นไปได้ แต่เป็นความรับผิดชอบร่วมกันของนักพัฒนาและผู้ดูแลระบบ การคุยกันอาจช่วยได้ที่นี่อีกครั้ง
  3. เจ้าหน้าที่โครงสร้างพื้นฐานของคุณควรมีส่วนร่วมในการกำหนดความต้องการที่ไม่ใช่หน้าที่
  4. จัดเบียร์ (เมื่องานเสร็จสิ้น) และพิซซ่า (ขณะที่เรากำลังทำงาน) อย่างไรก็ตามการปรากฏตัวของอาหารประเภทนั้นส่งผลกระทบต่อความสามารถของเราในการทำให้กล่องซีพียูเล็ก ๆ 32 กล่องของเราทำสิ่งที่คุณต้องการให้พวกเขาทำ :)

2

ในฐานะที่เป็นคนที่เป็นผู้ดูแลระบบสำหรับนักพัฒนาซอฟต์แวร์และผู้พัฒนาเองคำแนะนำที่ได้รับไม่ใช่เพียงแค่ทองคำเท่านั้น แต่ควรเป็นส่วนหนึ่งของเอกสารการจ้างงานสำหรับนักพัฒนาใหม่สำหรับ บริษัท ต่างๆ

สิ่งที่ฉันยังไม่เห็น (อธิบาย) ก็คือนักพัฒนาซอฟต์แวร์ควรรู้ผลิตภัณฑ์ที่พวกเขาจะใช้เพื่อสร้างโปรแกรมที่พวกเขาได้รับเงิน จำนวนครั้งที่ฉันต้องอธิบายและกำหนดค่าเซิร์ฟเวอร์ apache การติดตั้ง eclipse และ Visual Studio และฐานข้อมูลบนเครื่องนักพัฒนานั้นค่อนข้างน่าเป็นห่วง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.