2010-06-15 27 views
9

işte benim sorunum:Yük dengeleme ve zamanlama algoritmaları

Birkaç farklı yapılandırma sunucum var. Farklı hesaplamalarım var (işler); Her bir işin ne kadar uzun süre kalacağını tahmin edebilirim. Ayrıca önceliklerim var. Sorum, tüm makinelerin% 99-100 oranında yüklenmesini ve işleri en iyi şekilde nasıl planlayacağınızdır.

Her makinenin bir anda birkaç hesaplamaları yapabilir. İşler makineye itilir. Merkezi makine her makinenin mevcut yükünü bilir. Ayrıca, burada bir tür makine öğrenimi vermek istiyorum, çünkü her işin istatistiklerini bileceğim (başladım, bitmiş, cpu yükü vb.).

nasıl akılda öncelikleri tutarak, mümkün olan en iyi şekilde işler (hesaplamalar) dağıtabilirsiniz?

Her türlü öneri, fikir veya algoritma?

FYI: Platformum .NET.

+0

Burada ne gibi bir yer .NET ile ilgilidir? .NET'in kullanımına herhangi bir şekilde bağımlı olan bir algo seçim noktasından hiçbir şey göremiyorum. Algoritmalar - tanım başına - bağımsız olarak langauge vardır. – TomTom

+0

Algo'nun .NET'de olup olmadığı hiç önemli değil :) Ben sadece .NET ile çalıştığımı belirttim. Bu yüzden belki de şu anda bazı fonksiyonellikler var :) –

+0

@ Lukas Benzer bir durumla karşılaşıyorum Şu anda problem. Hiç iyi bir çözüm buldunuz mu? –

cevap

0

Bunun, .NET ile çok az ilgisi var gibi görünüyor.

Ancak makinelerinizi 'çalışan ipleri' olarak düşünün, mevcut CPU'larda (veya diğer önemli kaynaklarda) mevcut makinelerin bir 'havuzunu' yapın, ardından her işi en iyi takılan makineye itmek için her bir görev hakkındaki bilginizi kullanın. . Eğer tüm işler peşin biliyorsanız

, muhtemelen doğru makinelerde doğru sırayla bunları planlamak için bir 'en uygun' algoritmasını kullanabilirsiniz. Ayrıca 'kesim stok' algoritmalarına da bakabilirsiniz; http://en.wikipedia.org/wiki/Cutting_stock_problem ... Dryad linq de

+0

** Appliedalgo.com ** - bittikten sonra yeniden tekerlek icat edebilirsiniz, zamanlama için 500 $, zamanlama/yürütme izleme/yük dengeleme her şey –

+0

Çok iyi satın almak için, fonlamaya bağlı olarak daha ucuz olabilir. Ancak sadece bu paketin "64bit Windows 7 veya üstü" olduğunu unutmayın (web sitelerine göre). –

+0

Denge işlerini Java'ya, hatta yalnızca 64 bit Windows'a yükleyebilir. –

2
  1. bak. Zaten akademik sürümde ve yararlı olabilir.
  2. Win HPC server - Microsoft'tan dağıtılmış bilgi işlem için kurumsal çözüm.
  3. performans sayaçlarını analiz ederek yük dengeleme oluşturmak için yardımcı olabilir Bazı code samples.
  4. Microsoft elle yazılmış RoundRobin yük dengelemesi ile dağıtılabilir SOA örneğidir (kaynakları ile) StockTrader örnek bir uygulama alanına sahiptir.
0

Microsoft, yakın bir tarihte quincy scheduler'ında bir paper yayımladı. Eğer sadece CPU kullanımı için optimizasyon yapıyorsanız o zaman çok basit bir çözücü global optimumu bulabilir. Daha fazla eksende optimizasyona ihtiyacınız varsa, o zaman problem alanı daha karmaşık olacaktır.

Kümeniz ne kadar büyük? Arıza durumlarında optimizasyonla nasıl başa çıkıyorsunuz? Onlar önemli mi? IO var mı? Veride disk yakınlığı var mı? Bir iş parçasını çalıştırmak için birden fazla yer var mı? Düşünülmesi gereken her şey.

1

alternatif bir yaklaşım olarak, işleri planlamak için her makinenin performansını en üst oranı tahminleri kullanabilirsiniz. Bu, sadece yük dengeli bir sistemin CPU çalışma zamanı performansını düşünüyorsanız, çok etkili olabilir. Bu yaklaşıma göre I/O, kümelenme boyutu, ağ performansı, bellek modeli vb. Ile ilgili konular ihmal edilmektedir. http://dx.doi.org/10.1145/1513895.1513901

Daha doğru (yakın yük dengeli iş dağılımı) yaklaşımı için bir öneri algoritması olacaktır - bilgisayar mimarisine bağımlı olanı. Bu durumda, yüksek öncelikli iş taleplerini karşılayan en iyi sunucuya planlanabilir - ancak önce işlerin sunucuya en iyi şekilde eşlenmesini belirlemeniz gerekir.Çok işlemcili bazı işletim sistemi programlama algoritmalarını da uygulayabilirsiniz (tek işlemciler değil). Umarım bunu faydalı bulursun.