Giriş
, Biz her gün milyonlarca veri kayıtları işleme birçok toplu işlerde çalıştırmak ve her sayfanın etrafına oturur ve her gün birkaç saat hiçbir şey yapmadan tüm makineleri ile ilgili son zamanlarda düşünüyordum bir şirkette çalışıyorum . Sistemlerinin işlem gücünü artırmak amacıyla bu makineleri kullanmak eğer iyi olmaz mıydı? Bu yazı bir ofis istihdam potansiyel faydaları bakmak için gidiyorum ızgara sanallaştırılmış ortamlarda kullanarak.
Bölüm 1 genel bir sistem ve teknolojilerin yanı sıra, bir ofis ızgara oluşturmak istiyorsanız neden bazı potansiyel nedenleri anlatıldığı gibi kullanıyor olacak verdi .
İş Denetimi
Işlerde çalışan gidiyoruz Eğer bunları yönetmek için bir yol ihtiyacı için gidiyoruz. Iş kontrol sistemi (iş sunucuda) gerçekten iyi bir ofis ızgara bile çalıştırmak için denemeden önce düşünülmüş olması gerekiyor. Yani öncelikle iş kontrol sistemi için, görevleri nelerdir:
- Işçi talebi üzerine elini işler
- 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 olduğunu olun
- Işçiler için iş veri sağlamak, ya da en azından nereden onlara
Sistem aynı zamanda genişletilebilir, iş ızgara çözüm değerinde gördüğü gibi çeşitli işlerde çalıştırmak uzatılabilir tek bir durumda, şu an için çalışır bir çözüm olması gerekir. 'Genel işçi uzaklaşmaya rağmen Örneğin, (yani birkaç kod bazlar) işler, öncelikleri elde edebilir, birden fazla iş türü mevcut olabilir, sonunda, hatta (her tür iş için optimize edilmiş birçok farklı işçi makineleri çalıştırmak olabilir 'fikir). Her zaman sistemlerinin geliştirilmesi, gelecek hakkında düşünmeye çalışın, kısa vadeli bir vizyon, uzun vadeli hayal kırıklığı ve artan geliştirme süresini yol açabilir.
İş Sunucusu
Biz işimizi kontrol etmek için bir yere ihtiyaç gidiyoruz, bu vb bir IP adresi, ana bilgisayar adı, URL (iç DNS kullanarak), çünkü bu, sabit bir kaynak konumlandırıcı kılavuzunda tek sistem olması gerektiğini işçilerin iş aramak için bilmeniz gereken, işçilerin iş kontrol sistemi (işçi bulmak değil, iş denetim sistemi) bulmak gerekir.
Iş sunucu (temel sistem zaten) kendisi gerçekten karmaşık bir görevi yoktur, bu işler dışarı yandan, işlerin bir listesini saklamak sonuçları almak ve daha sonra daha sonra geri alma için bunları saklamak gerekiyor. Bu parçalar (gibi 'el işleri out') nasıl tanımlanır çok basit olabilir. Daha sonra biz bir yönetim arayüzü ekleyebilir, düzenleyebilir, silebilir, işlerini askıya ama bu egzersiz ötesinde içerecek şekilde sistem uzatabilirsiniz.
Sonra herhangi bir iş sunucusu ana işleme sunucu içinde çalışan bir sanal makine olamayacağı ondan çok fazla kaynak drenaj değildir hiçbir sebep yoktur. Iş sunucusu, bu işleme bütün bir hafta sonu kaybedeceğiz Cuma akşamı aşağı giderse ancak potansiyel değerinde işlem süresi bir kaç hafta (tek başına ana işleme sunucu ile kıyaslandığında) maliyet, yüksek kullanılabilirlik ihtiyacı var . Yüksek kullanılabilirlik için bir yük dengeli bir çevrede iş sunucusu koyarak düşünebilirsiniz.
Temel Kurulum
Bizim işimiz sunucu için temel kurulum benim Limp sunucuları (Li nux m ySql, P HP) ne aradığım oluşacaktır. Thea işçi çalıştıran kod aslında iş kontrol sistemi, veritabanları ile etkileşerek çalıştırabilirsiniz işlerde çalışacak. Daha sonra biz işçilerin, bu zor işi kendileri yapmak yerine bir web hizmeti ve aslında bir yandan işlerinizi oluşturmak olabilir, ama şimdi biz kullanmaya devam edeceğiz KISS prensibini (Stupid, Basit tutun! ).
Yani, üç oluşturmanızı sağlar mySQL işleri ile uğraşmak için tabloları. Bunlar `işler`, `jobRecords` ve `jobResults` olacaktır.
İşte kullanıyorum SQL Buddy büyük küçük bir alternatif phpMyAdmin en kolay (diğerlerini görmek için CentOS üzerinde yüklemek için sırf phpMyAdmin 10 Büyük alternatifleri )
Bu tablo, 5 basit alanlar oluşur.
- id: Benzersiz iş tanımlamak
- Adı: bir istemci başvuru veya herhangi bir sayı olabilir diğer tanımlayıcılar
- Durum: iş, örneğin nerede olduğunu bilmek gerekir
- : 0 başlamış değil .
- 1: seslerden
- 2: Tamamlandı
- started_by: iş yapmaya başladı kim? Bu tamamen gerekli değildir ama olması güzel bir. Ağınızdaki IP adresi ile izleme işçilerin öneririm
- started_at: işçi iş ne zaman başladınız? Biz tekrar iş almak ve başka bir işçi tarafından işleme başlamak için gereken zaman X miktar içinde tamamlanması işleri takip ederek. İşçi işleme / stop herhangi bir nedenden, elektrik kesintisi, crash, ağ kaybı, vb çevrimdışı
Bu tablo istatistiklerini takip etmek eğilimindedir kaç işçi (tabi bu ihtiyaçlarını iş aldı görmek için ne kadar iş aldı, bir sayaç görmek için bir bitiş saati sütunu izin vermek için birkaç ek alanlar ile uzatılabilir nasıl kolaydır 1), iş önceliği, liste uzayıp gidebilir. Daha karmaşık bir iş senaryoları işçi (ve bu nedenle sadece uygun işçiler), ya da ne tür bir işçinin gerekli olacaktır erişim gerekir ne kadar bellek belirtmek için mümkün olacaktır.
Birkaç örnek işleri eklemenizi sağlar:
Sonraki tabloyu yeniden anlamak için oldukça basit, bu, bizim işimiz kayıtları. Onlar ana işleri tabloya bir sütun `jobs_id` bağlantılıdır. Bu tablonun makyaj işçilere sağlamak için gereksinim duyduğunuz verileri çok bağlıdır, biz dört sütunlu, çok basit bir örnek yapmanıza olanak sağlar:
- id: kayıt ID
- Adı: Kişinin adı
- adresi: Kişi adres
- jobs_id: Bu kaydın bağlantılı olduğunu iş kimliği
Üçüncü ve final masasına bir sonuç tablosu oluşur, aynı kayıtları tablo olarak çok şey var ve bazı sütunlar ek kayıtları tablonun parçası olabilir:
- job_record_id: iş tablo sonucu Linki
- Sonuç: Sonuç olarak veri
... Ve bu iş denetimi için gerekli tüm (Bir çok temel düzeyde de olsa) Benim durumumda işlemek için benim veri bulunan başka bir tabloya işaret değilim, ama bu kadar kolay bir dosya olabilir, simülasyon kodu çalıştırmak için parametreleri, bunun adı.
Bir iş seçilmesi
Daha önce de belirtildiği gibi, işçilerin artık bizim için iş yönetimi yapacak, bu nedenle biz gerçekten yapmanız gereken tek şey işlenmesi gereken bir iş bulmak ve bilgi almak. Bunu nasıl yaparsın? Peki bizim işimiz seçim kriterleri seçmek ve SQL aşağıdaki yaptım, iş aramak:
- Ama bizim işçi eksiksiz olarak işaretlenir ve bunları sıfırlamak (bir tanımlayıcı ile __ME__ yerine, en kolay IP adresi olacaktır) herhangi bir işle atın:
UPDATE `işler` SET `durum` = 0 WHERE `durum` = 1 VE `started_by` = __ME__;
- Bizim işimiz seçim kriterleri kullanarak, bir işi seçin ve kontrol sistemi, bu işçi ile ilgili olduğunu söyler:
UPDATE `işler` `durum` = 1, `started_by` = __ME__, `started_at` = ŞİMDİ () WHERE `durum` = 0 VEYA SET
(`Durum` = 1 VE `started_at`> DATE_SUB (NOW (), ARALIĞI X SAAT)) ORDER BY `id` ASC;
X miktar tüm işleri AWOL çökmesini veya giden bir işçinin olay çalıştırmak olduğundan emin olun zaman sonuç dönmedi kapma işler.
- Sonraki kayıtlarını kendileri tarafından takip edilen işler detayları kapmak:
SELECT * `işler` DAN WHERE `started_by` = __ME__ LIMIT 1;
SELECT * `job_records` DAN WHERE `id` = __JOBID__;
Işin tamamlanmasından sonra bizim sonuç kayıt eklemek ve iş tamamlandı olarak işaretlemek. Işler her zaman komut dosyası bazı sağlamlık için izin askıya alma / devam ettirmek gibi unutmayın. Bu görev, bir iş kayıt sayısını kontrol etmek ve iş kontrol sistemi geri kaydedilen sonuçlar sayısı akıllıca bir hareket olacaktır, iş denetim sisteminin güncelleştirilmesi yoluyla yarım askıya olabilir.
Buna ek olarak, bu işler gerçekten olması gereken bir SQL sorgusu çerçeve seçilen ve yönetilen nasıl gösterir iken soyutlayarak iş kontrol böylece bir dosya tabanlı sistem, bir web servisi kullanarak geçmek için karar verirseniz, XML , veya başka herhangi bir sistemlerin sayısı yukarıdaki kod etkilemez.
İş Yapılandırma
Dikkate alınması gereken bir sonraki boy iş boyutuna ve yapılandırma. Iş yapılandırma ile oynayarak hızı, işlem çoğaltma ve güvenilirlik arasında mükemmel bir denge. Bir çift OFA senaryoları ele alalım:
- İş her çalıştırmak için 1 gün sürer: Bu işçi (% 10 zaman 2/3rds için güç hatırlayın), her iş işlemek için 15 gün gerektiğini anlamına gelir. Bu açıkça akıllıca bir yapılandırma değildir, iş boyutuna yol çok büyük! Ilk işçi AWOL (sonucu artı yeniden işleme zaman iade edilmez olduğunu pick up zamanı) gitmeli işlenmiş bir iş elde etmek için en az iki katı zaman alacaktı. Ideal ilk eksik gitmeli süreç iki gün alacağını bu şekilde bir iş içinde geçiyor ve en kötü durumda işler tutmak, her uzun bir bekleme dönemi sonuna kadar kolayca temizlenir, en az bir tam iş olurdu.
- İş çalıştırmak için 1 dakikanızı ayırın: Bu her iş için işçi çalıştırmak için yaklaşık 15 dakika sürebilir. Bu başlangıçta ideal görünebilir iken, öğle süre içinde, ek iş işleme kazanmak, kahve molaları, toplantılar, vs Bu senaryoda sisteminin diğer bölgelerinde yük koyar ve kendi sorunları tanıtır. Örneğin, ilk kurulum / işleme oranı bu nedenle sistem verimliliğini kaybediyor, sağ aşağı gidecek. Ağınız gün çalışmak için gün dong çeşitli işçi sinir bozucu personel için sürekli iş bilgi akışı olacak. Ayrıca, çok ve düzenli bir çalışma küçük parçalar halinde çok sayıda çanak olarak iş işleme sunucu üzerinde daha fazla baskı için gidiyoruz. Son olarak, iş sunucu aşağı giderse, bu durumda daha büyük işler ise tamamlanmamış iş büyük bir geri günlüğü oluşturmak için gidiyoruz iş sunucusu sorunlar yaşıyor olduğunu blissfully habersiz işleme devam olabilir.
Gerçekte kimsenin şebeke kurulumu için ideal bir yapılandırma olacak, mevcut kaynakları, iş, iş dönüş zamanı gerekleri, ağ yeteneği ve türleri çok bağlıdır. Ancak bazı kurallar olacaktır:
- Size işleri dolayısıyla her işçinin 15 saatlik bir süre içinde en az 3-4 işleri (uzun muhtemel boşta süre) aracılığıyla alabilirsiniz
- Bu kurulum süresi, işlem süresi (akılda yukarıdaki noktaya taşıyan) ile karşılaştırıldığında oldukça önemsiz hale gelir, böylece iş büyüklüğü ile oynayın.
- Bir işi tamamlamak için bekliyoruz zaman iki katına (belki daha az) tam değilse gitti AWOL ve başka bir işçi ile işleme başlar varsayıyorum. Bu tamamlamak için (sonraki iş başarısız olursa muhtemelen uzun) bir iş için üç kez normal uzunluğu kadar beklemek zorunda kalabilirsiniz demektir. Siz bu süreyi azaltmak, ancak çok düzenli bir şekilde işleme görevleri çoğaltarak başlayabilir azaltmak için dikkatli olmak isteyebilirsiniz.
- Işler dışında gereksinimleri mümkün olduğunca bağımsız olmalıdır. Iş sunucu, örneğin, her işin başında ve sonunda sadece temas olmalıdır.
- Ağınıza doyurabilecek etmeyin, bu iki olumsuz etkileri olacak, gündüz personel ağ sinir bozucu ve bağlantıları sadece size ızgara ölçek olarak daha kötüye gidecek bir sorun aşımına uğruyor yaşanan sorunlar olabilir bulacaksınız.
- Emin olun işler işçiler üzerinde çalıştırabilirsiniz. Işler çok bellek, yoğun bir şekilde ya da disk alanı yoğun işler hale gelirse iptal başlayacak ve farkedeceğiniz tek şey, hiçbir gerçek sebebi ile işlenen işlerin sayısı bir damla.
İş gönderme Sonuçlar
Bir iş sonuçları gönderirken, bu sonuçlar mevcut işçi, bir süre hareketsiz olmuştur, özellikle eğer, başka bir işçi tarafından sunulmuş değil kontrol etmek için önemlidir.
Sonuçları gönderildiğinde sonuç sayısı, iş içindeki kayıtların sayısını eşleştiğinden emin olun.
Daha önce de belirtildiği gibi, iş alma ve sonuçları teslim hata toleransı inşa vurguladı üzerinde olamaz. Işçiler (ve büyük olasılıkla olacak) en elverişsiz kez askıya alma moduna gidin ve bu ihtiyaçları için yiyecek ve içecek için. Ayrıca yine sonuç teslim uzak soyutlayarak gelecek değişiklikler ile başa çıkmak için çok daha kolay iş kontrol sistemi karşılamak yardımcı olacaktır.
Özet
Bu Bölümüa biz bir iş kontrol sunucusu ne yapması gerektiğini baktım ve çok temel bir sistem kurmak nasıl. Biz kontrol sistemi, iş ve en iyi nasıl işler bizim en ofisinizde ızgara sistemi yapılandırmak için almak nasıl tartışıldı. Bitirmek için, bir paragraf ya da iki iş denetimi sunucusu sonuçları geri göndererek sunuldu.
- Bir iş kontrol sunucusu, tüm iş birimlerinin iş ve garanti yönetir
- Select / sonuçlar teslim işinizi soyutlayarak çok fazla sorun olmadan kontrol sunucu teknoloji değiştirebilirsiniz
- Ağ altyapısı üzerinde çok fazla baskı koyarak olmadan hızlı ve verimli bir şekilde işletilmesi olduğunu sağlamak için işler ve düzenli bir şekilde işleme görevleri çoğaltma yapılandırma.
- Rutinleri içine hata toleransı ve hata checking inşa emin olun, işçiler askıya alma ve devam ve kez en rahatsız edici olabilir. Zaten başka bir işçi tarafından sunulmuştur varsa kontrol etmeyi unutmayın.
Bir dahaki sefere
Part 3 sanal işleme makine oluşturmak ve boşta zamanlı işçileri olmak için windows makinalarda kurmak.