ทำไมบางครั้งเว็บไซต์ (ถึงแม้จะเป็นเว็บไซต์นี้) "ไม่สามารถทำการบำรุงรักษาได้"


36

ฉันไม่เคยทำแบบนี้เป็นการส่วนตัว ฉันไม่เข้าใจว่าเพราะเหตุใดเว็บไซต์จำนวนมากถึงทำหากคุณทำการพัฒนาบนเซิร์ฟเวอร์การพัฒนาเหตุใดคุณจึงต้องปิดเว็บไซต์ที่ใช้งานจริงของคุณ?

ฉันสงสัยเกี่ยวกับเรื่องนี้เสมอ

พวกเขากำลังทำอะไรในช่วงเวลานี้สิ่งที่ต้องทำคืออะไร


56
พวกเขากำลังเปลี่ยนหลอดสุญญากาศในเซิร์ฟเวอร์
mipadi

11
ฉันคิดว่าพวกเขากำลังตอกบัตรตอก
Christopher Mahan

5
โปรดทราบว่าไซต์อาจไม่ได้รับการอัปเดตส่วนใหญ่ เห็นได้ชัดว่าคุณจะเห็นคนที่จะต้องมาออฟไลน์ในขณะที่จริง
Dean Harding

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

1
มันเกิดขึ้นกับฉันที่จะถามว่า 'ฉันสามารถใช้กลยุทธ์ใดในการหยุดทำงานเป็นศูนย์ (ตามแผน) ในแอปพลิเคชันเว็บที่มีฐานข้อมูลสำรอง' การอัปเกรดเฉพาะที่ต้องการการเปลี่ยนแปลง db schema: softwareengineering.stackexchange.com/questions/336945/…
สตีเฟ่น

คำตอบ:


59

Big kicker สำหรับทุกสิ่งที่มีขนาดใหญ่ก็คือหากมีใครเปลี่ยนสกีมาฐานข้อมูลในทางใดทางหนึ่งมักจะมีสคริปต์บำรุงรักษาที่ใหญ่และน่ารังเกียจ

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

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


3
+1 - การล้นสแต็คแบบอ่านอย่างเดียวจะไม่ดีนัก จะไม่มีอะไรมากมายที่คุณจะไม่สามารถหาเจอได้บน google :)
corsiKa

10
@glowcoder: เมื่อคุณค้นหาบน Google คุณจะพบคำตอบ SO
Donal Fellows

@ donal นั่นคือจุดของฉัน
corsiKa

1
Google มีขนาดใหญ่และแน่นอนว่ามีฐานข้อมูลขนาดใหญ่ ทำไมฉันไม่เคยเห็น "ลงเพื่อบำรุง" สำหรับ google? (หน้าแรกของ Google.com)
alexyorke

7
@ alexy13 - google อยู่ในหมวดหมู่พิเศษซึ่งไม่สามารถมีฐานข้อมูลเดียวหรือแม้กระทั่งดาต้าเซ็นเตอร์ส่วนของระบบจะล่มเสมอและพวกเขาได้เขียนส่วนหน้าเพื่อจัดการ ฉันก็จะทำเช่นกันถ้าคุณยื่นเวลาและงบประมาณการวิจัยและพัฒนาให้ฉัน
ไวแอตต์บาร์เน็ตต์

7

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

  • การเปลี่ยนแปลงฐานข้อมูล
  • การเปลี่ยนแปลง DAL
  • กำลังอัปเดตบริการ

โดยทั่วไปหากไซต์ของคุณไม่คงที่เมื่อทำการอัปเดตแบบลอจิกคุณต้องการลบมันมิฉะนั้นผู้ที่กดปุ่มไซต์ของคุณอาจได้รับข้อผิดพลาดหรือพฤติกรรมที่ไม่คาดคิด

นอกจากนี้หากคุณจะแตะ web.config (ใน ASP.NET) สำหรับเว็บไซต์ของคุณคุณควรจะทำการบำรุงรักษาเสียก่อนเพราะจะทำให้เซสชันของผู้ใช้หมดไป ดังนั้นหากพวกเขาอยู่ตรงกลางของบางสิ่งมันจะหายไป


2
เซสชันจะหายไปหากใช้สถานะเซสชัน "ระหว่างดำเนินการ" หากคุณใช้สถานะเซสชันที่ไม่อยู่ในกระบวนการเซสชันจะไม่หายไปหากมีการเปลี่ยนแปลง web.config
แอนโธนี

