Giriş
Birçok toplu iş veriler, her gün milyonlarca kaydın işlenmesi ve ben birkaç saat hiçbir şey yapmadan her gün oturup tüm makineler hakkında son zamanlarda düşünüyordum çalıştırmak nerede bir şirkette çalışmak. Bizim sistemlerinin işlem gücü desteklemek için bu makineleri kullanabilir olsa iyi olmaz mıydı? Bu makaleler set ben bir ofis istihdam potansiyel yararları bakmak için gidiyorum ızgara sanallaştırılmış ortamlarda kullanarak.
In Part 1 sana bir ofis ızgara oluşturmak için neden isteyeyim sıra potansiyel bazı nedenleri tartışıldı olarak kullanıyorum edilecek sistem ve teknolojileri konusunda bilgi verdi.
İş Denetimi
Eğer işler çalışıyor gidiyoruz, o zaman onları yönetmek için bir yol gerekir gidiyoruz. İşiniz kontrol sistemi (iş sunucuda) gerçekten iyi hatta bir ofis ızgara çalıştığınız önce düşünülmüş olması gerekir. Yani öncelikle bir iş denetim sisteminin görevleri nelerdir:
- Işçilerin talebi üzerine işleri teslim
- Ne tür işler çalıştırmak için işçi söyle
- Parça işler
- Işler sadece bir kez çalıştırmak emin olun
- Işçilerin işi verileri sağlayın, ya da en azından bunu elde etmek için onlara
Sistem aynı zamanda genişletilebilir, bir ızgara çözüm değer gördüğü iş olarak işler çeşitli çalıştırmak için uzatılabilir tek bir durumda şu an için çalışan bir çözüm olması gerekir. Örneğin, iş öncelikleri elde edebilir, birden fazla iş türü (yani birkaç kod bazlar) var olabilir, sonuçta siz bile 'genel işçinin uzak hareket ediyor olsa da (iş her türü için optimize edilmiş çeşitli işçi makineleri çalıştırmak olabilir 'fikir). Daima sistemleri geliştirirken geleceği hakkında düşünmeye çalışacağım, kısa dönemli vizyonu uzun vadede hayal kırıklığı ve artan geliştirme süresini yol açabilir.
İş Sunucu
Biz işten kontrol etmek için bir yere ihtiyacımız olacak, bu gibi bir IP adresi, ana bilgisayar adı, URL (iç DNS kullanarak), Bunun nedeni olduğunu, sabit bir kaynak bulucu vardır sizin Izgarada sadece sisteminin olmalıdır işçiler nerede iş aramak için bilmeniz gereken, işçilerin iş denetim sistemi (değil, işi kontrol sistemi işçi bulma) bulmalıyız.
Iş sunucusu kendisini gerçekten (temel bir sistemde olsa) karmaşık bir görev yoktur, bu işleri el, işlerin bir listesini saklamak sonuçlar alırsınız ve daha sonra daha sonra geri alma için bunları saklamak gerekiyor. Bu parçalar (örneğin 'el işleri') nasıl tanımlanmaktadır çok basit olabilir. Daha sonra biz bir yönetim arayüzü eklemek, düzenlemek, silmek, işleri askıya ancak bu egzersizin ötesinde dahil etmek sistemi genişletebilirsiniz.
İşinizi sunucu bunu ondan çok fazla kaynak drenaj değil sağlanan ana işleme sunucu içerisinde çalışan bir sanal makine olamayacağı sonra hiçbir sebep yoktur. Bunu işleme bütün bir hafta sonu kaybedeceğiz bir Cuma akşamı aşağı giderse iş sunucusu Ancak potansiyel olarak sizin işlem süresi değerinde birkaç hafta (yalnız ana işleme sunucu göre) maliyet, yüksek erişilebilirlik ihtiyacı var . Bu yüksek kullanılabilirlik için bir yük dengeli çevreye verdiğiniz iş sunucusu koyarak düşünebilirsiniz.
Temel Kurulum
Bizim iş sunucusu için temel kurulum benim LIMP sunuculardan biri (ki Li nux, m ySql, P HP ise) aradığım ne oluşacaktır. Thea işçi çalıştıran kodu aslında işi kontrol sistemi veritabanları ile etkileşerek çalıştırabilirsiniz ne işler yoluna girecek. Daha sonra bir web hizmeti ve aslında el işleri yerine işçilerin zor işi kendileri yapmak zorunda yaratabilir, ama şimdi biz kullanmaya devam edeceğiz KISS prensibini (Basitleştirin, Stupid!).
Yani, üç oluşturmanızı sağlar mySQL işleri ile uğraşmak tablolar. Bunlar, `işler`, `jobRecords` ve `jobResults olacak`.
İşte kullanıyorum SQL Buddy için büyük bir küçük bir alternatif phpMyAdmin (: için diğerlerini görmek CentOS yüklemek için sırf onun kolay phpMyAdmin 10 Büyük alternatifler )
Bu tablo, 5 basit bir alandan oluşur
- id: Tek işi tanımlamak
- ad: Bir müşteri referansı veya diğer tanımlayıcıları herhangi bir sayı olabilir
- Durum: Bu iş nerede olduğunu bilmek gerekir, örneğin
- 0: Başlamadı
- 1: aldım
- 2: Tamamlandı
- started_by: iş yapmaya başladı kim? Bu tamamen ihtiyaç var ama bir güzel değil. Ben ağınızdaki IP adresi ile izleme işçilerin öneririm
- started_at: Ne zaman işçinin işe ne zaman başladınız? Zaman X miktar içinde tamamlamamış olan işleri takip ederek biz bir kez daha işi alıp başka bir işçi tarafından işleme başlamak gerekir biliyorum. İşçi işleme / stop herhangi sayısı nedenleri, elektrik kesintisi, crash, şebeke kaybı, vb için çevrimdışı gidebiliriz
Bu tablo istatistiklerini izleme, işi kaç işçi iş aldı görmek için, bir karşı ne kadar sürdüğünü görmek için bir bitiş saati sütunu için izin vermek için birkaç ek alanlar ile uzatılabilir ne kadar kolay olduğunu (tabi bu ihtiyaçları eğilimindedir 1), iş önceliği, liste uzayıp gidebilir. Daha karmaşık iş senaryolarda bu işçi (ve bu nedenle sadece uygun işçiler kullanın), hatta ne tür işçinin gerekli olacaktır erişimi gerekir ne kadar bellek belirtmek mümkün olacaktır.
Birkaç örnek işler ekleriz:
Sonraki tablo yeniden anlamak için oldukça basit, bu bizim işimiz kayıtları vardır. Bunlar, bir kolon `jobs_id` tarafından ana işler tablosu ile bağlantılıdır. Bu tablo oluşturan çok sizin işçilere sağlamak için gereken verilere bağlıdır, biz dört sütun var çok basit bir örnek yapmanızı sağlar:
- id: kaydın kimliği
- Adı: Kişi adı
- Adres: Kişinin adresi
- jobs_id: Bu kayıt bağlı olduğu iş kimliği
Üçüncü ve son tablosu bir tablo içerir sonuçlar, aynı kayıtlarımızdan tablo olarak telafi kadar sahiptir ve bazı sütun ilavesi ile kayıt tablosu bir parçası olabilir:
- job_record_id: iş tabloya sonucu Bağlantı
- Sonuç: Sonuç olarak veri
... Ve size iş denetimi için gereken herşey! (Bir çok temel düzeyde de olsa) Benim durumumda süreç benim veri bulunduğu başka bir tabloya işaret ediyorum, ama bu kadar kolay bir dosya olmuş olabilir, simülasyon kodu çalıştırmak için parametreler, siz söyleyin.
Bir iş seçme
Daha önce belirtildiği gibi, işçilerin artık bizim için bizim iş yönetimi yapacak, bu yüzden gerçekten tüm yapmanız gereken işlem gerektiren bir iş bulmak ve bilgi almak olduğunu. Bunu nasıl yapardın? Eh bizim işimiz seçim kriterleri almak ve iş peşinde, SQL aşağıdaki yaptım:
- Tam olarak ama bizim görevliden işaretli olmayan herhangi bir işle alın ve (bir tanımlayıcı ile __ ME__ yerine, en kolay IP adresi olacak) bunları sıfırlamak:
UPDATE `işler` SET `Durum` = 0 WHERE `durum` = 1 AND `started_by` = __ ME__;
- Bizim işimiz seçim kriterleri kullanarak, bir iş seçin ve bu işçi onunla ilgili olduğunu kontrol sistemi söyle:
UPDATE `işler` SET `Durum` = 1, `started_by` = __ ME__, `started_at` = ŞİMDİ () WHERE `durum` = 0 VEYA
(`Durum` = 1 AND `started_at`> DATE_SUB (NOW (), ARALIK X SAAT)) id `ARTAN` ORDER BY;
Hepimizin işler AWOL çökmesini veya giden bir işçinin durumunda çalıştırmak emin zaman X miktar sonuçları dönmediği kapma işleri tarafından.
- Sonraki kayıtlarını kendileri tarafından takip işleri ayrıntıları yakala:
`Işler` SELECT * FROM WHERE `started_by` = __ ME__ LIMIT 1;
Job_records `SELECT * FROM` WHERE `id` = __ JOBID__;
Iş tamamlandıktan sonra biz sonucu kayıt eklemek ve eksiksiz olarak iş işaretleyin. Işler istediğiniz zaman komut dosyası bazı sağlamlık için izin askıya alma / devam ettirebilirsiniz gibi hatırlıyorum. Bu görev çok akıllıca bir hareket olacak bir iş ve iş denetim sistemine geri kaydedilen sonuç sayısını kayıtların sayısını kontrol, iş denetim sisteminin güncellenmesi ile yarım askıya ki olabilir.
Ayrıca, bu işler gerçekten olması gereken bir SQL sorgusu çerçeve seçilir ve nasıl idare edilir gösterir iken soyutlayarak böylece iş kontrolü size bir web hizmeti, dosya tabanlı sistem kullanarak geçmek için karar verirseniz, XML , veya başka bir sistemlerinin numarası buna yukarıda kodu etkilemez.
İş Yapılandırma
Dikkate sonraki yönü iş boyutuna ve yapılandırma. Iş yapılandırma ile oynayarak biz mükemmel bir hızı arasındaki denge, süreç çoğaltma ve güvenilirlik grev olabilir. Bir çift OFA senaryoları atın:
- İşler 1 gün, her çalıştırmak için almak: Bu işçiler (zaman 2/3rds için güç% 10 hatırlamıyorum) her iş işlemek için 15 gün gerekiyor demektir. Bu açıkça akıllıca bir yapılandırma değildir, bu iş boyutuna şekilde çok büyük! İlk işçi AWOL (bir sonucu artı yeniden işleme zamanı iade etmediği pick up zamanı) gitmeli Bu bir iş işlenmiş olsun en az iki katı zaman alacaktı. İdeal olarak size ilk kayıp gitmeli, bir iş sürecini iki gün alacağını durumda tekrar ve en kötü geçiyor işler tutmak bu şekilde, kolayca her Cihaz uzun süre sonuna kadar temizlenmiş en az bir tam iş olurdu.
- İş çalıştırmak için 1 dakikanızı alacak: Bu işçilerin her iş çalıştırmak için yaklaşık 15 dakika sürer anlamına gelir. Bu başlangıçta idealdir görünebilir yaparken, öğle saatlerinde ek iş işleme kazanmak, kahve molaları, toplantılar, vs Bu senaryoda sistem diğer bölgelerinde yük koyar ve kendi sorunlarını tanıtır. Örneğin, öncelikle kurulum / işlem süresi oranı bu nedenle sistem verimliliğini kaybediyor, sağ aşağı gidecek. Ağ gün iş onların gün dong olan çeşitli işçi sinir bozucu personele sürekli akış iş bilgileri olacak. Ayrıca o çok ve düzenli bir çalışma küçük parçalar çok saçmak için olduğu gibi iş işleme sunucuda daha fazla zorlayacak gidiyoruz. İşinizi sunucu aşağı giderse Son olarak, bu durumda size iş sunucusu sorunlar yaşıyor olduğunu blissfully habersiz işleme devam verebilecek büyük işler tamamlanmamış ise çalışmaların büyük bir geri günlüğü oluşturmak için gidiyoruz.
Gerçekte, sizin ızgara kurulum için hiç kimse ideal bir yapılandırma olacak kadar böylece kullanılabilir kaynakları, iş türleri, iş gerçekleştirme süresi gereksinimleri, ağ yeteneği ve bağlıdır. Ancak bazı kurallar olacaktır:
- Boyut işler böylece her işçinin 15 saatlik bir süre (en uzun olasılıkla boş zaman süresi) en az 3-4 işler aracılığıyla alabilirsiniz
- Bu kurulum süresi işlem süresi (zihin yukarıdaki noktada rulman) ile karşılaştırıldığında oldukça önemsiz hale gelir böylece iş büyüklüğü ile oynayın.
- Bir iş bunu tamamlamak için bekliyoruz zaman çift miktarı (belki daha az) tam olmazsa onun gitti AWOL ve başka bir işçi ile işlemeye başlayacağı varsayılmaktadır. Bu, sizin (sonraki iş başarısız olursa muhtemelen daha uzun) tamamlamak için bir iş üç kez normal uzunluğa kadar beklemek zorunda kalabilirsiniz demektir. Bu zamanı azaltmak istiyorum, ama çok fazla bir düzenli olarak işleme görevleri çoğaltarak başlayabilir olarak azaltmak için dikkatli olabilir.
- İş dışında gereksinimleri mümkün olduğunca bağımsız olmalıdır. Iş sunucusu, örneğin, sadece her işin başında ve sonunda temasa geçilmelidir.
- Ağınızda bombalamak etmeyin, bu iki olumsuz etkileri olacaktır, sizin gündüz personeli bağlantıları size ızgara ölçeklendirebilirsiniz olarak daha da kötüye gidecek bir sorun aşımından yaşanan olabilir ağ sinir bozucu ve sorunları kullanarak bulabilirsiniz.
- Emin olun işler işçiler üzerinde çalıştırabilirsiniz. Işler çok bellek olursanız yoğun veya disk alanı yoğun işler durduruluyor başlayacak ve fark edeceksiniz tek şey hiçbir gerçek sebebi ile işlenen iş sayısı bir damladır.
İş ve gönderme Sonuçları
Bir işin sonuçları sunarken bu sonuçlar, mevcut işçi bir süre atıl olmuştur, özellikle eğer başka bir işçi tarafından teslim edilmemiş olması kontrol etmek önemlidir.
Sonuçları sonuç sayısını iş içindeki kayıtların sayısını eşleşen emin gönderildiğinde.
Daha önce de belirtildiği ve vurgulandığı üzerinde olamaz gibi, işi alma ve sonuç boyun hata toleransı oluşturmak. Işçilerin zamanların en uygunsuz anda askıya alma moduna geçer (ve muhtemelen) ve bunun için yiyecek ve içecek gerekiyor. Ayrıca bir kez daha sonuç verme uzakta soyutlayarak işinizi kontrol sistemi ile başa çıkmak çok daha kolay gelecek değişiklikler hitap yardımcı olacaktır.
Özet
Bu Bölümüa biz ne iş denetimi sunucusuna yapmak gerekiyor ve nasıl bir çok temel sistemi kurmak almak için baktım. Biz bir kontrol sisteminden iş ve en iyi nasıl çoğunu ofis ızgara sisteminin almak için işler yapılandırmak için almak için ele aldı. Bitirmek için, iş denetim sunucuya sonuçları geri göndererek bir paragraf ya da iki sunuldu.
- Bir iş, kontrol sunucu işlerini yönetir ve tüm iş birimlerinin tamamlanmış olmasını sağlar
- Seçmek / sonuç gönderme işinizi soyutlayarak biz çok sorun olmadan kontrol sunucu teknolojisi değiştirebilirsiniz
- Onlar ağ altyapısı üzerinde çok fazla baskı olmadan hızlı ve verimli çalışması emin olmak için iş yapılandırın ve düzenli bir şekilde işleme görevleri çoğaltma olmadan.
- Eğer rutin işlere hata toleransı ve hata checking inşa emin olun, işçilerin askıya alma ve sürdürme ve zamanların en rahatsız edici olabilir. Sonuçlar zaten başka bir işçi tarafından sunuldu olmadığını kontrol etmeyi unutmayın.
Bir dahaki sefere
Yılında part 3 bizim sanal işleme makine oluşturmak ve atıl zamanlı işçileri olmak için elimizden pencere makineleri kuracağım.