ฉันกำลังพยายามทำให้การปรับใช้ไม่ทำงานเป็นศูนย์เพื่อให้ฉันสามารถปรับใช้น้อยลงในช่วงนอกเวลาทำงานและอื่น ๆ ในช่วงเวลาที่ "ช้าลง" - หรือทุกเวลาตามทฤษฎี
การตั้งค่าปัจจุบันของฉันค่อนข้างง่าย:
- เว็บเซิร์ฟเวอร์ A (. NET App)
- เว็บเซิร์ฟเวอร์ B (แอพ. NET)
- เซิร์ฟเวอร์ฐานข้อมูล (SQL Server)
กระบวนการปรับใช้ปัจจุบันของฉัน:
- "หยุด" ไซต์บนทั้งเว็บเซิร์ฟเวอร์ A และ B
- อัพเกรดสกีมาฐานข้อมูลสำหรับเวอร์ชันของแอปที่กำลังปรับใช้
- อัปเดตเว็บเซิร์ฟเวอร์ A
- อัปเดตเว็บเซิร์ฟเวอร์ B
- นำทุกอย่างกลับมาออนไลน์
ปัญหาปัจจุบัน
สิ่งนี้นำไปสู่การหยุดทำงานเล็กน้อยในแต่ละเดือน - ประมาณ 30 นาที ฉันทำสิ่งนี้ในช่วงนอกเวลางานดังนั้นมันจึงไม่ใช่ปัญหาใหญ่ แต่เป็นสิ่งที่ฉันอยากหลีกหนี
นอกจากนี้ - ไม่มีทางที่จะ 'กลับ' จริงๆ โดยทั่วไปฉันไม่ได้สร้างสคริปต์ฐานข้อมูลย้อนกลับ - อัปเกรดสคริปต์เท่านั้น
การใช้ประโยชน์จาก Load Balancer
ฉันชอบที่จะสามารถอัปเกรดเว็บเซิร์ฟเวอร์หนึ่งครั้ง นำ Web Server A ออกจาก load balancer อัปเกรดนำกลับมาออนไลน์จากนั้นทำซ้ำสำหรับ Web Server B
ปัญหาคือฐานข้อมูล ซอฟต์แวร์ของฉันแต่ละรุ่นจะต้องดำเนินการกับฐานข้อมูลเวอร์ชันอื่น - ดังนั้นฉันจึง "ติด" อยู่
ทางออกที่เป็นไปได้
โซลูชันปัจจุบันที่ฉันกำลังพิจารณาใช้กฎต่อไปนี้
- อย่าลบตารางฐานข้อมูล
- อย่าลบคอลัมน์ฐานข้อมูล
- อย่าเปลี่ยนชื่อคอลัมน์ฐานข้อมูล
- ไม่ต้องเรียงลำดับคอลัมน์ใหม่
- ทุกขั้นตอนการจัดเก็บจะต้องเป็นเวอร์ชัน
- ความหมาย - 'spFindAllThings' จะกลายเป็น 'spFindAllThings_2' เมื่อมีการแก้ไข
- จากนั้นจะกลายเป็น 'spFindAllThings_3' เมื่อแก้ไขอีกครั้ง
- ใช้กฎเดียวกันกับมุมมอง
ในขณะนี้ดูเหมือนจะรุนแรงมาก - ฉันคิดว่ามันแก้ปัญหาได้ แอปพลิเคชันแต่ละรุ่นจะตีฐานข้อมูลด้วยวิธีที่ไม่แตกหัก รหัสคาดว่าผลลัพธ์บางอย่างจากมุมมอง / ขั้นตอนการจัดเก็บ - และสิ่งนี้ทำให้ 'สัญญา' ที่ถูกต้อง ปัญหาคือ - มันเห็นเลอะเทอะ ฉันรู้ว่าฉันสามารถล้างขั้นตอนการจัดเก็บแบบเก่าได้หลังจากที่แอพพลิเคชั่นถูกเปิดใช้งานสักครู่ นอกจากนี้ - มันขึ้นอยู่กับนักพัฒนาทั้งหมดที่ปฏิบัติตามกฎเหล่านี้ซึ่งส่วนใหญ่จะเกิดขึ้น แต่ฉันคิดว่ามีคนทำผิด
ในที่สุด - คำถามของฉัน
- นี่เลอะเทอะหรือแฮ็ค?
- มีใครทำแบบนี้อีกไหม?
- คนอื่นกำลังแก้ไขปัญหานี้อย่างไร