Microservices REST veya AMQP, bu durumda


16

Mikro hizmet mimarisi ile ilgili birçok makale okudum ve AMQP veya REST'in ne zaman kullanılacağını merak ediyordum.

Hizmetler arasındaki gevşek bağlantının iyi bir şey olduğunu okudum ve AMQP bu durumda iyi bir seçim gibi görünüyor. Ancak AMQP kullanırsak, artık REST uç noktalarına ihtiyacımız olmadığı anlamına gelir (ancak HATEOAS konseptini kaybettiğimiz anlamına gelir).

Peki, REST hizmetlerimi oluşturmanın gerçekten iyi bir yolu mu? Çünkü hiçbir uç nokta kullanmayacağım ... Bu durumda biri diğerinden daha iyidir?

Birini ne zaman kullanmalıyım?

Yanıtlar:


10

REST'i atarak, HATEOAS'tan çok daha fazlasını kaybedersiniz. Mikro hizmetleriniz herkese açıksa (ve herkese açık olmaları veya en azından bir gün halka açık olmaları iyi bir fikirdir), REST ve SOAP dışında bir şey kullanmak sorun yaratır:

  • Bazı geliştiriciler AMQP'yi hiç kullanmadı,

  • Bazıları AMQP kullandı, ancak çoğu zaman REST ve SOAP'ı daha iyi biliyorlar,

  • Bazı diller için AMQP kütüphaneleri özellikle kolay değildir,

  • Hizmetle manuel deneme çok sınırlıdır: Amazon S3'e herhangi bir istekte bulunmak için CURL'u kullanabilirim; S3 AMQP varyantı ile oynamak istiyorsam makineme ne yüklemeliyim ?

  • REST ve SOAP hata ayıklamak kolaydır. Sadece HTTP değişimlerini takip edip analiz ediyorum. AMQP borsalarında hata ayıklamak için hangi araçları kullanmam gerektiğinden emin değilim.

AMQP harika, ancak olaylara dayalı borsaların çok özel bir amacı için yapılır. AMQP ile RPC yapmak teknik olarak mümkün olsa da, birincil amacı bu değildir.

Asenkron yönü de önemlidir. Bazen bir avantajdır: Sunuculara istek yaparken bir uygulamanın kullanıcı arayüzünü engellemek istemiyorum. Bazen, işleri olması gerekenden daha zor hale getirir: Amazon S3'ten bir dosya yedeklemesini kurtarmam gerekirse, yerel olan bozuk olduğundan ve daha sonra yedeklemeyi geri yüklersem, toplu iş dosyamın devam etmeden önce işini bitirmek için CURL'a ihtiyacı vardır, ve senkronize bir işlem (belirli bir zaman aşımı ile) mükemmel bir anlam ifade eder.

Birincil işlemler için REST'i saklayın:

  • Ürün almak,

  • Fatura saklamak,

ve mesajlaşmanın gerçekten mantıklı olduğu görevler için AMQP'yi kullanın:

  • Eylül ayından itibaren tüm faturaları işleme koyup rapor gösterilmeye hazır olduğunda uygulamayı bilgilendirin (işlemin genellikle iki ila on dakika sürdüğü göz önüne alındığında),

    AMQP'nin burada yararı asenkron yönüdür. On dakika bekleyen bir HTTP isteğinin zaman aşımına ve diğer sorunlara neden olma olasılığı yüksektir.

  • Destek personeli, veritabanı yöneticileri, izleme ekibi, bu veritabanını kullanan uygulamanın geliştiricileri vb. Gibi yedeklerin ilgilendikleri herkese bozuk olduğu bilgilerinin gönderilmesi.

    AMQP'nin faydası, diğerlerinin yanı sıra, yedekleri izleyen ve bozuk bir tane bulduğunda uyarıyı tetikleyen uygulamayı değiştirmeden aboneleri ekleme yeteneğidir.


¹ Herkese açık bir web hizmetinin, şirket dışındaki kullanıcılar tarafından kullanılması gerekmez. Büyük veya orta ölçekli şirketlerde, hizmetiniz genellikle aynı şirketin diğer bölümleri tarafından kullanılır ve herhangi bir üçüncü tarafın kullanacağı gereksinimlerle aynı gereksinimlere sahiptir: herhangi bir çağrıyı güvensiz hale getirmelidir (bazı erkeklerin asla hizmetinizi kimin aradığını, aynı şirkette çalıştığını duyduğu için güvenlik sorunlarından yararlanamayacağı anlamına gelmez), düzgün bir şekilde belgelenmelidir (çünkü aynı Hintli adam telefon numaranızı mutlaka bilmez ve mutlaka İngilizce biliyorum) vb.


