Neden bir kütüphane yerine hizmetleri (REST / SOAP) kullanmalı?


22

Diyelim ki uygulamalarınızı hizmetlere bölmek. SOA yaklaşımını benimsemek için iyi bir neden var mı, sadece ihtiyaç duyan uygulamalar tarafından yüklenebilecek bir kütüphane API'si oluşturmak için.


6
Hey Nate, Stevey'nin Google Platformları Rant'ı okuyun , platform (hizmetler) ve ürün (kütüphane) sorusu hakkında harika bilgiler veriyor ...
yannis

Yanıtlar:


11

Aradaki fark, ikisi arasında ince olabilir. Örneğin, .NET dünyasında, son kullanıcıya monolitik gibi hissedecek ve aynı makinede çalışacak, ancak içeride WCF servislerine ayrılacak bir uygulamanız olabilir. Ayrıca kütüphanelerin güçlü bir şekilde birbirine bağlı olmadığı (eklentiler / eklentiler) ve sadece birbirleriyle konuşurken bir protokolü takip eden mimarilere sahip olabilirsiniz.

Bu aracı durumlar hakkında konuşmaktan kaçınırsak ve yalnızca birbiriyle bağlantılı bir API kütüphanesi ile ayrı bir REST servisi ile ilgilenirsek, aşağıdaki noktaları göz önünde bulundurmak isteyebilirsiniz:

  1. Aynı makinede bir kütüphane API'si çağrılıyor. Hizmetler herhangi bir yerde barındırılabilir ve her yerden çağrılabilir. Uygulamayı performans / ölçeklenebilirlik / güvenlik nedenleriyle birden fazla makinede barındırıyorsanız, hizmetleri kullanmanız gerekebilir.

  2. Bu durum, birkaç makineye dağıtılmış bir uygulama tarafından tek bir servisi kullanmaya benzer. Örneğin, bazı finansal hesaplamalar yapan bir banka için bir başvuru yapıyorsanız, bunun bir yolu tüm büyük uygulamayı her masaüstüne dağıtmak ve her seferinde her müşteriye büyük boyutlu güncellemeler yapmak zorunda kalmaktır; Başka bir yaklaşım, hesaplama bölümünü sunucularda barındırmak ve masaüstlerine yalnızca bir UI ve bu sunuculara yapılan çağrıları içeren hafif bir uygulamayı dağıtmak olacaktır.

  3. Bir REST servisi barındırıyorsanız, herkes kullanabilir: bir Mac kullanıcısı, Linux kullanan bir kişi vb. Visual Studio ile bir C # kütüphanesi oluşturduysanız ve bir DLL olarak dağıtırsanız, kullanıcıları (müşterileri unutun) unutmayın. ?) kim Windows'a sahip değil.


9

Servislerin diğer bir avantajı, servisi güncellediğinizde, servisin derhal tüm tüketicilere dağıtılmasıdır. Dolayısıyla, bir hatayı veya performans sorununu düzelttiyseniz, güncellenen hizmet yayınlanır yayınlanmaz, herkesin görmezden gelmeyi seçebileceği bir güncelleme dağıtmak zorunda kalmadan herkes yararlanır.


Doğru, ama bu aynı zamanda bir dezavantaj olabilir. Birden fazla uygulamanın bağlı olduğu bir serviste değişiklik yaptığınızda, bu uygulamalardan birinde veya birçoğunda beklenmedik şekilde işlevselliği bozabilirsiniz. Bu, hizmetlerden kimseyi korkutmak değildir, yalnızca bir hizmeti değiştirdiğinizde hizmetin tüm tüketicilerinin çalışmaya devam etmesini sağlamanız gerektiğini unutmayın. Daha da iyisi, dağıtıldıktan sonra eski hizmet yöntemlerini yalnız bırakmak ve uygulamayı değiştirmeniz gerektiğinde yeni yöntemler oluşturmaktır.
Lews Therin

8

Kütüphane Avantajları:

Hizmet Avantajları:

  • Herkes derhal ve şeffaf olarak yükseltme yapar (sürümlü API teklif edilmedikçe)
  • Tüketiciler kodu çözemezler
  • Servis donanımını ayrı ayrı ölçeklendirebilir
  • Teknoloji agnostik. Ortak bir kütüphane ile tüketiciler uyumlu bir teknolojiden faydalanmalıdır.
  • Daha güvenli. Kullanıcı arayüzü, doğrudan DB'ye erişmek yerine, bir güvenlik duvarının arkasındaki servisi arayabilir.

