อินสแตนซ์ทั้งหมด 700 รายการอาจทำงานพร้อมกันได้หรือไม่
ขึ้นอยู่กับว่าคุณหมายถึงอะไรในเวลาเดียวกัน หากเราจู้จี้จุกจิกก็ไม่ใช่พวกเขาทำไม่ได้ถ้าคุณไม่มีการประมวลผล 700 เธรดในระบบของคุณที่คุณสามารถใช้ประโยชน์ได้ (อาจไม่ใช่) แม้ว่าในความเป็นจริงอาจจะทำได้หากคุณมี RAM และ / หรือพื้นที่สว็อปเพียงพอในระบบ UNIX และเด็กต่าง ๆ มีความสามารถในการจัดการภาวะพร้อมกันในระดับสูงซึ่งเป็นส่วนหนึ่งของสาเหตุที่พวกเขานิยมใช้งาน HPC ขนาดใหญ่
ฉันจะไปได้ไกลแค่ไหนจนกระทั่งเซิร์ฟเวอร์ถึงขีด จำกัด ?
นี่เป็นไปไม่ได้ที่จะตอบเป็นรูปธรรมโดยไม่มีข้อมูลมากขึ้น ค่อนข้างมากคุณต้องมีหน่วยความจำเพียงพอที่จะตอบสนอง:
- ข้อกำหนดหน่วยความจำรันไทม์ทั้งหมดของหนึ่งงานคูณ 700
- ข้อกำหนดหน่วยความจำของ bash เพื่อจัดการว่ามีงานจำนวนมาก (bash นั้นไม่น่ากลัวเกี่ยวกับเรื่องนี้ แต่การควบคุมงานนั้นไม่ได้มีประสิทธิภาพเพียงพอสำหรับหน่วยความจำ)
- ข้อกำหนดหน่วยความจำอื่น ๆ บนระบบ
สมมติว่าคุณพบสิ่งนั้น (อีกครั้งด้วย RAM เพียง 50GB คุณยังต้องเผชิญกับปัญหาอื่น ๆ :
- ต้องเสียเวลา CPU มากเพียงใดในการควบคุมงาน? อาจจะไม่มากนัก แต่มีงานหลายร้อยตำแหน่ง
- จำเป็นต้องใช้แบนด์วิดท์เครือข่ายเท่าใด เพียงแค่เปิดการเชื่อมต่อเหล่านั้นทั้งหมดอาจทำให้เครือข่ายของคุณเสียหายประมาณสองสามนาทีขึ้นอยู่กับแบนด์วิดท์และเวลาแฝงของคุณ
- สิ่งอื่น ๆ อีกมากมายที่ฉันอาจไม่ได้คิด
เมื่อถึงขีด จำกัด นั้นแล้วจะรอเพื่อเริ่มต้นการทำซ้ำครั้งถัดไปจาก foo หรือกล่องจะพังหรือไม่
ขึ้นอยู่กับขีด จำกัด ของจำนวนการเข้าชม หากหน่วยความจำของมันมีบางสิ่งที่จะตายในระบบ (โดยเฉพาะเจาะจงมากขึ้นถูกทำลายโดยเคอร์เนลในความพยายามที่จะเพิ่มหน่วยความจำ) หรือระบบอาจผิดพลาด (ไม่ใช่เรื่องผิดปกติในการกำหนดค่าระบบ ถ้าถึงเวลา CPU มันก็จะไปต่อโดยไม่มีปัญหามันจะเป็นไปไม่ได้ที่จะทำอย่างอื่นในระบบ หากเป็นเครือข่ายคุณอาจเกิดความผิดพลาดกับระบบหรือบริการอื่น ๆ
สิ่งที่คุณต้องการจริงๆที่นี่ไม่ใช่การทำงานทั้งหมดในเวลาเดียวกัน แต่ให้แบ่งออกเป็นแบทช์และรันงานทั้งหมดภายในแบทช์ในเวลาเดียวกันปล่อยให้งานนั้นเสร็จสิ้นจากนั้นเริ่มแบทช์ต่อไป GNU Parallel ( https://www.gnu.org/software/parallel/ ) สามารถใช้สำหรับสิ่งนี้ได้ แต่มันก็น้อยกว่าอุดมคติในระดับนั้นในสภาพแวดล้อมการผลิต (ถ้าคุณไปด้วยอย่าก้าวร้าวเกินไป) อย่างที่ฉันพูดไว้คุณอาจล้นเครือข่ายและส่งผลกระทบต่อระบบที่คุณไม่ต้องการแตะต้อง) ฉันอยากจะแนะนำให้มองหาเครื่องมือตรวจสอบเครือข่ายที่เหมาะสมเช่น Ansible ( https://www.ansible.com/) เนื่องจากจะไม่เพียง แต่แก้ปัญหาการทำงานพร้อมกันของคุณ (Ansible จะทำการแบตช์อย่างที่ฉันได้กล่าวไว้ข้างต้นโดยอัตโนมัติ) แต่ยังให้คุณสมบัติที่มีประโยชน์อื่น ๆ อีกมากมายให้คุณทำงานด้วย (เช่นการทำงาน idempotent เครื่องมืออื่น ๆ จำนวนมาก)
parallel
มากที่ใช้งานประมาณ 50 งานพร้อมกัน มันเป็นสื่อกลางที่ดีระหว่างการขนานของ 1 กับ 700 สิ่งที่น่าสนใจอีกอย่างคือ การเชื่อมต่อที่หยุดทำงานเพียงครั้งเดียวจะถ่วงเวลาตัวเองเท่านั้นไม่ใช่การเชื่อมต่ออื่น ๆ ข้อเสียเปรียบหลักคือการจัดการข้อผิดพลาด ไม่มีวิธีใดที่ใช้เชลล์เหล่านี้จะจัดการข้อผิดพลาดได้อย่างงดงาม คุณจะต้องตรวจสอบความสำเร็จด้วยตนเองและลองใหม่เอง