2013-04-30 24 views
13

Hizmet odaklı mimarileri araştırmaya başladım ve iletiler arasındaki işlemleri en iyi nasıl yapılandırabileceğimi merak ediyorum. Hizmetler ve/veya pubsub otobüsü arasında doğrudan HTTP çağrıları iki yaygın yaklaşımdır. Ne tür durumlarda diğerlerinden daha avantajlıdır? Pubsub'un daha fazla ayrıştırılmış hizmete nasıl yol açacağını görebiliyorum ama aynı zamanda bir mesajın yolunu sistemden takip etmenin çok daha zor olduğu izlenimini ediniyorum.Bir mikro hizmet mimarisinde mesajlaşma

Bu konuda daha fazla bilgi edinmek için bazı kaynaklar nelerdir? Bu konuda özellikle çok küçük, "el-haddelenmiş" hizmetler (yani Ruby/Sinatra, Düğüm/Express, Redis pubsub, vb.) Bağlamında merak ettim. .. aynı prensiplerin geçerli olduğundan eminim.

Teşekkürler!

cevap

15

Size iki sent veriyorum.

but I also get the impression that it becomes much harder to track a message's path though the system.

Sen SOA ayırmasının bir hayli sağlayan AKA (2.0 SOA) mimarilerinde bu doğru PubSub, ama bu durumda tam olarak ne olduğundan Splunk gibi araçlar bir yardımcı mümkün olsa da, aynı zamanda, bir bedel ödemek çok. En çok kullanılan .net olay soa çerçeveler (NServiceBus, Katır ve MassTransit) onlar http aramaları kullanmayın, ama evet bir microservices mimarisini uygulayabilir ve olarak http kullanabilir bakarsak Aslında

seems that direct HTTP calls between services and/or a pubsub bus are two common approaches

iletişim protokolü.

En iyi kurumsal mimari konseptlerinden bazılarını uygulamaya başlamak istediğinizi anlıyorum, ancak daha basit, ancak daha güçlü temellerle başlamanızı daha iyi söyleyebilirim. Gerçekten ihtiyacınız olup olmadığını bilmeden, soa'ya atlamak için bir nokta yoktur. Yeni bir sisteme başlamış olsaydım ve DDD ve SOA ilkelerini düzgün bir şekilde uyarladığımdan emin olmak istediğimde, alanım için hizmetleri tanımlayarak işe başlarım. Yani 3 hizmetiniz olduğunu varsayalım, bu hizmetlerin her biri için kamu sözleşmelerini ilan ederek başlayabilir, özel bir şeye ihtiyacınız yoktur, WCF/ASP.NET Web API'sini bir senkronizasyon REST API'si ile başlatabilirsiniz. Daha sonra, her bir hizmetin kendi veritabanını alacağından emin olursunuz, çünkü düşük bağlantıyı hedefliyorsunuz ve daha sonra WCF/ASP.NET Web API'sini kullanarak bir API katmanı (dış dünyaya görülebilir) oluşturabiliyorsunuz. çünkü mikro servisleriniz doğrudan dış dünyaya maruz bırakılmamalıdır. Bu noktada, tasarım, mimari gibi basit bir SOA'ya sahip olacaksınız, ancak iyi tanımlanmış kontratlara sahip olacağınız için, servislerinize uyumsuzluk özellikleri ekleyerek servislerinizi genişletebilirsiniz ve bunun için bir mesaj kuyruğu ekleyerek başlayabilirsiniz. Hizmetlerin her birine. Biliyorsunuz, karmaşık bir sistemle başlamanıza gerek yok, temel, iyi tanımlanmış bir şeyle başlayın, ki bunu yapmanız gerekiyorsa ölçeklemenize izin veriyor.

Tanımladığım sistem, istediğiniz durumlarda kolayca olayları destekleyecek şekilde genişletilebilir ve bu noktada zaten senkronize edilmiş mesajlar, sisteme asyn mesajlarını eklemekten vazgeçmez.

Fakat bunlar sadece iki sent'im.

İlgili konular