“มันทํางานบนเครื่องของฉัน” แต่สคริปต์ bash ของคุณทํางานเมื่อ API ของบุคคลที่สามใช้เวลา 15 วินาทีในการตอบสนองหรือไม่ บริการหลังคาของคุณจัดการด้วยความสง่างามกับการเพิ่มขึ้นอย่างฉับพลันของข้อผิดพลาด 503 จากผู้ให้บริการชําระเงินหรือไม่ เขียนเซิร์ฟเวอร์ปลอมเต็มรูปแบบเพียงเพื่อทดสอบกลยุทธ์ retry ง่ายในสคริปต์มักจะ overkill ในกวดวิชานี้ฉันจะแสดงให้คุณวิธีที่เร็วขึ้น: . Chaos Engineering directly in the terminal เราจะใช้ และ Cloud-based Chaos Proxy เพื่อฉีดความล้มเหลวในคําขอเครือข่ายจริงโดยไม่ต้องเปลี่ยนรหัสแอปพลิเคชันของคุณ curl ปัญหา: Localhost เป็นที่สมบูรณ์แบบเกินไป เมื่อพัฒนาในท้องถิ่นความล่าช้าเครือข่ายอยู่ใกล้กับศูนย์ API ทํางาน (200 OK) หรือพวกเขาไม่ได้ (การเชื่อมต่อถูกปฏิเสธ) แต่ในการผลิตคุณต้องเผชิญกับ: : เซิร์ฟเวอร์มีงาน : 5% ของคําขอลดลง : คุณตีขีด จํากัด อัตรา High Latency Intermittent Failures Throttling การจําลองนี้ในเทอร์มินัลมักเกี่ยวข้องกับความซับซ้อน กฎระเบียบหรือเครื่องมือท้องถิ่นเช่น (การควบคุมการจราจร) มีวิธีที่ง่ายกว่า iptables tc โซลูชัน: Cloud Chaos Proxy แทนที่จะกําหนดค่าระบบปฏิบัติการของคุณเราจะนําคําขอเฉพาะผ่านตัวแทนที่ "แตก" การเข้าชมตามกฎที่เรากําหนด ฉันจะใช้ chaos-proxy.debuggo.app สําหรับเรื่องนี้ แต่แนวคิดนี้ใช้กับ proxy ที่สามารถเขียนโปรแกรมได้ใด ๆ วิดีโอคู่มือ (1:27) ชอบดู? นี่คือการทํางานของ 90 วินาที: https://www.youtube.com/watch?v=x_S-guPwPEk&embedable=true Step-by-Step Tutorial 1. กําหนดความล้มเหลว ก่อนอื่นเราต้องบอก proxy สิ่งที่จะทําลาย โดเมนเป้าหมาย: httpbin.org (หรือโดเมน API ของคุณ) ความล่าช้า: 7 วินาที (จําลองการล่าช้า) อัตราการล้มเหลว: 1 (100% ของคําขอจะล้มเหลว) รหัสข้อผิดพลาด: 503 บริการไม่สามารถใช้ได้ 2. Trust the Certificate (การตั้งค่า "ครั้งเดียว" ) เนื่องจากเรามีการจับภาพการเข้าชม HTTPS เราต้องไว้วางใจใบรับรอง CA ของพร็อกซี่ ดาวน์โหลด จาก Dashboard mitmproxy-ca-cert.pem เพิ่มไปยัง Keychain Access -> ระบบและตั้งค่า "เชื่อถือเสมอ" MacOS: คัดลอกไปยัง /usr/local/share/ca-certificates/ และอัปเดต Linux: 3. Command Magic ตอนนี้เราใช้ กับ the (proxy) ป้าย curl -x curl -v -x http://user:pass@chaos-proxy.debuggo.app:13979 https://httpbin.org/get ทําความเข้าใจผลผลิต เมื่อคุณเรียกใช้คําสั่งนี้หลายครั้ง: สภาพแวดล้อม A ( Chaos): คุณจะสังเกตเห็น terminal "hangs" สําหรับ 7 วินาที (ความล่าช้าของเรา) จากนั้น: < HTTP/1.1 500 Internal Server Error < content-length: 56 < content-type: text/plain ... Debuggo Chaos Injection: 500 Error : อื่น ๆ 50% ของเวลาคําขอผ่านไปยังเซิร์ฟเวอร์จริง: Scenario B (Success) < HTTP/1.1 200 OK ... { "args": {}, "headers": { ... } } Real World Use Cases การทดสอบท่อ CI: ตรวจสอบให้แน่ใจว่าสคริปต์การใช้งานของคุณไม่ได้เกิดความผิดพลาดหากการพึ่งพาช้า Cron Jobs: ตรวจสอบให้แน่ใจว่าการซิงค์ข้อมูลในเวลากลางคืนของคุณจะซิงค์กลับอย่างถูกต้องเมื่อเกิดความล้มเหลว ตรวจสอบความปลอดภัยอย่างรวดเร็ว: ก่อนที่จะกดรหัสตรวจสอบว่าลูกค้า API จะจัดการกับข้อผิดพลาด 503 ได้อย่างไร ข้อสรุป คุณไม่จําเป็นต้องใช้โครงสร้างพื้นฐานที่หนักเพื่อทดสอบความยืดหยุ่นของเครือข่าย การตั้งค่าพร็อกซี่ที่เรียบง่ายช่วยให้คุณสามารถฉีดความยุ่งยากเข้าไปในลูกค้า HTTP ใด ๆ , , หรือสคริปต์ Python / Node.js ของคุณ curl wget Happy Breaking!