2011-06-09 27 views
5

Şirketin iç sisteminin arka ucu karmaşıklaşıyor ve büyük bir monolitik sistem yerine SOA tarzı mimarlık yapma fikrini araştırmak istiyorum. Nereden başlamalıyım?SOA stili mimarisi?

SOA'ya yeni geliyorum. Bu, bireysel CF örnekleri anlamına mı geliyor ve uzak web servis çağrıları ile birbirleriyle konuşuyorlar? Biriyle nasıl başa çıkabilirdi ... hata işleme ve sunucu kesintisi nasıl? Eğer her parçası ColdFusion'da ise ESB mimariye yararlı olur mu?

DB katmanı nasıl olur? Büyük bir DB'yi paylaşmalılar mı, yoksa işleri kendi yollarıyla mı saklamalılar?

teşekkür ederiz

Orada bir "doğru" cevabı ancak çekirdek kavramı servis katmanı ise bu yüzden emin değilim SOA farklı set up bir sürü tanımlamak için kullanılan terim duydum

cevap

1

İlk olarak, ne yapmaya çalışıyorsunuz? SOA, nispeten kolay bir şekilde değişmesi ve yeni bir programlayıcıya erişmesi gereken sistemler için yararlıdır. Öte yandan, bir performans tradeoffuna sahip olursunuz çünkü ayrıştırarak kalıcılığa son verirsiniz - böylece etkileşimi veritabanında değil, uygulama sunucusunda gerçekleşir. Genellikle bu performans trajmanı bir sorun değildir, ancak yüksek bir işlem sistemi üzerinde çalışıyorsanız, veritabanına bazı algoritmalar koyarak ve bunların hizmetlerinizi bozduğundan ödün vermeniz gerekebilir.

Yani artılarını istiyor ve eksileri ile özel olarak ilgili değildir eğer, konuyla ilgili bazı uygulanabilir kitaplar okuyarak başlayın:

Ne doğru eğilim istediğiniz ilişkiler service locator kabın içinden dependency injection aracılığıyla yönetilen üst düzey hizmet nesnelerle bir tasarımdır. ColdFusion'ın durumunda ColdSpring bir örnektir. Bu daha sonra object mocking için izin verir, böylece kolayca birim testi yapabilirsiniz. Örneğin, hizmetler diğer sunucularda yaşıyorsa, yerel olarak bağımlılık olarak aktarılacak proxy'leri olan hizmet nesneleri var. Test için bu vekiller alay edilmez, böylece uzak sunucu ile konuşmak zorunda kalmazlar. Hata işleme ve sunucu kesintileriyle ilgili olarak

. Öncelikle, yerel sunucunun kontrolü dışındaki konularla uğraşmaktan endişe duyuyorsunuz. Bu, bir hizmet proxy nesnesinin kullanılmasının başka bir nedenidir. Bu amaç, zaman aşımları, kötü tepki değerleri ve benzeri ile ilgilenmekle sorumludur - etkin bir şekilde bir anti corruption layer.

veritabanı paylaşımı gelince, benim hizmet nesne ilişkilerini yansıtacak şekilde benim tablo ilişkileri inşa edecek. Dolayısıyla, eğer söz konusu tabloların sadece hizmetlerle ilgili veriye sahip olması durumunda, yabancı anahtar kısıtlamalarını zorlamam. Yani aynı veritabanında olsalar da, önemli değil. Bu, başka yerlerde bu hizmetleri ve veritabanı tablolarını kodda nispeten az değişiklik olan bir yere taşımanıza olanak sağlar.

0

. Büyük faydası, DB katmanı hakkındaki son sorunuzun cevabı - yukarıdakilerin tümü. Hizmet katmanında depolama/persiteyi işlemek için mantık oluşturulduktan ve uygulamalar sadece bu katmana çağrıldıktan sonra, belirli verileri diğer sunuculara taşımak veya gerektiğinde bunları bir araya getirmek çok daha kolay hale gelir. Hatta bazı hizmetler ile bile, genellikle service facade olarak adlandırılan diğer hizmetleri arayarak sonlanabilir.

"Gerçek yaşam" örneği için. Adlar, adresler, e-postalar vb. Sakladığınız bazı türlerde bir müşteri veritabanınız olduğunu varsayalım. Bunu, bir kişi hakkında bilgi parçaları alabileceğiniz bir web hizmeti olarak gösterirsiniz. Bir noktada bu ev demlemek sistemi büyümek ve tam gelişmiş bir CRM sistemi lisans karar verin. Müşteri ile ilgili tüm işlemleri bir web hizmetinde ayırdığınız için, yalnızca bu hizmeti veritabanınızın yerine CRM yazılımından almak için güncellemeniz gerekir. Bu gerçekten hizmet mimarilerinin gerçekten parladığı yerdir.

Hata işleme ile ilgili olarak, uygulamalarınız ve hizmetleriniz CF'de yazılıyorsa, hem (hem de tüm) katmanlarda günlüğe kaydetme ve hata işleme gerçekleştirmiş olursunuz. Açıkçası, bir servis sunucusundaki bir sunucu kesintisi, üstündeki her şeyi etkileyeceğinden oldukça ciddi olacak. Zaman aşımına uğradığı veya güneye çıkmaya başladığı durumlarda servis masasına e-posta gönderen bir monitör kullanıyoruz. İstemci uygulamalarında bulduğum anahtar, web servis çağrıları için makul bir zaman aşımı ayarlanmasıdır. Daha önce hiç bir ESB kullanmamıştım ama tahmin ettiğim şey, gerçek çağrıları yönetmek için size başka bir soyutlama katmanı sağlayacaktır. Bu zaman aşımları ve benzerleri ile yardımcı olabilir ama gerçekten söyleyemem.

+1

Ve ESB genellikle servis odaklı bir mimaride kritik bir bileşen olarak görüntülenir. Arabuluculuk ve yönlendirme görevlerini yürütmek için bir ESB'siz, sahip olduğunuz tek şey web servislerini kullanan bir noktadan noktaya mimaridir. –

+0

@ Brooks-Bilson ama "web servislerini kullanan noktadan nokta mimarisi" zaten bir SOA mimarisi olarak nitelendirilebilir, değil mi? – Henry