FLAME deseni: Uygulamaların esnek ölçeklenmesi için yeni bir yaklaşım
- Serverless/FaaS (Function as a Service), esnek ölçeklenme ve kullanıma dayalı ücretlendirme gibi avantajlar sunar, ancak pratikte daha fazla karmaşıklığa yol açar.
- Mevcut uygulama kodu fonksiyonlara sarılarak geçici uygulama kopyalarında çalıştırılabilse, otomatik ölçekleme mümkün hale gelir.
- FLAME (Fleeting Lambda Application for Modular Execution) deseni, tüm uygulamayı bir lambda gibi ele alır ve modüler parçaları kısa süreli altyapı üzerinde çalıştırır.
FLAME deseni
- FLAME deseni, sunucu yönetimi olmadan uygulama kodunun belirli bölümleri için talebe dayalı, ince taneli esnek ölçeklenme hedefler.
- Mevcut uygulamaları yeniden yazmayı ya da bunları kısmen kapalı bir runtime üzerinde geliştirmeyi gerektirmez.
- Elixir'in
flamekütüphanesi FLAME desenini uygular ve bir Fly.io backend adaptörü içerir; ancak uygulama kodunu çalıştıracak bir API sunan her bulutta kullanılabilir.
FLAME backend'i
- Fly.io altyapısında
FLAME.FlyBackend, yeni bir Machine başlatıp yaklaşık 3 saniye içinde ebeveyn işe bağlanabilir. - FLAME varsayılan olarak
LocalBackendveFlyBackendsunar, ancak sunucu provision edebilen ve uygulama kodunu çalıştırabilen bir API sağlayan her host FLAME backend'i olarak çalışabilir. - Fly.io, uygulamaları Docker image olarak paketleyip çalıştırdığı için, aynı image ile yalnızca yeni bir Machine başlatmak yeterlidir.
FLAME dışındaki Elixir
- Elixir, süreç denetimi ve dağıtık mesajlaşma gibi özellikleri yerleşik olarak sunduğu için FLAME modeli için son derece uygundur.
- Bir dil makul eşzamanlılık yapı taşlarına sahipse, bu desenden yararlanabilir.
- JavaScript uygulamalarında da FLAME deseninin uygulanabildiğini gösteren örnekler vardır; modüler yürütme yeni bir dosyaya taşınarak çalıştırılır.
Arka plan işleyicileri hakkında
- FLAME, arka plan işleyicileri içinde iyi çalışır; ancak bunun, iş kütüphanelerinin iş havuzlarını ölçeklemesinden ayrı bir konu olduğunu belirtmek gerekir.
- Dayanıklılığı garanti eden işler ile esnek yürütmeyi birbirinden ayırmak önemlidir.
Esnek ölçeklenme için pooling
- Elixir'in FLAME implementasyonu ile esnek havuz runner'ları tanımlanabilir; bu sayede sıfıra kadar küçülebilen ve azami eşzamanlılık sınırı olan FLAME sunucuları esnek biçimde ölçeklenebilir.
Süreç yerleşimi
- Elixir'de duruma sahip uygulama parçaları süreç yapı taşları etrafında kurulur ve
FLAME.callya daFLAME.castile sarıldığında iyi çalışır.
Uzaktan izleme
- Ebeveyn runner'ı ayağa kaldırdığında, runner iş olmadığında kendi idle durumunu yönetebilmeli ve ebeveyn düğümle bağlantı koptuğunda güvenli biçimde sonlanmalıdır.
GN⁺ görüşü
Bu yazıdaki en önemli nokta, FLAME deseninin mevcut serverless/FaaS yaklaşımının karmaşıklığını azaltırken uygulamaların esnek ölçeklenmesini basitleştirebilmesidir. Bu desen, geliştiricilerin mevcut kodu büyük ölçüde değiştirmeden yalnızca gereken bölümleri hızla ölçeklemesine olanak tanır; bu da bulut altyapısı kullanan birçok yazılım mühendisi için onu cazip bir çözüm haline getirebilir. FLAME deseni özellikle Elixir gibi dillerde güçlü bir araç olabilir ve diğer dillere uygulanma olasılığı da araştırıldığından, farklı geliştirme ortamlarında kullanımını umut verici kılar.
1 yorum
Hacker News görüşü
100'den fazla Lambda fonksiyonundan oluşan bir uygulamayı 4 yıl boyunca yönetirken yaşanan sıkıntı ve karmaşıklık açısından bu yazı, serverless FaaS mimarisinin dezavantajlarını iyi tespit ediyor.
Yazının yazarı olarak, FLAME desenini JavaScript, Go ve diğer dillerde uygulamak isteyenlerin ilgisini çekmeyi umuyor ve soruları yanıtlamaya hazır olduğunu söylüyor.
PiCloud hizmeti, işleri şeffaf biçimde worker'lara aktaran bir model kullanıyordu; bu da benzer yaklaşımın yalnızca Elixir'de değil başka dillerde de uygulanabileceğini düşündürüyor.
FLAME ile mevcut uygulama kodu bir fonksiyonla sarılıp uygulamanın geçici bir kopyasında çalıştırılabiliyor; bu, serverless ortamda process fork etmeye benziyor.
Windmill.dev, soyutlama birimini kaynak kod düzeyinde ele alıyor; ana fonksiyonları ve import'ları parse ederek argümanları ve bağımlılıkları çıkarıyor, ardından kodu istenen runtime'da çalıştırıyor.
FLAME kullanıldığında geliştirme ve test runner'ları yerel backend'de çalıştığı için, serverless ortamda iyi bir yerel geliştirme deneyimi sunuyor.
Her
Flame.callkullanımında yeni bir uygulama prosesi başlatılıp yürütme bağlamı kopyalanıyor; bu, ölçeklendirme için basit bir çözüm olsa da uygulama açılış süresine eklenen gecikme ve bellek kullanımı açısından dikkat gerektiriyor.Hacker News başlıklarında büyük harf kullanımına yönelik bir eleştiriyle birlikte, serverless ilkelerinin değil serverless.com şirketinin yeniden değerlendirilmesi yönünde bir temenni dile getiriliyor.
Inngest.com, mevcut kodun serverless fonksiyon olarak kullanılmasına benzer bir yaklaşım sunuyor; kodun durumunu dışarıda yönetiyor ve izleme ile gözlemlenebilirliğin önemini vurguluyor.
"Long Lambda" adlı bir sistem yapılırsa Lambda'ların 15 dakikadan uzun çalışabilmesi sayesinde tüm işlerin Lambda üzerinde yürütülebileceği, ayrıca yerelde çalıştırma ve debug etmenin mümkün olacağı söyleniyor.
Bu özet, her yorumun ana içeriğini kısa ve anlaşılır biçimde aktarıyor; başlangıç seviyesindeki yazılım mühendislerinin anlayabileceği düzeyde yazılmış. Arka plan bilgisi gerektiren bölümler minimum düzeyde açıklanmış, tarafsız bir tutum korunmuş ve konudan sapılmamıştır.