İşi bir bilgisayar ağına nasıl bölebilirim?


11

Bir senaryoyu şöyle düşünün: Çok fazla veri üreten merkezi bir bilgisayarınız olduğunu varsayalım. Bu veriler, maalesef üretmekten daha uzun süren bazı işlemlerden geçmelidir. İşlemin gerçek zamanlı olarak yakalanması için daha fazla bağımlı bilgisayar bağlarız.

Ayrıca, kölelerin iş ortasında ağdan ayrılma olasılığını ve ek kölelerin eklenmesini hesaba katmalıyız. Merkezi bilgisayar, tüm işlerin tatmin olmasını ve bir köle tarafından bırakılan işlerin başka bir işyerine geri gönderilmesini sağlamalıdır.

Ana soru şudur: Bunu başarmak için hangi yaklaşımı kullanmalıyım?

Ama belki de aşağıdakiler bir cevaba ulaşmama yardımcı olacaktır: Yapmaya çalıştığım şeyin bir adı veya tasarım modeli var mı?

Bu bilgisayarların birbirleriyle konuşmasını sağlamak için hangi bilgi alanına ihtiyacım var? (örneğin, biraz bilgim olan bir veritabanı yeterli olacak mı, yoksa henüz bilmediğim soketler mi içerecek?)

Böyle bir sisteme örnek var mı? Ana soru biraz geneldir, bu nedenle bir başlangıç ​​noktası / referans noktası olması iyi olur.

Not Bu yönde işaret eden çözümler takdir edilecektir böylece c ++ ve pencerelerin kısıtlamalarını varsayıyorum.


1
Kuyruk veya iş akışı sistemlerini arayın, örnekler: aws.amazon.com/sqs en.wikipedia.org/wiki/Message_queue etcetera. Kuyruk sistemi dağıtım, kontrol ve yeniden atama işlemlerini yapabilir.
Luc Franken

2
Aradığınız terim paralelleştirmedir . Eğer, bu yolda baş yapmadan önce emin senin sorunun aslında (öğe için örneğin sonucunu paralel olarak çözülebilir n öğe için sonuç bağlı değildir , n-1 ).
Blrfl

Bak boinc

@Blrfl Paralelleştirmenin genellikle bununla ilişkili olmadığını düşünüyorum, paralelleştirme genellikle tek bir makinede birden çok çekirdek / işlemci veya aynı makinede eşzamanlı yürütme kullanılarak çok iş parçacıklı veya çok işlemli yürütme ile ilişkilidir. Dağıtılmış bilgi işlem, sözünü ettiği şeydir ve açıklamasında eşzamanlılık garantisi yoktur, sadece eşzamansızlık garantileri vardır (eşzamanlı, eşzamanlı veya kuyrukta gecikmiş olabilen belirleyici olmayan yürütme anlamına gelir)
Jimmy Hoffa

3
Kimsenin hadoop'tan bahsetmediğine şaşırdım.
Kevin

Yanıtlar:


12

Böyle bir sisteme örnek var mı?

Evet. Bu kalıp dağıtılmış hesaplama (veya dağıtılmış programlama veya dağıtıldıktan sonra koymak istediğiniz harika kelimeler) olarak bilinir. Benim önerim, diğer çözümlere bakmadan önce bu evi inşa etmemektir. Çeşitli seçenekler için bu yığın taşması sorusuna bakabilirsiniz . Ve sonra hesaplanmış karar alın.


3
Bunun için yeni favori kelimeyi unutmayın: bulut ! veya bulut bilişim. Kendi bilgisayarlarınızla yaparsanız, insanlar kişisel bulut veya mini bulut olarak adlandırırlar . Saçmalık pazarlamak, bu yıllardır dağıtık bilgi işlem olarak söylediğiniz gibi biliniyor, sadece OP'nin tam olarak bunun hakkında konuştuğu bulut şeylerini nereden okuduğunu bilmesi için oraya atılıyor.
Jimmy Hoffa

3
@JimmyHoffa: "bulut" kelimesi, verilerinizin ve onunla çalışmak için kullandığınız yazılımın yerel makineniz yerine bir yerde internette olduğunu belirtmek için sıklıkla kullanılır. Ve yine de diğer zamanlarda, tek bir monolitik VM ana bilgisayarı yerine bir kümede çalışan bir sanal makine kullandığınız anlamına gelir; bariz avantaj şeffaf sıfır duruş süresi yerine çalışmalardır.
tdammers

