สิ่งที่ควรเป็นขอบเขตของการตรวจสุขภาพสำหรับระบบที่ปรับใช้ webapp?


13

วันนี้ฉันมีภารกิจ "เขียนเช็คสุขภาพ" สำหรับบริการที่ใช้เวลานานซึ่งเป็นระบบการประสานงานเพื่อปรับใช้เว็บแอพ

ฉันกำลังพยายามกำหนดขอบเขตของการตรวจสุขภาพดังกล่าวและเกิดขึ้นกับคำถามเหล่านี้ที่เกี่ยวข้องกับขอบเขตของการตรวจสุขภาพ:

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

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

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

การตรวจสอบสุขภาพสำหรับบริการเฉพาะนี้ควรประกอบด้วยอะไร?


2
อย่าเชื่อถือรายงานสถานะอัตโนมัติ ตรวจสอบสถานะด้วยตัวเองเสมอ เรื่องไม่สำคัญ: หนึ่งในสาเหตุของเหตุการณ์ที่เกิดขึ้นบนเกาะทรีไมล์คือตัวบ่งชี้ "ปิดวาล์ว" ที่จริง ๆ แล้วระบุว่าคำสั่ง "ปิดวาล์ว" ออกเท่านั้นไม่ใช่ว่าปิดวาล์วจริงๆ
Kilian Foth

@KilianFoth: ในหมายเหตุที่คล้ายกัน: ฉันรู้จัก บริษัท ที่ทดสอบอย่างถูกต้องตามหลักศาสนา จากนั้นวันหนึ่งพวกเขาประสบกับความล้มเหลวของดิสก์ที่ร้ายแรงและพบว่า: การคืนค่าของพวกเขาไม่ได้
Jörg W Mittag

7
ฉันคิดว่ามันเป็นหน้าที่ของคนที่ขอให้คุณ "เขียนเช็คสุขภาพ" เพื่อกำหนดความหมายโดย "สุขภาพ" มิฉะนั้นมันเป็นเพียงการคาดเดา
Jörg W Mittag

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

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

คำตอบ:


15

สิ่งนี้ยากที่จะนำไปใช้เพราะคำจำกัดความของสิ่งที่ดีต่อสุขภาพ

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

คำถามที่ดีที่จะถามตัวคุณเองคือ "จากมุมมองของผู้ถาม หากเป็นคุณคุณจะต้องกำหนดมัน หากเป็นทีม / บริการอื่นคุณต้องระบุมาตรฐาน / สเปคสำหรับ Healthcheck

ในองค์กรขนาดใหญ่คุณจะมีมาตรฐานบางอย่างสำหรับสิ่งที่ Healthcheck ควรทำ คิดออกว่า

โดยเฉพาะที่นี่ตัวอย่าง webapp ของคุณหมายความว่าไม่ควรกลับมามีสุขภาพดีอีกครั้งเนื่องจาก webapp ไม่ดีต่อสุขภาพ แต่บางทีคำนิยามของคุณของ "สุขภาพดี" อาจรวมสิ่งนี้ไว้เป็น "โอเค" นี่เป็นส่วนหนึ่งของการอภิปรายข้อกำหนดด้านบน (อีกครั้งแม้ว่าจะเป็นเพียงรหัสของคุณเอง)

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

สำหรับคำถามที่แก้ไขแล้ว:

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

ไม่เพียงเพราะกระบวนการทำงานไม่ได้หมายความว่ากระบวนการจะไม่หยุดทำงานไม่ทำงานทั้งหมดหรือความเป็นไปได้อื่น ๆ อีกมากมาย

หรือเราควรทำการปิงแต่ละบริการด้วยตนเอง

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

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

Healthcheck ของคุณจำเป็นต้องตรวจสอบให้แน่ใจว่าการทำงานที่จำเป็นซึ่งคาดว่าจะทำงานได้ตามปกติ

หากผลตอบแทนของแอป "สุขภาพ" และไม่สามารถทำสิ่งที่ต้องทำคุณอาจรวมทั้งการกำจัด healthcheck ทั้งหมดเป็นมันจะให้ผลบวกปลอม (ไม่พูดถึงสับสนห่าจากคนพยายามที่จะแก้ปัญหาปัญหา - 'เดี๋ยวก่อน เว็บเซิร์ฟเวอร์ของเรามีสุขภาพดีทำไมเราไม่เห็นหน้าเว็บ ')

Healthcheck ต้องตรวจสอบด้วยว่าบริการที่ต้องพึ่งพาบางอย่างทำงานอยู่หรือไม่ เช่นเดียวกับฐานข้อมูลหรือระบบ orchestration นั้นเอง หรือว่าเป็นความรับผิดชอบของการตรวจสุขภาพอื่น?

มันขึ้นอยู่กับว่า หากบริการของคุณขึ้นอยู่กับบริการอื่นลักษณะของการโต้ตอบนั้นควรปรากฏในการเรียก API / เครือข่ายที่ส่งไปยังแอปของคุณและรวมไว้ใน healthcheck

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

อย่างไรก็ตามหากบริการของคุณกำลังส่งกิจกรรมไปยังผู้บริโภคที่รับฟังโดยไม่ผ่านการตรวจสอบใด ๆ แสดงว่าการทำงานของแอพของคุณนั้นมีความสำคัญน้อยกว่าผู้บริโภคทั่วไป "สุขภาพดี" กับแอปของคุณกำลังส่งข้อความ แต่ไม่ได้รับ

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

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

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


2

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

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

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


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

1

จากประสบการณ์ของฉันการบริการที่สำคัญมักจะมีคุณสมบัติดังต่อไปนี้:

การเต้นของหัวใจ

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

สวดมนต์

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


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

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