รับผิดชอบบริการหลัง deployment
เรียนจบแล้วกำหนดสัญญาณบริการที่มีประโยชน์ การตัดสินใจระหว่าง incident การกู้คืน และการบำรุงรักษา แสดงความรับผิดชอบด้านการดำเนินงานให้ชัดเจนหลังการสร้างโค้ดสิ้นสุด
เผยแพร่โดย Taigaวิธีเขียนเนื้อหาของเรา
ตรวจความเข้าใจการตรวจ uptime ได้ HTTP 200 แต่ไฟล์ส่งออกไม่มีระเบียน เพราะ authorization ทำงานผิด สิ่งนี้แสดงอะไร?ทำแบบฝึกหัด
สิ่งที่จะได้เรียนรู้
- กำหนดสัญญาณบริการจากมุมมองของผู้ใช้
- แยกการประสานงาน incident ออกจากการสืบหาสาเหตุทางเทคนิค
- วางแผนการบำรุงรักษาและการกู้คืนให้เป็นหน้าที่ต่อเนื่อง
กำหนดบริการที่ผู้ใช้พึ่งพา
Deployment ทำให้ซอฟต์แวร์พร้อมให้ใช้งาน การดำเนินงานทำให้มันยังมีประโยชน์เมื่อผู้ใช้ dependency, traffic และข้อกำหนดเปลี่ยน เครื่องมือสร้างโค้ดไม่ได้ทำให้งานต่อเนื่องนี้หมดไป
สำหรับการส่งออกข้อมูลลูกค้าในสถานการณ์สมมติ ผู้ใช้ต้องการมากกว่าหน้าที่เข้าถึงได้ พวกเขาต้องการระเบียนที่มีสิทธิ์เข้าถึง ในรูปแบบที่กำหนด ภายในเวลาที่ยอมรับได้ และต้องการให้บริการป้องกันการเข้าถึงข้อมูลขององค์กรอื่น
ระบุผู้รับผิดชอบก่อนออก release บันทึกว่าใครตอบสนองนอกเวลาทำงาน หากเป็นส่วนหนึ่งของข้อผูกพันการให้บริการ ผู้ให้บริการภายนอกทำงานบางส่วนได้ แต่องค์กรยังต้องมีช่องทางตัดสินใจและสื่อสารที่ชัดเจน
เลือกสัญญาณที่ช่วยให้ลงมือได้
Service-level indicator หรือ SLI วัดคุณสมบัติของพฤติกรรมบริการที่กำหนดไว้ ส่วน service-level objective หรือ SLO ตั้งเป้าหมายสำหรับตัวชี้วัดนั้นในช่วงเวลาที่ระบุ เลือกเป้าหมายจากความต้องการของผู้ใช้และความสามารถด้านการดำเนินงาน
แนวทาง SRE ของ Google อธิบายวิธีนี้และการใช้ error budget เพื่อตัดสินใจด้านความเชื่อถือได้ อย่าคัดลอกเป้าหมายของบริการอื่นโดยไม่ตรวจสอบความหมาย แนวทาง SLO, ตัวอย่างนโยบาย error budget
สำหรับการส่งออก ให้กำหนดว่าคำขอที่เข้าเกณฑ์และสำเร็จหมายถึงอะไร แยกการปฏิเสธที่คาดหมายออกจากความขัดข้องของระบบ บันทึกข้อยกเว้นในการวัด เพื่อไม่ให้ตัวชี้วัดดีขึ้นเพียงเพราะซ่อนคำขอที่จัดการยาก
| สัญญาณ | สิ่งที่ช่วยตรวจพบ | ข้อจำกัดสำคัญ |
|---|---|---|
| การตรวจความพร้อมใช้งานจากภายนอก | เข้าถึงบริการไม่ได้ | ไม่ได้ตรวจสอบ workflow ที่ต้องลงชื่อเข้าใช้ |
| การส่งออกสำเร็จและ latency | คำขอที่เข้าเกณฑ์ล้มเหลวหรือใช้เวลานานเกินไป | ต้องนิยามความสำเร็จให้ชัดเจน |
| การตรวจว่าปฏิเสธคำขอที่ไม่มีสิทธิ์ | ขอบเขตสำคัญกลับมาทำงานผิด | ครอบคลุมเงื่อนไขที่ทดสอบ |
| สัญญาณทรัพยากรและ dependency | สาเหตุภายในที่เป็นไปได้ | ไม่ได้อธิบายผลกระทบต่อผู้ใช้ด้วยตัวเอง |
หลีกเลี่ยงการบันทึกข้อมูลส่งออกทั้งหมดลง log เพื่อให้มองเห็นระบบมากขึ้น เก็บข้อมูลเท่าที่จำเป็นต่อการวินิจฉัย และป้องกันการเข้าถึงข้อมูลนั้น
เตรียมการตอบสนอง incident
ตัดสินใจว่าใครประสานงาน ใครสืบหาสาเหตุ และใครสื่อสาร ทีมเล็กอาจรวมบทบาทเหล่านี้ได้ แต่หน้าที่ต้องยังชัดเจน เก็บบันทึกสิ่งที่สังเกตและการดำเนินการ
แนวทางตอบสนอง incident ของ Google เน้นการประสานงานและการสื่อสารควบคู่กับการบรรเทาปัญหาทางเทคนิค การแก้ที่ถูกต้องทางเทคนิคยังอาจทำให้ผู้ใช้ไม่ได้รับข้อมูล หรือผู้ตอบสนองหลายคนเปลี่ยนระบบขัดแย้งกัน การตอบสนอง incident
Agent สรุป log หรือเปรียบเทียบสมมติฐานภายในขอบเขตข้อมูลที่อนุมัติได้ แต่ไม่ควรได้รับอำนาจใน production แบบไม่จำกัดเพียงเพราะ incident เร่งด่วน ใช้ช่องทางยกระดับที่กำหนดไว้สำหรับสิทธิ์เข้าถึงกรณีพิเศษ
ฝึกกู้คืนและจัดสรรทรัพยากรบำรุงรักษา
ทดสอบขั้นตอนกู้คืนด้วยข้อมูลสมมติที่เป็นตัวแทนของการใช้งาน ระบุสิ่งที่ rollback โค้ดย้อนกลับไม่ได้ รวมถึงระเบียนที่ลบหรือข้อความที่ส่งแล้ว บันทึกเวลาและข้อมูลที่ต้องใช้เพื่อกู้คืนบริการ
มอบหมายงานต่อเนื่อง ได้แก่ อัปเดต dependency ทบทวนสิทธิ์ ต่ออายุ certificate เมื่อเกี่ยวข้อง เปลี่ยนความจุ และแก้เอกสาร บริการที่ไม่มีกำลังคนสำหรับบำรุงรักษาจะสะสมภาระหลังงบเปิดตัวหมด
หลัง incident ให้เลือกการปรับปรุงที่แก้สาเหตุที่สังเกตพบ เชื่อมโยงกับการลงมือทำและการตรวจสอบ นี่ทำให้ lifecycle ครบวงจร: หลักฐานจากการดำเนินงานเปลี่ยนสิ่งที่ทีมจะกำหนดและสร้างต่อไป
ทำแบบฝึกหัด
เขียนบันทึกการดำเนินงานหนึ่งหน้าสำหรับการส่งออกข้อมูลลูกค้าในสถานการณ์สมมติ ระบุสัญญาณจากมุมมองผู้ใช้หนึ่งอย่าง เป้าหมาย ผู้รับ alert การตอบสนองแรกที่ปลอดภัย ขีดจำกัดการกู้คืน และผู้รับผิดชอบการบำรุงรักษา ระบุสิ่งที่ monitoring ตรวจไม่พบ
ดาวน์โหลดใบงาน (Markdown)การยกเลิกตัวเลือกนี้จะลบความคืบหน้าทั้งหมดที่บันทึกใน browser นี้
ความคืบหน้าอยู่ใน browser นี้ ไม่ใช้บัญชีและไม่ติดตามการใช้งาน
แหล่งข้อมูลและเนื้อหาอ่านเพิ่มเติม
- Google SRE: Implementing SLOs ↗
- Google SRE: Incident Response ↗
- Google SRE: Example Error Budget Policy ↗