Merhaba, bu yazımda cloud-native web uygulamalarında konfigürasyon yönetiminde kullanılan configuration hot-reloading konseptinden bahsedeceğim. Ufaktan başlayalım.
Öncelikle geleneksel web servislerinde konfigürasyonların nasıl yönetildiğine bakalım. Genelde servis ayağa kalkarken dışarıdaki bir kaynaktan önceden tanımlanmış tüm değerleri alır. Bu kaynak bir environment dosyası, bir configuration manager veya direkt üzerinde çalıştığı işletim sistemi de olabilir. Devamında uygulamamız aldığı değerlerle uygulamada gerekli olan işlemleri yapar ve çalışmaya başlar. Restart atılana kadar konfigürasyon değişiklikleri ile ilgilenmez.
Peki bu sistemde anlık olarak değişiklikleri izleyerek veya dışarıdan tetiklenerek konfigürasyon değiştirme ihtiyacımız neden olsun ?
- Bir çok sebebi olabilir ancak en yaygın olanından bahsetmek gerekirse loglama. Sunucunuzda çalışan tüm testlerden geçmiş, sorunsuzca çalıştığına inandığınız bir uygulama düşünün. Bir gün aniden anlam veremediğiniz bir sebepten dolayı istediğimiz gibi çalışmamaya başlıyor. Restart attığınızda ise tekrar çalışır hale geliyor. İlk işiniz logları okumak oluyor ancak loglarda problem görünmüyor çünkü loglama seviyenizden dolayı o an neler olduğuna dair yeterince detay bulamıyorsunuz. Bu büyük bir sistemde oldukça tehlikeli bir durumdur. Pimi çekilmiş bomba gibi gezen bir servisiniz var, her an bozulup diğer servisleri dolayısıyla production ortamını tehlikeye atabilir.
Bunun gibi nadiren karşılaştığınız hatalarda production ortamında mevcut state'i koruyarak yani restart atmadan debugging yapma ihtiyacınız olur. İşte bu anlarda uygulamayı kapatmadan loglama seviyenizi değiştirmek yani hot-reloading için yardımımıza bu pattern yetişiyor.
Aşağıdaki basit web-server uygulamasında bu yapının nasıl çalıştığını görebilirsiniz.
Örnek uygulamanın kodlarına buradan ulaşabilirsiniz. Başka bir yazıda görüşmek üzere...
Kaynak: Justin Garrison, Kris Nova - Cloud Native Infrastructure Patterns for Scalable Infrastructure and Applications in a Dynamic Environment
Top comments (0)