2015-06-11 27 views
5

Yay yığınında çoklu iş parçacığı ve bölümleme arasındaki farkı anlayamıyorum. Uygulama elbette farklı: Partisyonlamada bölümleri hazırlamanız ve sonra işlemeniz gerekiyor. Farkın ne olduğunu ve darboğazın öğe-işlemci olduğunda işlenmesinin daha verimli bir yol olduğunu bilmek istiyorum.Çoklu yayma ve bölümleme arasında yay parti farklılığı

cevap

8

TL;
Her iki yaklaşım da, darboğazın işlemcide olduğunda yardımcı olmak için tasarlanmamıştır. Bir işlemciden aynı anda birden fazla öğeye sahip olmakla bazı kazançlar göreceksiniz, ancak işaret ettiğin seçeneklerin her ikisi de G/Ç bağlı olan süreçlerde kullanıldığında tam faydaları elde eder. AsyncItemProcessor/AsyncItemWriter, daha iyi bir seçenek olabilir. Bahar Toplu Ölçeklenebilirlik

Bakış
Bahar Toplu iş ölçekleme için beş seçenek vardır: Uzaktan chunking

  1. iş parçacıklı adım
  2. Paralel adımlar
  3. Bölümleme
  4. AsyncItemProcessor/AsyncItemWriter

Her birinin kendine özgü avantajları ve dezavantajları vardır. birbirlerinin tek ele alalım:

iş parçacıklı adım
bir çok iş parçacıklı adım tek adım atar ve ayrı iş parçacığı üzerinde o adımda içindeki her öbek yürütür. Bu, toplu bileşenlerin (okuyucu, yazar, vb.) Her birinin aynı örneklerinin iş parçacıkları boyunca paylaşıldığı anlamına gelir. Bu, çoğu durumda yeniden başlatılabilirlik maliyetindeki adımla bazı paralellikler ekleyerek performansı artırabilir. Yeniden başlatılabilirliği feda edersiniz, çünkü çoğu durumda, yeniden başlatma özelliği okuyucu/yazar/etc içinde tutulan duruma dayanır. Bu durumu güncelleyen birden fazla iş parçacığı ile, yeniden başlatma için geçersiz ve işe yaramaz hale gelir. Bu nedenle, genellikle tek tek bileşenlerde kaydetme durumunu kapatmanız ve yeniden başlatılabilir bayrağı işin üzerine yanlış olarak ayarlamanız gerekir.

paralel adım
paralel adımlar ile bölünerek elde edilir. İş parçacığıyla paralel olarak birden çok bağımsız adımı uygulamanıza izin verir. Bu yeniden başlatılabilirliği feda etmez, ancak tek bir adım veya iş mantığının performansını geliştirmeye yardımcı olmaz.

Bölümleme
Bölümleme ana aşamasını ve daha küçük parçalar (denilen bölüm) içine önceden veri bölme, ve daha sonra olan köle bölümlerinde bağımsız olarak çalışır. Spring Batch'de hem master hem de her slave bağımsız bir adımdır, böylece yeniden üretilebilirlikten ödün vermeden tek bir adımda paralellik avantajlarını elde edebilirsiniz. Bölümleme ayrıca, kölelerin yerel olması gerekmediğinden (uzak köle ile iletişim kurmak için çeşitli iletişim mekanizmalarını kullanabilirsiniz) tek bir JVM'nin ötesine ölçekleme olanağı sağlar.

Bölümlendirme ile ilgili önemli bir not, ana ve bağımlı arasındaki tek iletişimin, verilerin kendisinin değil, verilerin açıklaması olmasıdır.Örneğin, master slave1'e 1-100 kayıtlarını işlemek, slave2 kayıtlarını 101-200, vb. Işlemek için söyleyebilir. Master gerçek verileri göndermez, yalnızca söz konusu veriyi almak için gerekli olan bilgiyi elde etmek için köle . Bu nedenle, veriler slave işlemlerine yerel olmalı ve master her yerde bulunabilir. Uzaktan
Uzaktan chunking chunking

işlemi ölçek ve JVM'lerle genelinde yazma mantığını isteğe izin verir. Bu kullanım durumunda, master verileri okur ve ardından telin üzerinden işlendiği kölelere gönderir ve ardından ya köle üzerine yerel olarak yazılır ya da master'a yerel yazmak için master'a geri gönderilir.

bölme ve uzak Chunking arasındaki önemli bir fark, bunun yerine kablo üzerinden geçen bir açıklama arasında, uzak bir parçalama tel üzerinden gerçek veri gönderir olmasıdır. Dolayısıyla, 1-100 işlem kayıtlarını söyleyen tek bir paket yerine, uzak yığınlama 1-100 arasındaki gerçek kayıtları gönderecektir. Bu, bir adımın G/Ç profili üzerinde büyük bir etkiye sahip olabilir, ancak işlemci yeterli bir darboğazsa, bu yararlı olabilir.

AsyncItemProcessor/AsyncItemWriter
Yay Toplu -ölçme- için son seçenek AsyncItemProcessor/AsycnItemWriter kombinasyonudur. Bu durumda, AsyncItemProcessor, ItemProcessor uygulamanızı sarar ve uygulamanızın çağrısını ayrı bir iş parçacığında yürütür. Daha sonra AsyncItemProcessor, numaralı iletiye iletilen ve ItemWriter temsilcisine iletilen bir Future döndürür. Çünkü nasıl verinin doğası

Bu seçenekte akar (ItemWriter içine kadar biz ItemProcessor aramanın sonucunu bilmiyorum beri), belirli bir dinleyici senaryoları desteklenmez, ancak genel olarak, için yararlı bir araç sağlayabilir Yeniden başlatılabilirlikten ödün vermeden tek bir JVM'de sadece ItemProcessor mantığını paralelleştirerek.

+0

Cevabınız için çok aydınlatıcı oldu. Çalıştığım projede maalesef, seçebileceğiniz sınırlı seçenekler var. Hala AsyncItemProcessor/AsyncItemWriter'e sahip olmayan Spring-batch 2'yi kullanıyoruz. – mettok

+0

Batch Spring 2 için, Spring Batch Admin'de var. –

+0

Bölümleme ile ilgili bir sorum var. Master ve köleler farklı JVM ise. Mesajlaşmanın yanı sıra ne tür iletişim yöntemleri kullanabiliriz? (Mesajlaşma için altyapımız yok) – mettok