Mikro hizmet yaklaşımının olumlu ve olumsuz yönlerini konuşalım.
İlk olumsuzluklar. Mikro hizmetleri oluştururken, kodunuza doğal bir karmaşıklık eklersiniz. Tepegöz ekliyorsun. Çevreyi çoğaltmayı zorlaştırıyorsunuz (örneğin, geliştiriciler için). Hata ayıklamayı aralıklı sorunları daha da zorlaştırıyorsunuz.
Bana bir dezavantajı göstereyim. Bir sayfa oluştururken çağrılan 100 mikro-servisin olduğu ve her birinin zamanın% 99.9'unu doğru olanı yaptığı varsayımsal olarak düşünün. Fakat zamanın% 0,05'i yanlış sonuç veriyor. Ve zamanın% 0,05'i, bağlanmak için bir TCP / IP zaman aşımına ihtiyaç duyulan ve 5 saniye süren yavaş bir bağlantı isteği vardır. İsteğinizin yaklaşık% 90,5'i mükemmel çalışıyor. Ancak, zamanın% 5'i yanlış sonuçlara ulaştı ve sayfanızın% 5'i yavaş. Ve her tekrarlanamayan başarısızlığın farklı bir nedeni var.
İzleme, çoğaltma ve benzeri işlemler için araç gereçler üzerine çok fazla düşünce yapmazsanız, bu bir karmaşaya dönüşecektir. Özellikle bir mikro servis diğerini birkaç katman derinliğinde diğeriyle çağırdığında. Ve bir kez sorunlarınız olduğunda, zamanla daha da kötüye gidecek.
Tamam, bu bir kabus gibi geliyor (ve birden fazla şirket bu yola girerek kendileri için büyük sorunlar yarattı). Başarı sadece olası olumsuz tarafların açıkça farkında olmanız ve bunu çözmek için sürekli çalışmanız mümkündür.
Peki ya bu monolitik yaklaşım?
Monolitik bir uygulamanın mikro servisler kadar modüler hale getirilmesinin de kolay olduğu ortaya çıktı. Ve bir işlev çağrısı, pratikte bir RPC çağrısından daha ucuz ve daha güvenilirdir. Böylece aynı şeyi, daha güvenilir olması, daha hızlı çalışması ve daha az kod içermesi dışında geliştirebilirsiniz.
Tamam, peki şirketler neden mikro hizmetler yaklaşımına gidiyor?
Bunun cevabı, ölçeklenirken, yekpare bir uygulama ile yapabilecekleriniz için bir sınırın olmasıdır. Çok fazla kullanıcı, çok fazla istek ve daha sonra, veritabanlarının ölçeklenmediği bir noktaya ulaşırsınız, web sunucuları kodunuzu bellekte tutamazlar vb. Ayrıca, mikro hizmet yaklaşımları, uygulamanızın bağımsız ve artımlı yükseltmelerine izin verir. Bu nedenle, bir mikro hizmet mimarisi, uygulamanızı ölçeklendirmek için bir çözümdür.
Kişisel kurallarım, kodlama dilindeki (örneğin Python) koddan optimize edilmiş C ++ 'a gitmek genellikle performans ve bellek kullanımında 1-2 büyüklük sırasını iyileştirebilir. Dağıtılmış bir mimariye diğer yoldan gitmek, kaynak gereksinimlerine büyük bir katkı sağlar ancak süresiz olarak ölçeklendirmenize izin verir. Dağınık bir mimarinin çalışmasını sağlayabilirsiniz, ancak bunu yapmak daha zordur.
Bu nedenle, eğer kişisel bir projeye başlıyorsanız, yekpare olmak gerektiğini söyleyebilirim. Bunu iyi yapmayı öğren. Dağıtılmayın çünkü (Google | eBay | Amazon | etc). Dağıtılmış büyük bir şirkete giriyorsanız, nasıl çalıştıklarına dikkat edin ve onları mahvetmeyin. Ve geçişi yapmak zorunda kalırsanız çok dikkatli olun, çünkü çok, çok yanlış bir şekilde yapması kolay bir şey yapıyorsunuzdur.
Açıklama, her büyüklükteki şirkette 20 yıla yakın bir deneyime sahibim. Ve evet, hem monolitik hem de dağıtık mimarileri yakından ve kişisel olarak gördüm. Size dağıtılmış bir mikro hizmet mimarisinin gerçekten yapmanız gereken bir şey olduğunu söyledim, çünkü bir şekilde daha temiz ve daha iyi olduğu için değil.