2
จุดสุดท้ายนั้นเป็นจริงเฉพาะในกรณีที่คุณกำลังทำเซสชันซึ่งฉันหวังว่าคุณจะไม่ได้อยู่ในไซต์การผลิต! มีมากกว่าเพียงแค่การสัมผัสกับเว็บกำหนดค่าที่จะช่วยลดขั้นตอนการทำงานของผู้ปฏิบัติงาน
Dean Harding

7

นี่เป็นคำถามที่เป็นนามธรรม - ฉันเคยเห็นไซต์ที่ใช้ "Down for Maintenance" แทน HTTP 500

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

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


2
HTTP 503 (แทนที่จะเป็น 500) ไม่ใช่รหัสสถานะที่ถูกต้องสำหรับ "ลงเพื่อการบำรุงรักษา" หรือไม่?
Nubok

4

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

บริษัท หนึ่งที่ฉันทำงานให้มีไซต์อีคอมเมิร์ซกลับมาในช่วงปลายยุค 90 ซึ่งสร้างยอดขายมากกว่า $ 1,000,000 ต่อเดือน มีคนเลื่อนตารางภาษีผิดไปยังเซิร์ฟเวอร์ฐานข้อมูลการผลิต การรักษาคือการคืนค่าเซิร์ฟเวอร์ db จากการสำรองข้อมูลและใช้การทำธุรกรรมตั้งแต่การสำรองข้อมูลครั้งล่าสุด การดำเนินการนี้ใช้เวลาหลายชั่วโมงในระหว่างที่เว็บไซต์ไม่สามารถรับคำสั่งซื้อได้ เนื่องจากส่วนคำสั่งซื้อและโบรชัวร์การขายแบบคงที่ทำงานบนเว็บไซต์เดียวกันและแยกออกไม่ได้ทั้งคู่จึงต้องลงมา

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


แม้สิ่งนี้สามารถบรรเทาลงได้ด้วยการทำโหลดบาลานซ์ที่เหมาะสม
Voycey

4

ในขณะที่คำตอบอื่น ๆ นั้นถูกต้องคุณสามารถหลีกเลี่ยงการหยุดทำงานโดยใช้สถาปัตยกรรมที่เหมาะสม แต่นี่มีค่าใช้จ่ายและค่าใช้จ่ายนี้อาจไม่คุ้มค่า: หนึ่งชั่วโมงของค่าใช้จ่ายในการหยุดทำงานของ Amazon หรือโครงสร้างพื้นฐานที่อยู่เบื้องหลัง NASDAQ เป็นจำนวนมาก Stackoverflow ส่วนใหญ่มีแนวโน้มไม่มาก

วิธีหลีกเลี่ยงการหยุดทำงาน:

  • การปิดหน้าการแสดงฮาร์ดแวร์: หากคุณมีพรอกซีอยู่หน้าเว็บไซต์ของคุณคุณสามารถทำให้ออฟไลน์แทนโดยไม่ส่งผลกระทบใด ๆ ต่อผู้ใช้
  • กำหนดค่าเซิร์ฟเวอร์ใหม่: เหมือนข้างบน
  • อัปเดต / เปลี่ยนแปลงข้อมูลในฐานข้อมูล: คุณสามารถทำให้เว็บไซต์ของคุณอยู่ในโหมดอ่านอย่างเดียว ฯลฯ ...

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


4
NASDAQ ไม่มีเวลาหยุดทำงานตามกำหนดประมาณ 14 ชั่วโมงต่อวันใช่หรือไม่
Peter Taylor

3

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


มีวิธีการรักษาที่ดี: นำระบบการร้องเรียนมาใช้ในช่วงเวลาหยุดทำงาน :) ฉันเห็นว่า บริษัท ต่างๆ บริษัท MMO นำเว็บไซต์ที่ประกาศการหยุดทำงานและฟอรัมสนับสนุนพร้อมกับเกมที่กำลังหยุดทำงานเพื่อบำรุงรักษาเป็นตัวอย่างที่ดี ใครก็ตามที่ไม่ได้รับการประกาศในช่วงสองสามชั่วโมงก่อนที่จะมีการซ่อมบำรุง
jwenting

3

นอกจากนี้ยังมีด้านจิตวิทยาและการตลาดสำหรับสิ่งนี้ ในบางกรณี (ฉันกล้าพูดเรื่องส่วนใหญ่ แต่ฉันไม่ใช่ตัวหนา * g *) ที่อ่าน "Down for maintenance" อาจหมายถึง "เซิร์ฟเวอร์ขัดข้องหรือเลิกให้บริการด้วยเหตุผลอื่นใด"

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

