0

AWS'de birden çok bölgeye dağıtılması gereken basit bir web uygulaması oluşturuyorum. Uygulama, ayrı bir servis tarafından yönetilen bazı dinamik yapılandırma gerektirir. Bu hizmet aracılığıyla yapılandırma değiştirildiğinde, tüm bölgelerdeki tüm web uygulaması örneklerine yayılması için bu değişikliklere ihtiyacım var.Uygulama yapılandırma dosyalarını depolamak için S3'ü kullanma

Bunu yapmak için DynamoDB ile çapraz bölge çoğaltması kullanmayı düşündüm, ancak her bölgede ve çoğaltma konsolunda DynamoDB'yi çalıştırmanın ek maliyetine katlanmak istemiyorum. Sonra düşünce, doğası gereği enine kesiti olan S3'ü kullanmamı sağladı.

Temel olarak, yapılandırma hizmeti tüm yapılandırmaları S3'e statik JSON dosyaları olarak yazar. Her web uygulaması örneği, son kontrolden beri yapılandırma dosyalarından herhangi birinin değişip değişmediğini görmek için S3'ü periyodik olarak kontrol eder ve gerekirse yeni yapılandırmayı indirir. Yapılandırma değişiklikleri zamana duyarlı değildir, bu nedenle her 5/10 dakikada bir değişikliklerin yoklaması yeterli olur.

Daha önce uygulama yapılandırmalarını yönetmek için benzer bir yaklaşım kullandınız mı? Bunun akıllı bir çözüm olduğunu mu düşünüyorsunuz yoksa daha iyi tavsiyeleriniz var mı?

+2

S3 "doğal olarak çapraz bölge" değil. Her bir kepçe belirli bir bölgededir ve bu kepçedeki nesneler için talepler yalnızca bu bölgedeki uç noktalardan sunulur. 'Bucket-name.s3.amazonaws.com' yapısı, birleşik bir hizmetin görünümünü verir, ancak S3, her bir kronun alt etki alanını gerçek doğru bölgesel son noktaya işaret etmek için kendi DNS'ini güncelleştirmesidir.Ayrıca, istenirse hemen tüm servislere bölgeler arasında erişilebilir, ancak kendinizle ilgili endişe ve veri aktarım ücretleri söz konusudur. –

cevap

1

Bu yapılandırma için doğru araç, yapılandırmanın boyutuna ve gereksinim duyduğunuz tanecikliğe bağlıdır.

Uygulamanıza her bölgede hizmet vermek için DynamoDB ve S3'ü tek bir bölgeden kullanabilirsiniz. S3'teki bir yapılandırma dosyasını tüm bölgelerden okuyabilir ve yapılandırma kayıtlarını tüm bölgelerden tek bir DynamoDB tablosundan okuyabilirsiniz. Dünyadaki mesafeden dolayı bir miktar gecikme vardır, ancak konfigürasyonu okumak için çok fazla sorun olmamalıdır.

Yapılandırmayı her yüklediğinizde tüm yapılandırma kümesine ihtiyacınız varsa, S3'ü kullanmak daha mantıklı olabilir. Ancak, büyük bir yapılandırmanın küçük bölümlerini, uygulamanızın farklı bölümleri ve farklı zamanlarda ve programlarda okumanız gerekirse, DynamoDB'de saklamak daha mantıklıdır.

Her iki seçenekte de yapılandırma maliyeti küçüktür, çünkü S3'teki bir metin dosyasının maliyeti ve birkaçı bu dosyaya gönderilirse, neredeyse boş olmalıdır. DynamoDB'de aynı düşük maliyet beklenir çünkü muhtemelen birkaç KB veriye sahiptir ve saniyedeki okuma sayısı çok düşüktür (saniyede 5 okuma kapasitesi, fazlasıyla yeterlidir). Verileri tüm bölgelere çoğaltmaya karar verseniz bile, yine de neredeyse bedava olacaktır.

1

Tam olarak önerdiğiniz şekilde çalıştığını yazdığım bir uygulama var ve müthiş çalışıyor. Belirtildiği gibi, S3 'doğal olarak çapraz bölge' değildir, fakat çoklu kullanılabilirlik bölgeleri boyunca doğası gereği dayanıklıdır ve çapraz bölge çoğaltmasıyla birleştirilenler yeterli olmaktan daha fazla olmalıdır.

Benim durumumda, uygulamam yapılandırma değişikliklerine de zaman açısından duyarlı değil, ancak uygulamaların düzenli olarak yapılmasını sağlamaz (benim durumumda saat başına 1 kez veya her uzun çalışan işten sonra)), Ayrıca SNS uç noktalarına abone olan her uygulamaya sahibim, böylece yapılandırma dosyası S3'te değiştiğinde, bir SNS olayı ortaya çıkar ve bir değişikliğin meydana geldiğine dair uygulamalara bildirilir - bu nedenle bazı durumlarda uygulama yapılandırma değişikliklerini hemen alır, ancak her ne sebeple olursa olsun, SNS olayını derhal işleme koyamazlarsa, her bir saatin en üstünde, sunucu yeniden başlatıldığında ve/veya en kötü durumda, her 60 dakikada bir değişiklik yapmak için S3'ü seçerek "yakalayacaklardır".