2014-09-06 30 views
5

Geçenlerde bağlantıları, oturumları, tüketiciler etrafında JMS, Bahar (ve TIBCO EMS) ile ilgili en iyi uygulamalar çok şey okudum & üreticileri Çoklu yapım oturumlarıyla tek bir JMS bağlantısı ne zaman bir darboğaz olmaya başlar?

Bahar dünyası içinde çalışan, hakim olan görüş olarak görünmektedir

    Tüketen/giren akışlar için
  • - Bir çok tüketici/iplik ile AbstractMessageListenerContainer kullanın. için
  • akışları üretme/yayınlama - aracıya tek bir bağlantıyı sürdürmek için CachingConnectionFactory'u ve daha sonra oturumları ve üreticileri önbelleğe almak için CachingConnectionFactory kullanın.

Üretme/yayımlama için, benim (geniş) sunucu uygulamasının şu anda yaptığı şey, daha önce yayınladığı her bir ileti için yeni bir bağlantı/oturum/yapımcı oluşturmasıdır (kötü!). JmsTemplate altında ham bağlantı fabrikasının. Eski davranış, bazen yüksek zirve dönemlerinde kısa bir süre içinde komisyoncu üzerinde 1.000'lerce bağlantı oluşturulup kapatılmakta ve sonuç olarak soket/dosya tanıtıcı limitlerine çarpmaktadır. Ancak, bu modele geçerken, performans sınırlamalarının/değerlendirmelerin, aracıya tek bir TCP bağlantısı kullanılarak ne olduğunu anlamada sorun yaşıyorum. Ben JMS sağlayıcı bunun çok kanallı bir şekilde vb kullanılabilir sağlaması bekleniyor anlıyoruz - ama pratik bir bakış açısı

  • gelen bu
  • bir dereceye kadar JMS sağlayıcı gerekiyor sadece tek TCP bağlantısı var onlar bir araya sokulmuş karmakarışık sona kalmamak koordine kesinlikle bu belirli ağ ile tek bağlantısı
  • kullanarak ipler/oturumlar arasında bazı çekişme içerir
  • iç protokolde bazı chunking sahip olsa bile, borunun aşağı yazıyor anlambilim (komisyoncunun istikrarsız verimi için yüksek gecikme?) kesinlikle tek bir bağlantı ideal olmaz mı? Ben doğru yolda

    • Ben kapalı burada taban ve alttaki bağlantıları çalışması ve JMS sağlayıcı tarafından paylaşılır nasıl yanlış anlama muyum üzerinde biraz değilim varsayımı üzerine

  • ?
  • herhangi bir çekişme daha fazla bağlantıya sahip olmanın yol açtığı bir sorun değil ya da yalnızca çekişmeyi aracıya taşıyor mu?
  • Paylaşabilecekleri herhangi bir sınırın aşılması konusunda pratik bir deneyimi var mı? Belirli bir mesaj veya ağ iş hacmiyle ya da hatta paralel bir bağlantıyı paylaşan iş parçacığı/oturumların sayısı neden olabilir
  • Küçük iletiler yazan diğer oturumları engelleyen çok büyük mesajlar yazan oturumlar hakkında tek bir bağlantı senaryosunda endişelenmeniz gerekir mi?

Konuyla ilgili daha fazla bilgi edinmek veya diğer brokerlerle bile deneyim kazanmak için herhangi bir düşünceyi veya göstericiyi takdir ederdim.

darboğaz düşünürken, zihin iki gerçekler tutmak

cevap

3

:

  1. TCP bir akış protokolü sağlayıcıları TCP tabanlı protokolünü TIBCO EMS gelen eylemlerin

  2. sürü kullanmak neredeyse tüm JMS olduğunu EMS sunucusuna istemci istek/cevap şeklinde. Örneğin, bir mesaj yayınladığınızda/bir mesaj aldığınızı/bir işlem oturumu yaptığınızı bildirdiğinizde, başlık altında neler olup bittiği, bazı TCP paketlerinin istemciden gönderilmesi ve sunucunun bazı paketlerle de yanıt vermesidir. TCP akışının doğası gereği, bu eylemler aynı bağlantıdan başlatılırsa serileştirilmeleri gerekir. Aksi halde, bir ileti dizisinden bir ileti yayınladığınız ve bir başka ileti dizisinden tam olarak aynı zamanda bir oturum gerçekleştirdiğinizde, paketlerin tel üzerinde karıştırılacak ve sunucunun doğru mesajı paketlerden yorumlayabileceği bir yol yoktur.

Kendi deneyim birden bağlantılar daima çıkış tek gerçekleştirmek şöyledir: [Not senkronizasyon EMS istemci kütüphanesi seviyesinden yapılır, dolayısıyla kullanıcının birden ipler/oturum/tüketiciler/yapımcılarla bir bağlantısını paylaşmak için çekinmeyin] bağ. Kayıp bir ağ durumunda, birden çok bağlantıyı kullanmak kesinlikle bir zorunluluktur. En iyi ağ koşulu altında, birden çok bağlantıyla, tek bir istemci, istemci ve sunucu arasındaki ağ bant genişliğini neredeyse doyurabilir.

Gerçekten de, müşterilerinizin performans gereksinimlerinin ne olduğuna bağlı olarak, iyi bir ağ altında tek bir bağlantı zaten yeterince iyi performans sağlayabilir.

+0

Teşekkür sistem kaynağı sınırlarını ulaşana kadar

Sen iyi. Tecrübemde, birden çok bağlantı genellikle tek bir bağlantıyı kaybolan veya yüksek gecikmeli ağ durumunda veya tek bir "iletiyi" işlemek için istek/bekleme/istek/beklemeyi içeren bir uygulama katmanı protokolüyle önemli ölçüde geride bırakacaktır; yerine * her zaman * olmak. Sanırım aldığım şey, Tibco tarafında hiçbir tavsiyede bulunmamam; ve genel JMS'de okuduğum tüm şeyler (ve aslında ActiveMQ) sadece tek bir bağlantı kullanacak gibi görünüyor; sınırlamaları hakkında çok fazla tartışma olmadan. – Chad

0

nihayet sen 100threads kullandığınız anlama geldiğini bir bağlantısı ve 100 oturumları kullansanız bile, o * 10 seans = 100threads 10connections kullanarak aynıdır. Eğer cevabınız için