"yerel kod" burada gerçekten bir anlam ifade etmiyor: a) bir hizmet "yerel kodu" da kullanabilir ve b) tam zamanında derleme genellikle yerel kodla aynı performansı sağlar.
sleske

Alınan nokta. "Yerel kod" derken kastettiğim şey, bir kütüphanenin bir "işlem" çağrısı olduğudur. Genelde hizmet katmanı yok (örneğin, bir Web API araması yapıyorsa HTTP)
Cory House

Evet, çağrı ek yükü gerçekten daha düşük olmalıdır. "Yerel kod" ifadesini "düşük çağrı yükü" ile değiştirmek yerine cevabınızı düzenleme özgürlüğüne kavuştum. Anlaşmazsanız, yeniden düzenlemek için çekinmeyin :-).
sleske,

Eklemek istediğim şey işlem kullanımı . İşlem sınırlarını aşarak işlem yapabilmek, paylaşılan bir kitaplıkta olduğundan daha zordur.
c_mart

2

SOA yaklaşımı, çeşitli hizmetlerin ayrı ayrı barındırılmasını ve korunmasını sağlar. Koda ek olarak, belirli bir hizmetin dağıtılması birçok özel yapılandırma gerektirebilir (şifreler, portlar, sertifikalar, vb.). Bir REST servisini kullanmak, açıkça belgelenebilen ve kolayca anlaşılabilen sınırlı bir karmaşıklığa sahiptir. Ayrıca daha güvenlidir, çünkü istemcilere DB'lere veya diğer kaynaklara erişim izni vermeniz gerekmez.


1

Bir SOA hizmetinde bir değişiklik olursa, SOA hizmetinin yeniden geliştirilmesi, yeniden test edilmesi ve yeniden konuşlandırılması gerekir. Bu hizmeti kullanan tüm uygulamalar bunu yapmaya devam edebilir. Bir DLL dosyasındaki bir kitaplıkta değişiklik yapılması, o kütüphanenin tüm tüketicilerinin bu DLL'e başvurmak için yeniden geliştirilmesi gerektiği, hepsinin tekrar test edilmesi ve hepsinin yeniden dağıtılması gerektiği anlamına gelecektir. Bunun doğru şekilde gerçekleşmemesi tehlikesi de vardır ve farklı uygulamalar DLL'in farklı sürümlerine sahip olacaktır. Bazen bu bir problem olmayabilir - belki de her sistemin konuşlandırma sırasında mevcut olan kütüphanenin sürümüne sahip olmalıdır (kayıt sisteminizi yararlı yeni özelliklere sahip olacak şekilde güncellemiş olabilirsiniz - gerçektenonunla her sistemi güncellemeniz gerekiyor mu?) bu durumda bir kütüphane iyi. Ancak vergi oranını hesaplamak için bir hizmetiniz olduğunu ve vergi yasalarının değiştiğini varsayalım. Bu değişikliği dahil etmek için her sistemi güncellemek zorunda değilsiniz, tek bir yerde yapmak daha iyi olacaktır. Bu durumda bir servis daha iyi bir seçenektir.


0

Birkaç iyi cevap var ama verilen cevaplara daha fazla şey eklemek istiyorum:

API kütüphanesi yöntemi, olabildiğince az ek yükü olan şeylerle etkileşimde bulunmak istediğinizde çok kullanışlıdır. Sonuç, API ile onu kullanan uygulamalar arasında daha yüksek bir eşleşme olmasıdır. Bazen, bu uygulama için uygundur ve hatta gereklidir, ancak çok dağınık bir sisteminiz varsa veya birlikte çalışabilirliğin çok büyük bir sorun olduğunu düşünüyorsanız, soyutlamanın bir adımına kadar çıkmanız ve başka iletişim yolları kullanmanız gerekebilir. Özellikle, dağıtılmış bir sisteme sahip olmak istiyorsanız, SOAP, SOA'daki bir sonraki adımdır, ancak birbirlerinin prosedürlerini bilmek zorunda olduklarından üniteler arasındaki bağımlılıktan hala mahrum kalacaksınız. REST, bir makinenin diğer hizmetlerdeki içerik hakkında birleştirilmiş bir şekilde bir şeyler öğrenmesini sağlayarak yeni bir düzeye çıkarır.

Sizin durumunuzda, başvurunuz dağıtılmamışsa, başvurunuzu SOA'ya dönüştürmek için herhangi bir sebep görmüyorum.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.