Amazon’un yeni Modulith’i – Yeniden Terzilik Hizmetleri bir yekpare yapı oluşturmuyor

Saberie

Active member


  1. Amazon’un yeni Modulith’i – Yeniden Terzilik Hizmetleri bir yekpare yapı oluşturmuyor

Ders verdiğim insanlara “Bilgisayarlar basittir” demeyi seviyorum. “Yalnızca sıfırlar ve birler var ve bundan daha karmaşık olamaz.” – “Ama ben her şeyi zor buluyorum” diye sık sık duyuyorum.







Kristian Köhntopp 1983’te programlamaya başladı ve 1988’den beri çevrimiçi. O zamandan beri her tür bilgisayarla çeşitli şeyler yapıyor, ancak durum göz önüne alındığında, peyzaj mimarı olarak kariyer yapmayı düşünüyor.







Bu doğru. Bilgisayar sistemlerinde, karmaşıklık neredeyse hiçbir zaman tek tek katmanlardan değil, bileşenleri üst üste veya yan yana istiflediğimiz yığının yüksekliğinden ve genişliğinden kaynaklanır. Bir CPU’nun blok şemasıyla başlayıp, ardından bir GUI ile nesne yönelimli bir dilde tipik bir tek işlemli yerel uygulama ile bitirmek için yığın düzeylerini istifleyerek, iki veya üç düzine soyutlama düzeyine ilişkin ihtiyatlı bir tahmin elde edersiniz. ve birbirleriyle etkileşime giren “içini biliyor olabileceğiniz şeyler”. Ve bu yine ağ yığınları, iletişim protokolleri, proxy’ler ve diğer aracılar olmadan – aynı egzersizi tekrar yerine baştan sona açan dağıtılmış sistemlerin karmaşıklığı olmadan sadece yereldir.


Gerçekte ne olduğunu anlamanın önemini


Bilgisayar bilimi adına her şeyin işe yaradığı bir bilim olarak konuşun. Tüm arayüzler, kapsüllemeler ve soyutlamalar, dar kaldıkları sürece, bir işe yaradığı açıktır. Bununla birlikte, aksi halde, genellikle işler hızla komikleşir: Yığın üzerinde küçük bir değişiklik yaparsınız, örneğin bir epsilon ve başka bir yerde, başka bir şey beklenmedik bir şekilde doğrusal olmayan davranır, dev bir delta oluşturur ve herkes birdenbire çok üzülür.

Bu nedenle, geliştiriciler kapalı ofisleri, telefonları ve ses geçirmez kulaklıkları kullanmayı seviyorlarsa, bunun nedeni, bu tür sistemler üzerinde çalışmanın esasen kafanızdaki yığını açmaktan ve bir soyutlama katmanında bir satır yazarken, olacak etkileri kafanızda tahmin etmekten ibaret olmasıdır. dağıtılmış bir sistemdeki diğer katmanlarda veya başka sistemlerde olabilir.


Amazon Prime Video büyüdü ve maliyetleri düşürdü


Bu kapsamda Amazon’un yayın ekibinden Prime Video yayın hizmetinde ses ve video izleme maliyetlerinin yüzde 90 oranında düşürüldüğü duyurusunu okuduk. Bu nedenle Amazon, müşteriye gönderilen video akışlarından kareleri yönlendiren ve analiz eden bir özellik uyguluyor. Sistem, düzeltilebilmeleri için kaliteyi etkileyen belirli kusurları algılar ve işaretler. Geliştiriciler, Amazon’da tipik olarak, verileri bir S3 klasöründen diğerine aktarmak için lambdaları ve adım işlevlerini işleyen bir dizi mikro hizmet olarak uygulamışlardır.

Sorun raporları bir SNS mesaj veriyoluna konur. Başka bir deyişle, Amazon’un sözlerini kullanmadan, kodu bir dil tarafından hazırlanmış belirli bir ortamla karşılaştığı yerde kapsayıcıya yerleştirdiler ve ardından onu, olayların tetiklediği ve talep üzerine çalıştırdığı bir kapsayıcı kümesine yerleştirdiler. Kod, HTTPS üzerinden erişilebilen bir bellek alanında yeni veri olduğunda etkinleşir ve sonuçlarını aynı türden bir alana yazar, ardından bir olay bus aracılığıyla yeni sonuçların mevcut olduğuna dair bir mesaj gönderir.

Proje gereğini yapar


Beklendiği gibi çalıştı: proje hızlı bir şekilde tamamlandı ve kendisinden bekleneni yaptığını gösterebildi. Ölçeklendirme sırasında, ekip daha sonra dağıtılmış bileşen kesiminin elverişsiz olduğunu fark etti: Lambdalar ve adım işlevleri, video akışı çerçevelerini toplu ML algılayıcılarına beslemek için iyi şeyler değildir, çünkü bunlar hiçbir zaman birincil olarak bunun için tasarlanmamıştır: web’i uygulamaya yönelik bileşenlerle ilgilidir. uygulamalar.

Elbette S3, hızlı geçici süreçler arası iletişim için de iyi bir arşiv değildir, çünkü düşük maliyetli bir Web arşivi olarak, düşük işlem hızları ve yüksek gecikmeleri tolere edebilen hizmetler için tasarlanmıştır. Bu nedenle, Amazon ekibinin makalede sunduğu çözüm, tüm bunları tek bir kapta bir araya getirmek ve Amazon Elastic Container Services’e (ECS) koymaktı.

