700 örneğin tümü aynı anda çalışabilir mi?
Bu aynı anda ne demek istediğinize bağlı. Seçici olursak, hayır, sisteminizde kullanabileceğiniz 700 yürütme iş parçacığı yoksa (muhtemelen değil) yapamazlar. Gerçekçi olarak, evet, sistemde yeterli RAM ve / veya takas alanı olması koşuluyla, muhtemelen yapabilirler. UNIX ve çeşitli çocukları, büyük eşzamanlılık düzeylerini yönetmede oldukça iyi, bu da büyük ölçekli HPC kullanımı için neden bu kadar popüler olduklarının bir parçası.
Sunucum sınırına ulaşıncaya kadar ne kadar uzağa gidebilirim?
Daha fazla bilgi olmadan somut olarak cevap vermek imkansızdır. Hemen hemen, karşılamak için yeterli belleğe sahip olmanız gerekir:
- Bir işin tüm çalışma zamanı bellek gereksinimleri, 700 kez.
- Birçok işi yönetmek için bash'ın bellek gereksinimleri (bash bu konuda korkunç değildir, ancak iş kontrolü tam olarak bellek verimli değildir).
- Sistemdeki diğer tüm bellek gereksinimleri.
Bunu karşıladığınızı varsayarsak (yine yalnızca 50GB RAM ile, diğer sorunlarla uğraşmaya devam edersiniz:
- İş kontrolünde bash tarafından ne kadar CPU süresi harcanacak? Muhtemelen çok fazla değil, ancak yüzlerce işte önemli olabilir.
- Bunun için ne kadar ağ bant genişliği gerekir? Tüm bu bağlantıların açılması, bant genişliğinize ve gecikmenize bağlı olarak ağınızı birkaç dakika batabilir.
- Muhtemelen hiç düşünmediğim birçok şey.
Bu sınıra ulaşıldığında, bir sonraki yinelemeye başlamak için beklemek mi yoksa kutu çökecek mi?
Hangi limitin vurulduğuna bağlıdır. Bellekse, sistemde bir şey ölür (daha spesifik olarak, belleği boşaltmak için çekirdek tarafından öldürülür) veya sistemin kendisi çökebilir (bellek yetersiz kaldığında sistemleri kasıtlı olarak çökecek şekilde yapılandırmak olağandışı değildir). CPU zamanı ise, sorun olmadan devam edecek, sistemde başka şeyler yapmak imkansız olacak. Yine de ağ ise, diğer sistemleri veya hizmetleri çökertebilirsiniz.
Ne gerçekten burada gerek aynı anda tüm işlerini yapacak değildir. Bunun yerine, bunları gruplara ayırın ve bir gruptaki tüm işleri aynı anda çalıştırın, bitirmelerine izin verin, ardından bir sonraki toplu işi başlatın. GNU Parallel ( https://www.gnu.org/software/parallel/ ) bunun için kullanılabilir, ancak bir üretim ortamında bu ölçekte ideal olmaktan daha azdır (eğer giderseniz çok agresif olmayın, Dediğim gibi, ağı batabilir ve dokunmayacağınız sistemleri etkileyebilirsiniz). Ansible ( https://www.ansible.com/) gibi uygun bir ağ düzenleme aracına bakmanızı gerçekten tavsiye ederim.), çünkü sadece eşzamanlılık sorunlarınızı çözmekle kalmayacak (Ansible, otomatik olarak yukarıda bahsettiğim gibi toplu iş yapıyor), aynı zamanda size çalışmanız için birçok yararlı özellik de sunuyor (görevlerin idempotent yürütülmesi, güzel durum raporları ve yerel entegrasyon gibi) çok sayıda başka araç).
parallel
Yaklaşık 50 eşzamanlı iş kullanarak iyi şanslar yaşadım . 1 ile 700 arasındaki paralellik arasında harika bir ortam. Bir diğer güzel şey de batchless. Tek bir duraklı bağlantı diğerlerinin değil, yalnızca kendini durduracaktır. Ana dezavantajı hata yönetimi. Kabuk tabanlı yaklaşımların hiçbiri hataları incelikle işlemeyecektir. Başarıyı kendiniz manuel olarak kontrol etmeniz ve kendi yeniden denemelerinizi yapmanız gerekir.