2016-02-10 12 views
5

BağlamBarındırıcı, ana bilgisayar veya bellekte saklanan bir kap çalıştırırken mi eserler? Yazıyorum

uygulamaları, üretim sayfa fragmanı önbelleğe yapıyor (bunu recomputing önlemek amacıyla belirli bir fragmanın html sonucunu depolamak) raylar.

Bunu yapmanın genel yolu, parçayı memcache veya redis'te depolamaktır. Raylarda varsayılan önbellek depolama seçeneği, FS önbelleğini (parçayı dosya olarak saklamak) kullanmaktır, çünkü hiçbir bağımlılığa sahip olmamanızın avantajı vardır (memcache veya redis'i yapılandırmanız gerekmez). Hafıza önbelleğe alma işleminden daha yavaş olduğundan ve önbelleğinizi elle temizlemeniz gerektiğinden, daha az popüler bir seçenektir; bununla birlikte, eski anahtarların memcache veya yeterince yapılandırılmış bir redis kullanılarak otomatik olarak temizlenmesi sağlanır. dağıtmak üzerinde, yeni bir konteyner otomatik olarak tüm önceki önbellek dosyalarını bırakarak, koştum: Bir süre liman işçisi kullandıktan sonra

Soru

, önceki önbellek dosyalarını tasfiye artık sorun olmadığını biliyoruz. Bu, muhtemelen bellek depolama kullanmaktan daha yavaştır, ancak, bu, hızlı yan projeler önyükleme yaparken oldukça serin olan herhangi bir yapılandırma gerektirmeme avantajına sahiptir.

Ama sonra merak ediyorum: gerçekten fs'de yazılan bir kapta yazıyor mu, yoksa RAM'de mi yazıyor? Bu bir endişe kaynağıdır, çünkü bu, buna güvenmek anlamına gelebilir, özellikle de aynı sunucudaki birçok projeyle, RAM'i çok hızlı bir şekilde doyurabilir.

cevap

3

Buradaki dava, Docker'ın işlem ne yapıyorsa onu yaptığıdır. Docker, geleneksel bir VM değil, bir işlemi yürütmek için sadece bir fantezi yoludur. Muhtemelen bunu biliyorsunuzdur ama cevabımın temelini belirlemek için tekrar ediyorum. Docker, işleminizin ne yapmak istediğine itaat eder. İşleminizin diskte bir dosya sistemi önbelleği kullanmasını istediğinizi belirtirseniz ve bu işlem önbelleğe yazılırsa, Docker bu sonucu bellekte saklamaz. Diskin önbelleğine yazacaktır. Geçici konteynerlerin burada bahsettiğiniz gibi avantajları vardır, yeni bir kap açtığınızda dosya önbelleği temizlenir. İşleminiz diske yazıldığında, Docker özel UnionFS'lerine (auf veya btrfs gibi birkaç farklı depolama arka planından birini kullanabilen) yazıyor, birkaç seçenek var). Docker bu "özel" dosya sistemini iki nedenden ötürü kullanır: Aynı temel görüntüden dosyaların kopyalanmasını önlemek ve temel görüntünün paylaşılan katmanlarından işleminize özgü dosya sistemi değişikliklerini izole etmek için. Mekanizmanın spesifik terimi copy-on-write'dur. Önemli olan, Docker'ın dosya sistemine yazdığını söylemesi, Docker'ın yaptığı şey. Hafızaya bir şeyler yazmıyor ve dosyalar dosya sistemine yazılıyormuş gibi davranıyor: Aslında bu şeyleri diske yazıyor. Depolama sürücülerinin konusu derin ve karmaşıktır, ancak bu şeyler için documentation, tüm Docker belgelerinde olduğu gibi, iyi yazılmış ve doğrudur. Ancak emin olun ki, işleminizi yürütecek sihirli bir şey yoktur. Docker'ın söylediği şeyi yaptığını güvenle söyleyebilirsin.

+0

Mükemmel, teşekkürler :) –

+1

Bunu okuyan ve önbelleğe almak için kapsayıcıları kullanmakla ilgilenen herkes için: yanıtla ilişkilendirilen belgeler, bir dosyaya ilk kez bir dosya yazılırken bir performans maliyeti olduğunu belirtmektedir. Bu, önbelleğe alma sistemleri için bir sorun olabilir, nasıl davrandığını görmeye çalışacağım. –

+0

Sonuçlarınızla çok ilgileniyorum. Sonuçları veya sonuçları aldığınızda blogunuzu veya bir şeyinizi buraya gönderebilir misiniz? – L0j1k

İlgili konular