เรามีแอพพลิเคชั่นและบริการบนเว็บมากมาย (ผลิตภัณฑ์สาธารณะบางผลิตภัณฑ์, ภายในและส่วนหนึ่งของ "แบ็กเอนด์" ส่วนตัว) ที่พึ่งพาซึ่งกันและกัน แต่ละองค์ประกอบเหล่านี้มี 4 สภาพแวดล้อม (กลุ่มของเซิร์ฟเวอร์ / โหนดที่ให้บริการตามวัตถุประสงค์เฉพาะ):
- ที่ไม่ใช่การผลิต
DEV
- สภาพแวดล้อมการพัฒนาแบบบูรณาการที่ CI สร้างการเปลี่ยนแปลงแบบพุช มีประโยชน์สำหรับวิศวกรในการแก้ปัญหาข้อบกพร่องที่หายากที่ไม่สามารถทำซ้ำได้QA
- แยก QA / สภาพแวดล้อมการทดสอบDEMO
- สภาพแวดล้อมของ UAT ที่เสถียรสำหรับผู้มีส่วนได้เสีย
- การผลิต
LIVE
- สภาพแวดล้อมสด / การผลิตของเรา
รหัสโปรโมชั่ไป: LOCAL
(เครื่องของนักพัฒนา) => DEV
=> QA
=> =>DEMO
LIVE
บอกว่าเรามีโปรแกรมที่เรียกว่าmyapp
ที่มีการสนับสนุนจากบริการเว็บ RESTful เรียกว่าmyws
ที่ตัวเองได้รับการสนับสนุนโดย DB mydb
ที่เรียกว่า
ขณะนี้เรามีสิ่งที่ผมจะเรียกว่า " บงการ " โปรโมชั่นในหมู่อ้างอิงเหล่านี้คือmyapp-dev
จุดที่จะต้องซึ่งการใช้งานmyws-dev
mydb-dev
ในทำนองเดียวกันmyapp-qa
ชี้ไปที่การใช้งานmyws-qa
mydb-qa
เดียวกันและDEMO
LIVE
ปัญหาของเรื่องนี้คือเมื่อใดก็ตามที่ฉันทำการเปลี่ยนแปลงพูดmyapp
สิ่งนี้ต้องให้ฉันทำการเปลี่ยนแปลงmyws
และmydb
เช่นกัน แต่เนื่องจากแต่ละDEV
สภาพแวดล้อมชี้ไปที่สภาพแวดล้อมของการอ้างอิงDEV
มันหมายความว่าฉันต้องกำหนดเวลาและวางการเปลี่ยนแปลงเหล่านี้ทั้งหมดในเวลาเดียวกัน นอกจากนี้หากการสร้างหนึ่งไม่เสถียร / แตกมันมักจะทำให้ส่วนประกอบต้นน้ำอื่น ๆ ล่ม ตัวอย่างเช่นถ้าแบ่งสิ่งที่นักพัฒนาเมื่อมีการเปลี่ยนmydb-dev
ที่myws-dev
และmyapp-dev
กลุ่มที่มักจะยังไม่แน่นอน
เพื่อแก้ปัญหานี้ฉันกำลังรวบรวมข้อเสนอสำหรับสิ่งที่ฉันเรียกว่ากลยุทธ์การส่งเสริมการขาย " เงียบ ": การพึ่งพาระหว่างองค์ประกอบทั้งหมดเป็นไปตามแนวทางนี้:
- อ้างอิงต้นน้ำขึ้นอยู่กับ
DEMO
สภาพแวดล้อมสำหรับการอ้างอิงปลายน้ำของพวกเขาสำหรับทุกสภาพแวดล้อมที่ไม่ใช่การผลิตของพวกเขา (DEV
,QA
และDEMO
); และ - อัพสตรีมพึ่งพาขึ้นอยู่กับ
LIVE
สภาพแวดล้อมสำหรับการพึ่งพาดาวน์สตรีมของพวกเขาสำหรับสภาพแวดล้อมการผลิตของพวกเขา
โดยใช้การประชุมนี้myapp-dev
จะ actuall ชี้ไปซึ่งจะใช้myws-demo
mydb-demo
ในทำนองเดียวกันmyapp-qa
ก็จะชี้ไปและmyws-demo
mydb-demo
ข้อดีที่ฉันสามารถหาได้คือสร้างความเสถียร : มีโอกาสน้อยกว่ามากที่DEMO
สภาพแวดล้อมสำหรับองค์ประกอบเฉพาะจะไม่เสถียรเนื่องจากรหัสไม่สามารถทำได้DEMO
โดยไม่ต้องทำการทดสอบอย่างเข้มงวดทั้งในDEV
และQA
นอก
เสียอย่างเดียวที่ฉันสามารถหาวิธีนี้คือว่าถ้าDEMO
ไม่หยุดพักเป็นส่วนประกอบโดยเฉพาะอย่างยิ่งทุกสภาพแวดล้อมที่ไม่ใช่การผลิตสำหรับการอ้างอิงต้นน้ำทั้งหมดจะจู่ ๆ ก็ถูกทำลาย แต่ผมจะตอบโต้ว่าเรื่องนี้ควรจะเกิดขึ้นไม่ค่อยมากเพราะของการทดสอบดำเนินการบนและDEV
QA
นี้ได้เป็นปัญหาที่นักพัฒนาหลายคน (ที่มีประสบการณ์มากอย่างชาญฉลาดและกว่าตัวเอง) มีการแก้ไขและฉันจะไม่ต้องแปลกใจถ้าปัญหานี้และการแก้ปัญหาอยู่แล้วมีชื่อให้กับพวกเขา (นอกเหนือจากสิ่งที่ฉันเรียกบงการ / siled) ดังนั้นฉันจึงถามว่า: ข้อดีของกลยุทธ์การส่งเสริมการขายแบบเงียบมีค่ามากกว่าข้อเสียใด ๆ และข้อเสียที่ฉันอาจมองเห็นที่นี่คืออะไร?