2016-02-10 7 views
5

KontekstCzy artefakty w doku są wyświetlane podczas uruchamiania kontenera przechowywanego w hoście lub w pamięci hosta?

piszę szyn aplikacji, robiąc buforowanie strona fragment na produkcji (przechowywanie wynik HTML konkretnego fragmentu w celu uniknięcia ponowne obliczanie go).

Zwykły sposób na zapisanie fragmentu w memcache lub redis. Domyślną opcją przechowywania pamięci podręcznej w szynach jest użycie buforowania FS (przechowywanie fragmentu jako pliku), ponieważ ma tę zaletę, że nie ma żadnych zależności (nie musisz konfigurować memcache ani redis). Jest to jednak mniej popularna opcja, ponieważ jest wolniejsza od buforowania pamięci i musisz wyczyścić pamięć podręczną ręcznie, podczas gdy możesz polegać na starszych kluczach, które mają być automatycznie oczyszczane za pomocą memcache lub odpowiednio skonfigurowanego redisu.

Pytanie

Po użyciu docker na chwilę, zdaję sobie sprawę, że oczyszczenie poprzednich plików cache nie jest już problem: na wdrażanie, nowy pojemnik jest prowadzony, automatycznie spada wszystkie poprzednie pliki cache. Prawdopodobnie jest to wolniejsze niż używanie pamięci, ale ma tę zaletę, że nie wymaga żadnej konfiguracji, co jest całkiem fajne podczas ładowania szybkich projektów.

Ale wtedy zastanawiam się: pisze w pojemniku fs naprawdę pisząc w fs, czy zamiast tego pisze w pamięci RAM? Jest to problem, ponieważ oznaczałoby to, że poleganie na tym może bardzo szybko nasycić pamięć RAM, szczególnie w przypadku wielu projektów na tym samym serwerze.

Odpowiedz

3

Sprawa jest taka, że ​​Docker robi wszystko, co robi proces. Docker jest po prostu fantazyjnym sposobem na uruchomienie procesu, a nie tradycyjną maszyną wirtualną. Prawdopodobnie wiesz o tym, ale powtarzam tylko po to, aby stworzyć podstawę mojej odpowiedzi. Docker jest posłuszny temu, co chce zrobić twój proces. Jeśli określisz, że chcesz, aby proces używał pamięci podręcznej systemu plików na dysku, a proces ten zapisuje w pamięci podręcznej, wówczas Docker nie zapisze tego wyniku w pamięci. Będzie pisać do pamięci podręcznej na dysku. Masz rację, że efemeryczne pojemniki mają zalety, o których wspomniałeś tutaj, przy czym pamięć podręczna plików jest czyszczona po zakręceniu nowego kontenera.

Kiedy twój proces zapisuje na dysk, Docker pisze do swojego specjalnego UnionFS (który może używać jednego z kilku różnych mechanizmów przechowywania, takich jak aufs lub btrfs, jest kilka możliwości). Docker używa tego "specjalnego" systemu plików z dwóch powodów: Aby uniknąć powielania plików z tego samego podstawowego obrazu i odizolować zmiany systemu plików specyficzne dla procesu ze współdzielonych warstw obrazu podstawowego. Określony termin dla mechanizmu to copy-on-write. Chodzi o to, że kiedy Docker mówi, że pisze do systemu plików, to właśnie robi Docker. Nie zapisuje rzeczy w pamięci i zachowuje się tak, jak to jest zapisywane w systemie plików: faktycznie pisze to na dysku. Temat sterowników pamięci masowej jest głęboki i złożony, ale numer documentation jest dobrze napisany i dokładny, tak jak w przypadku całej dokumentacji Docker. Bądźcie jednak pewni, że nie ma magii, która poprowadzi proces. Możesz bezpiecznie założyć, że Docker robi to, co mówi.

+0

Idealne, dziękuję :) –

+1

Każdemu, kto to czyta i jest zainteresowany wykorzystaniem kontenerów fs do buforowania: dokumentacja związana w odpowiedzi wspomina o kosztach wydajności przy pisaniu pliku po raz pierwszy na unijnych systemach plików. Może to być problem dla systemów buforujących, spróbuję sprawdzić, jak się zachowuje. –

+0

Jestem bardzo zainteresowany wynikami. Czy możesz napisać tutaj, a może link do swojego bloga lub coś, gdy masz wyniki? – L0j1k

Powiązane problemy