2
@tdammers true, ancak hiçbiri OP tarafından tanımlanan sistem türü, neredeyse her şeyi işaret ettiğiniz gibi Cloud'un pazarlama takma adından yararlanan sistemlerden biri değildir. Bunu bir terim haline getiren şey, tanımsız olarak icat edildi, böylece insanlar tonlarca farklı şeye uyguladılar, böylece her şey ve hiçbir şey anlamına gelmedi. Buzzwords için Yaşasın.
Jimmy Hoffa

1
@JimmyHoffa: "Bulut" kelimesinden bahsetmeyi tamamen yapıcı olmayan yapan da bu.
tdammers

3
Yönetime karşı kullanmak iyi bir kelime olabilir. "Bu veri işleme sorununa çözümünüz nedir?" "Bunu bir bilgisayar ağına dağıtabilir ve paralel olarak hesaplayabiliriz." BOŞ BAKIŞ. "Mini bir Bulut oluşturabiliriz." "OKAY CARRY ON"
Morpork

4

Diğer cevapların da belirttiği gibi, bu alan dağıtılmış hesaplama , grid hesaplama , küme hesaplama ve yüksek performanslı hesaplama olarak bilinir .

Bir iş yükü ile eşleşmeye başladıktan sonra bir sistemin yeniden boyutlandırılabileceği zaman, bunun " elastik " olduğu söylenir ve bunun geleneksel şebeke bilgi işleminden farklı olduğu ayrımını ekleyeyim. Bu, " bulut bilişim " teriminin (pazarlama dışı) nedenlerinden biridir : kullanıcının kapasite planlaması yapmasına gerek yoktur ve hesaplamayı gerçekleştiren makinelerin sayısı ve yeri bulut olarak özelliksiz kalır.

Ayrıca, ana sunucunun başarısız görevleri yeniden zamanlaması gereksiniminiz , o sistemin " hata toleransı " özelliği olarak adlandırılır . ( Bu karikatür için zorunlu bağlantı )

Kendi özel bulutunuzu oluşturmak için hangi yaklaşımı kullanmalısınız? Siparişimde veya tercihimde:

  1. Kendi bulutunuzu oluşturmayın, başkaları tarafından sağlanan altyapıyı kullanın. Amazon bu Sanal Özel Bulut , Rackspace'e sadece Özel Bulut diyor ; Eminim başka teklifler bulabilir ve karşılaştırabilirsiniz.

  2. Kendi dağıtılmış bilgi işlem motorunuzu oluşturmayın, başkaları tarafından sağlanan motoru kullanın. Makinelerinizi kullanmakta ısrar ediyorsanız, en azından başkaları tarafından sağlanan ve test edilen yazılımları kullanın. Hadoop'u C ++ kanalından Pipes arabirimi üzerinden veya herhangi bir yürütülebilir dosyadan Akış API'sı üzerinden kullanabilirsiniz . Bir yoktur Spark benzer Akış arayüz .

  3. Tüm bileşenleri sıfırdan kodlamayın , topluluktaki bileşenleri kullanın. Herhangi bir nedenle şimdiye kadar okuduysanız ve kendi bulut bileşenlerinizi sunmak istiyorsanız, C ++ 'ın standart kitaplığından başlamayın. İhtiyacınız olacak ana bileşenler:

    • yorumda belirtildiği gibi bir kuyruk sistemi, master'dan işlem düğümlerine görevler göndermek ve işlem düğümlerinden master'a sonuç onayları göndermek için
    • dağıtılmış bir dosya sistemi, böylece işlem düğümleri üzerinde çalışmak için verilere erişebilir.

    Her ikisi için de birçok alternatif var. Kuyruklama için RabbitMQ'nun ZeroMQ gibi bir Windows yükleyicisi vardır . Dağıtılmış dosya sistemleri için Windows'ta gerçekten yeterli deneyimim yok: Görünüşe göre SMB paylaşımlarını bir DFS'de düzenleyebilirsiniz , ancak size burada herhangi bir ipucu veremem. Başka bir cevapta belirtildiği gibi, veriler için MongoDB gibi dağıtılmış bir veritabanı kullanmayı düşünebilirsiniz; Windows üzerinde çalışır .

MPI (genellikle OpenMPI uygulaması , genellikle Boost sarıcısı aracılığıyla ) kullanmayı düşünebilirsiniz , ancak MPI programlarının ne esnek ne de hataya dayanıklı olduğunu fark edebilirsiniz; bununla kendiniz ilgilenmeniz gerekir (en azından bunu başarmak için bazı mekanizmalar sağlarlar ). Bu yüzden önce bu tür özelliklere sahip dağıtım için bir çerçeve değerlendirmenizi tavsiye ederim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.