Bir alt görev için gerekli olan bileşenler aynı kapta ve dolayısıyla aynı makinede yan yana olduğundan S3 üzerinden https ile çerçeve göndermek yerine birbirleriyle bellek üzerinden haberleşebilirler. Benzer şekilde, lambdalar ve adım işlevleri AWS dahili ağında bir yerde yayınlanır ve aynı kod ve hatta yerel işlev çağrıları için yerel kapsayıcılarla değiştirilir.

İstendiği gibi, bu, çok fazla iletişim gecikmesini ve dağıtılmış bir sistemin çok hızlı dönen bir bölümünü yerel bir iletişim sistemine dönüştürmenin ilgili maliyetini ortadan kaldırır. Verilerin artık ağ üzerinden gönderilmesi gerekmez, ancak paylaşılan depolama alanında yerel olarak kullanılabilir. Artık hiç kimse ağı beklemek zorunda olmadığından, her şey çok daha hızlı ve daha ucuz.

Sistemi temiz bir şekilde kapsülleyin: beklenmedik şekilde ağrısız


Beklenmedik şekilde ağrısız bir süreçti: “Üst düzey mimari konsepti aynı kaldı. Orijinal tasarımla tamamen aynı bileşenlere sahibiz (ortam dönüştürme, algılayıcılar veya orkestrasyon). Bu, çok sayıda kodu yeniden kullanmamıza ve hızla geçiş yapmamıza olanak sağladı. yeni bir mimariye,” Amazon ekibi tarafından yazılan makaleyi okur.

Ve belki de bu rapordan edinebileceğiniz deneyim şudur: İyi bir yazılım mimarisine sahip, düzgün tasarlanmış ve kapsüllenmiş bir sistemde, bileşenleri büyük kod değişiklikleri olmadan yeniden yapılandırabilir ve sıfırdan başlamak zorunda kalmadan sistemin düzenini değiştirebilirsiniz. başlangıç. Değişen mimari değil, çalışan bileşenlere dağıtımı, yani konuşlandırmaydı.

Bir monolit değil, bir modulith


Ne yazık ki Amazon’un blog yazısının alt başlığı, okuyucuların metnin temel içgörülerini yanlarında taşımasını zorlaştırıyor çünkü yanlış beklentiler yaratıyor: “Dağıtılmış bir mikro hizmet mimarisinden yekpare bir uygulamaya geçerek, daha fazla ölçeklenebilirlik ve güvenilirlik ve maliyetler artacak. indirildi”, Amazon’daki orijinal blog gönderisini okur.

AWS Prime Video ekibinin orada oluşturduğu şey, büyük olasılıkla bir Modulith’tir, ancak Amazon Prime Video aksi yöne gitti. Martin Fowler, “Önce Monolith” başlıklı 2015 tarihli bir blog gönderisinde, bir sistemin tek süreçli bir sistem olarak planlanmasını ve bir prototip olarak geliştirilmesini savunuyor. Parçalar daha sonra ölçeklendirme için bölünecektir. Bunun yerine ekip, bir prototip oluşturmak için zaten AWS altyapısında bulunan olay odaklı dağıtılmış sistem bileşenlerini kullandı.

Ardından, modüler yapılarından ödün vermeden sıkı bir şekilde bağlı bileşenleri yakın mesafede çalıştırmak için uygulamayı değiştirdi. Bu o kadar da sıra dışı bir fikir değil: Fowler’ın kendisi Monolith First makalesinde, mikro hizmetler hakkında Sam Newman tarafından yazılan ilgili bir makaleye ve mikro hizmetlerin başarılı bir şekilde geliştirilmesi üzerine onun sonuçta ortaya çıkan kitabına atıfta bulunuyor.

Moulith: daha büyük bir sistemin parçası


Ayrıca sonuç, klasik tek örnekli bir monolit değil, daha sonra ölçeklendirme için gereken paralellik ile ECS’de somutlaştırılan bir kapta sıkı bir şekilde birleştirilmiş bileşenlerin bir kombinasyonudur. Ve “Modulith”in kendisi, lambdalar ve mesajlarla dağıtılmış olarak iletişim kuran daha da büyük bir sistemin parçasıdır.

Amazon’un blog gönderisi, kodun çok fazla değişiklik yapılmadan farklı alt tabakalar üzerinde farklı biçimlerde çalışacak şekilde nasıl yapılabileceğinin bir örneğidir. Bu, özellikle iyi izole edilmiş bileşenlere ayrılmış temiz arayüzlere sahip temiz yapılandırılmış bir uygulama gerektirir. Ayrıca, iyi gözlemlenebilirlik, böylece dağıtılan uygulamanızın nerede olumsuz bir şekilde kesildiğini belirleyebilirsiniz.

Sistemi istediğiniz boyuta göre oluşturun – gerekirse farklı şekilde kesin


Burada gösterildiği gibi, bu, değişen ölçeklenebilirlik gereksinimlerine veya değişen iş gereksinimlerine hızlı ve uygun maliyetli bir şekilde yanıt vermeyi kolaylaştırır. Başka bir deyişle, gerçekte neler olup bittiğini anlayan insanlar, uygulamalarını değişen ihtiyaçlara uyarlamakta çok az sorun yaşarlar. Bilgi işlemdeki karmaşıklık, yığının yüksekliğinden ve genişliğinden kaynaklanıyorsa ve kapsülleme ve soyutlamalarımızın başarısız olduğu durumlarda, sistemi, yeniden yazmak zorunda kalmadan gerektiği gibi ölçeklendirip yeniden konuşlandırabileceğimiz şekilde oluşturun.


(onun)



Haberin Sonu
 
Üst