Geleneksel olarak, günde milyar işlem yapan bir sistem yüzlerce VM gerektirebilir, PayPal ise sadece 8 VM ile her şeyi yapar ve %90 CPU kullanımıyla hızlı yanıt verir; PayPal'ın daha önce hiç başaramadığı bir işlem yoğunluğu vardır ve süreç 1/10 zaman alır; bu da organizasyonun hesaplama altyapısını ölçeklendirmeden büyümeye ayak uydurmasına yardımcı olur ve maliyetleri azaltır. Bu nasıl yapılır?
PayPal, sistemini Akka tabanlı Aktör moduna taşıdı. Squbs: PayPal uygulama oluşturmada yeni bir tepki yaklaşımı benimsediği makalede (Bağlantı girişi görünür.PayPal sürecin tüm detaylarını açıklıyor. Şimdi Squbs'u açık kaynak olarak yayınladılar ve GitHub'da yayınladılar (Bağlantı girişi görünür.)。
Bir proje uygulamalı bir yaklaşım benimsemesi gerektiğinde, durumlu hizmet modeli yine de yeterince dikkat çekmez. Durum tabanlı hizmetler hakkında daha fazla bilgi edinmek için, ölçeklenebilir durum hizmetleri geliştirmeye devam etmenin nedenlerini okumanızı öneririz (Bağlantı girişi görünür.), bu makale Caitie McCaffrey'nin bir konuşmasına dayanmaktadır. Bu makale sizi ikna edemiyorsanız, WhatsApp da Akka'nın rakibi Erlang'ı son derece yüksek akış gücü için kullanmaktadır: Facebook'un 19 milyar dolarlık WhatsApp mimarisi (Bağlantı girişi görünür.)。
Yukarıdaki makaleyi önermesinin nedeni, PayPal'ın mimariye ayrıntılı bir giriş sunmaması, bunun yerine Akka seçme nedenlerine ve Akka'ya geçişin faydalarına daha fazla zaman ayırmasıdır. Ancak bu makale yine de "yoldan sapma" pratiği için değerli teşvik ve gösteri sunuyor.
Bir servis için çok sayıda sanal makine kullanmanın ne yanlış olduğunu düşünür.
- Hizmeti çok düşük verimli, son derece küçük sanal makinelerle çalıştırın. Aktör tabanlı tepkisel sistemlerin en büyük avantajı, hesaplama kaynaklarını daha verimli kullanabilmeleridir; bu da sistemin boyutunu büyük ölçüde küçültebilir ve geleneksel uygulamaların "basit ve kaba" otomatik ölçeklendirmesinden kaçınabilir.
- Bu, ağınıza ve yönlendirme altyapınıza büyük bir yük oluşturur. Hizmetler genellikle daha çok birbirine bağlı olduğundan, istekler çok sayıda ağ atlamasından geçmesi gerekebilir, bu da gecikmeyi artırır ve kullanıcı deneyimini kötüleştirir.
- Ne kadar büyük olursa, o kadar pahalıdır. Yüzlerce sanal makineye sahip hizmetler, yönetim, izleme ve etkisiz önbellekleme açısından yüksek doğal maliyetlere sahiptir.
- Ne kadar küçükse, o kadar çeviktir. Hizmetlerin yüzlerce sanal makineye dağıtılması zaman alıcı bir süreçtir.
- Her sanal makinede daha fazla CPU'dan daha fazla fayda elde edin. CPU'lar daha fazla hızlandırılamadığı için, altyapının her sanal makinede daha fazla CPU'yu daha verimli kullanabilmesi gerekir.
- Mikroservisler, bakımı kolay ve hızlı inşa edilebilen, gevşek bağlantılı NanoServislerle oluşturulmalıdır. Kimse çok katmanlı karmaşık bir sistemle uğraşmak istemez ve farklı hizmetlerin rolünü daha fazla görmeye ihtiyacınız var, kod katmanlarına derinlemesine inmenize gerek kalmadan.
Bu faktörleri göz önünde bulundurarak, PayPal şu şekilde bir sistem inşa etmek istedi:
- Ölçeklenebilir, sadece yatay olarak yüzlerce düğüme ölçeklenmek için değil, aynı zamanda günde milyarlarca isteği işleme hedefine ulaşmak için daha fazla işlemciye ölçeklenebilir.
- Düşük gecikmeye sahip ve son derece ince granülarlıkla kontrol edilebiliyor.
- Başarısızlıklar karşısında dirençli olun.
- Hizmet sınırlarının esnek ayarlanması.
- Programlama modelleri ve kültürü ile daha basit hata ve hata işleme mekanizmaları aracılığıyla ölçeklenebilirlik ve sadeliği teşvik edin.
PayPal'ın daha "ince" bir yığın kullanmak istediği ve yığınlarının farklı seviyelerde çok fazla teknoloji ve hareketli parça içermesini istemediği konusunda hiç şüphe yok. Genel olarak, Akka ve durum tabanlı sistemler bu ihtiyaç için çok uygundur; bu da büyük bileşenlerin yığınının tek bir teknolojiye "parçalanmasına" olanak tanır. PayPal, Java üzerinde çalışan Java ile daha fazla deneyimi olduğu için Erlang yerine Akka'yı seçti. Birçok kişi için Erlang'ı sıfırdan öğrenmek gerçekçi değildir.
Akka ile şunları yapabilirler:
- Daha kolay açıklanabilir kod yaz
- Daha kolay test edilebilecek kod yaz
- Hata ve arıza senaryoları, JVM kullanılarak kullanılan geleneksel modlara göre daha doğal şekilde ele alınır
- Daha hızlı, dayanıklı ve basit kodlar yazın, hataları daha akıcı bir şekilde ele almak ve hata sayısını azaltmak
PayPal hemen Akka temelli kendi çerçevesini yazdı; bu çerçeve Squbs olarak adlandırıldı ve "Cubes" ile kafiyeli olarak kullanıldı. Bu, "Cube" adı verilen bir NanoService oluşturmak için modüler bir teknoloji katmanı oluşturmanıza olanak tanır. Küpler simetriktir ve farklı küpler arasındaki bağımlılıklar da simetrik ve gevşektir, sadece Akka'nın zaten sağladığı mesaj arayüzlerini ortaya çıkarır.
Ayrıca, programcıların AKKA kodunu benimserken karşılaşabileceği zorlukları da açıklar; çünkü Akka/Scala eğitimi almış birini de işe almanız gerekebilir.
Çoğu hizmetin benzer amaçları olduğundan: istek almak, veritabanlarını çağırmak ve okumak ve yazmak, diğer hizmetleri çağırmak, kural motorlarını çağırmak, önbelleklerden veri almak, önbelleklere yazmak... Sonuç olarak, hizmetler Orkestratör Deseni ve Sürekli Akış gibi kalıplarla soyutlanabilir.
Squbs, PayPal'ın Akka tabanlı tepkisel uygulamalar oluşturmasında standart bir uygulama haline gelmiştir. Ekibiniz henüz durum tabanlı sistemleri düşünmediyse, PayPal, Facebook, Uber ve Microsoft'ta iyi çalıştığı için denemeye değer.
|