AMQP kullanarak bağımlı nesnelere yükleme yapmaya ne dersiniz? Bir fatura servisi (büyük bir mikro hizmet mimarisinde) ile ilgili kullanıcı gibi, eşzamansızlık vs REST hateoas (senkron) erişim için mukavemet?
Thomas thomas

5

İkisini de kullan.

REST stili JSON web hizmetleri, javascript, ios vb ile birlikte çalışabilirlik için mükemmeldir.

AMQP, uzun süren işlemler, olaylar ve mikro hizmetlerin düzenlenmesi için mükemmeldir.

Ancak her ikisi de sadece gerçek hizmet için iletişim sarmalayıcılarıdır, aynı hizmeti birden çok şekilde gösterebilirsiniz ve muhtemelen yapmalısınız.

AMPQ, Websockets üzerinde iyi bir şekilde çalışabilir, bu da şaşıyorsanız bir REST uç noktasına benzeyebilir.


1
"Eğer şaşı eğer" lol, harikaydı.
Iain Duncan

0

REST, özellikle bileşenler arasında birlikte çalışabilirlik için uygun olan standart bir teknolojidir - bu anahtar kısımdır, başkasının tüketebileceği bir web hizmeti yapmak için harikadır. Bununla birlikte, özel bir protokolden daha az verimli olması nedeniyle, bu tür birlikte çalışabilirliğin olağan problemlerinden muzdariptir.

Hizmetlerin yalnızca kendiniz tükettiği bir arka uç mimarisi yazıyorsanız, istediğiniz protokolü kullanabilirsiniz - artık birlikte çalışabilir bir yöntemle kısıtlanamazsınız. Bir MQ veya daha sıkı bir şekilde bağlanmış ve performans gösteren bir şey kullanabilirsiniz. Hangisini kullandığınıza bağlı olarak, bir ileti yolu, müşterinin gönderdiği iletileri kimin aldığını umursamadığı verileri işleyen dağıtılmış hizmetler kümesi için çok iyidir.


2
Katılıyorum, endişelendiğim kadarıyla çapraz amaçları var; (genel olarak) halka açık internet üzerinden AMQP'yi ifşa etmemelisiniz; bir şey için çok daha az yetkilendirme olanakları vardır ve genellikle halka açık internet kullanıcıları etkinliklerinden yanıtlar ister. REST bu nedenle kamuya açık internet kullanımı için idealdir. Gerçi en büyük fark (senkron AMQP asenkron olmasıdır gibi (evet dönen davranışlar mümkündür, ancak bunun MQS bunun içindir değil) ve DİNLENME senkron olduğu 202neden? Sonra Muhtemelen çünkü 's halkı DİNLENME kullandı ama, asenkroniye dikte edilir.)
Jimmy Hoffa

Bir yan notta, AMQP'yi websocket kullanımı için maruz bırakmak, böylece kullanıcıların anket yapmak yerine canlı gerçek zamanlı itmeler elde etmeleri aslında halka açık AMQP yapmak için bir nedendir; ama yine: Çapraz amaçlar, REST yapmazsınız, böylece tüketiciler itebilir, bu da REST'in yapamayacağı bir şey için AMQP'yi kullandığınız başka bir senaryodur.
Jimmy Hoffa

@JimmyHoffa Web sunucularını veya istemcilerini ya da mikro LAN hizmetlerine web üzerinden değil kancalamak için ne kullanacağını sorduğunu düşündüm - dolayısıyla REST'in bunun için iyi olduğunu düşünüyorum, ancak kullandığınız her şey sizin altındaysa kontrol, ne istersen kullanabilirsiniz.
gbjbaanb

Evet, bu kesinlikle mantıklı; Sorusunu farklı bir şekilde okudum: Görünüşe göre mikro hizmet fikri hakkında okudu ve AMQP ve REST'i seçmek için ilgili nedenleri anlamıyor. Dahili olarak istediğinizi kullanabilirsiniz, ancak AMQP vs REST'i dahili olarak kullanmak için hala belirli nedenler vardır; Eşzamansızlık isteyen hizmetler dahili olarak AMQP kullanmalı, eşzamanlı olan hizmetler (salt işleme hizmeti olduğunu düşünün: Ham Veri girişi -> İşlenmiş veri çıkışı) REST olmalıdır. Her iki IPC teknolojisinin de belirgin avantajları ve dezavantajları vardır, bunları biliyorsunuz ve cevabınızda listelemelisiniz! :)
Jimmy Hoffa

0

AMQP noktadan noktaya iletişimi de destekler (örneğin, python-qpid-protoneğiticiye bakın ). REST !=HTTP'den beri bunu kullanarak bir RESTful arabirimi uygulayabilirsiniz .

AMQP ayrıca HTTP'den çok daha iyi performans gösterir.

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.