ดังนั้น "ลงเพื่อการบำรุงรักษา" มักจะเป็นเพียงคำอื่นสำหรับ "เลิกใช้งาน"


2

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

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

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

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

เศรษฐศาสตร์.

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


0

ฉันไม่เข้าใจว่าเพราะเหตุใดเว็บไซต์จำนวนมากถึงทำหากคุณทำการพัฒนาบนเซิร์ฟเวอร์การพัฒนาเหตุใดคุณจึงต้องปิดเว็บไซต์ที่ใช้งานจริงของคุณ?

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

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

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

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


1
การตรวจสอบทางคณิตศาสตร์ไม่ใช่ยาครอบจักรวาลเช่นกัน บางครั้งคุณพบว่าสิ่งที่คุณตรวจสอบไม่ใช่สิ่งที่คุณต้องการยืนยัน
Donal Fellows

จริง แต่แล้วฉันก็ยืนยันว่าปัญหาไม่ได้เกิดจากการตรวจสอบคุณสมบัติอย่างเป็นทางการ แต่เป็นการตรวจสอบความถูกต้องของข้อกำหนดเหล่านั้น หากรายละเอียดของคุณไม่ถูกต้องชัดเจนว่าทุกอย่างจะแยกจากกัน แต่การตรวจสอบรายละเอียด ( "เรากำลังสร้างสิ่งที่ถูกต้องโดยผู้ใช้ที่ต้องการสำหรับวัตถุประสงค์ที่ต้องการ" ) นั่นไม่ใช่จุดเน้นของการยืนยัน (* "ที่ระบุ ข้อมูลจำเพาะเหล่านี้เราสร้างสิ่งนี้ถูกต้องหรือสามารถสร้างได้หรือไม่ ") ไม่เป็นทางการหรืออย่างอื่น ฉันเดาว่าฉันควรจะใส่ข้อแม้นั้น (wrt เพื่อความถูกต้องของรายละเอียด)
luis.espinal

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

โอ้ ฉันคิดว่าแล้วเราก็ชอบคิด ข้อกำหนดที่เปลี่ยนแปลง (และการตรวจสอบความถูกต้อง) เป็นวิธีการที่เป็นทางการของ Achilles เนื่องจากเป็นงานที่สร้างสรรค์ (เนื่องจากธรรมชาติของมนุษย์) ฉันไม่เชื่อว่ามันจะแก้ปัญหาได้ไม่ใช่ในรูปแบบที่นักอนุรักษ์นิยม / นักปราชญ์ต้องการให้เป็น ฉันคิดว่านั่นเป็นหนึ่งในสัญญาที่ล้มเหลวของ FM; พวกเขามียอดขายเกิน (ฉันหมายถึงตัวอย่างเช่นวิธีการอย่างเป็นทางการสำหรับการพัฒนาเว็บหรือไม่) ข้อกำหนดต้องได้รับการพิจารณาอย่างละเอียดและไม่คล้อยตามการเปลี่ยนแปลงที่รวดเร็ว (และนั่นเป็นเรื่องปกติของระบบที่สำคัญ ต่อมาเป็นบรรทัดฐานมากกว่าข้อยกเว้น
luis.espinal

99% ของอินเทอร์เฟซผู้ใช้ไม่ได้เกี่ยวข้องกับวิธีการที่เป็นทางการ แต่ใช้จิตวิทยามากกว่า หลักฐานที่เหลือนั้นชัดเจน (“ อย่าปิดกั้น UI”) แม้ว่าจะไม่ชัดเจนในการพิสูจน์ แต่ถ้าคุณแยก webapp ออกมาตามแนวทางปฏิบัติที่ดีที่สุดวิธีการที่เป็นทางการจะทำให้เกิดความรู้สึกเป็นอย่างมากในเลเยอร์วิธีการทางธุรกิจ (เช่นเดียวกับในเลเยอร์การจัดเก็บข้อมูล DB” ใช้ต่อไป :-))
Donal Fellows

-2

เมื่อเว็บไซต์ของเราถูกแฮ็ก (เซิร์ฟเวอร์ IIS6 และ Windows 2003 เก่าเมื่อไม่กี่ปีที่ผ่านมา) ในขณะที่เรากำลังทำการฟื้นฟูเราใส่หน้า "อยู่ระหว่างการบำรุงรักษา" สองสามชั่วโมง ....

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