2015-06-03 14 views
11

Jaka jest podstawowa różnica między konwergencją a idempotencją u szefa kuchni?Różnica między zbieżnością a idempotencją u szefa kuchni

+0

Jaki jest twój problem? Konwergencja jest jedną z faz w prowadzeniu szefa kuchni (wykonaj wyszukiwanie na http.docs.chef.io o tym), idempotencja jest terminem matematycznym dla f (x) = f (f (x)): Tzn. być tym samym niezwiązanym z tym ile razy funkcja jest wywoływana na jej wyniku => zrobić coś tylko z potrzebnego => nie dotykaj pliku, którego treść jest już oczekiwaną treścią – Tensibai

Odpowiedz

27

Konwergencja i idempotencja nie są specyficzne dla szefa kuchni. Zwykle są one przypisywane do teorii zarządzania konfiguracją, choć mają zastosowanie w innych dziedzinach, w szczególności w matematyce.

Zacznijmy od bardziej podstawowego, idempotentnego. Zignorujemy matematyczne użycie idempotentnych i skupimy się na tym, co ludzie kierujący konfiguracją mają na myśli, kiedy o tym rozmawiają. To znaczy: "wiele aplikacji tego samego działania nie ma skutków ubocznych w stanie systemu." Prostym przykładem operacji idempotent jest mkdir -p:

mkdir -p /var/lib/statedir/myapp 

Nie ważne ile razy uruchomić to polecenie, to spowoduje, że drzewo jest tworzony. Innym sposobem na stwierdzenie tego o operacjach idempotentnych jest "ciągłe uruchamianie narzędzia nie zmienia systemu po raz pierwszy."

Teraz kontrastujemy z konwergencją. Ogólnie rzecz biorąc, zbieżność oznacza połączenie [ludzi lub] rzeczy. W zarządzaniu konfiguracją konwergencja oznacza dostosowanie stanu systemu do określonej polityki. Oznacza to, że zmiany wprowadzane są w systemie tylko wtedy, gdy trzeba je wprowadzić. Prostym przykładem działania zbieżnym jest:

if [ ! -d /var/lib/statedir/myapp ]; then 
    mkdir -p /var/lib/statedir/myapp 
fi 

ten jest zbieżny, bo jesteśmy tylko wykonując polecenia mkdir jeśli żądany katalog nie istnieje. Nazywamy to również operacją "testuj i napraw". Oznacza to, że testujemy bieżący stan konkretnej rzeczy, którą zarządzamy, a następnie naprawiamy ją za pomocą określonego polecenia lub operacji, jeśli nie jest ona w tym stanie. To, co robi Chef za kulisami z zasobu tak:

directory '/var/lib/statedir/myapp' do 
    recursive true 
end 

Sposób, w jaki (Chef) mówić o tym, że szef kuchni trwa idempotent działania zbiegają systemu do stanu deklarowanego przez różnych zasobów. Każdy zasób w Chef jest deklaratywny i wykonuje test na temat bieżącego stanu zasobu, a następnie naprawia system, aby go dopasować.

Aby wniknąć w głąb chwastów o tym, jak działa Chef, ma on fazę "kompilacji" i fazę "zbieżności" w biegu szefa kuchni. W fazie "kompilacji" ocenia receptury Rubiego na węźle i szuka obiektów zasobów, które dodaje do "kolekcji zasobów". Po dokonaniu oceny wszystkich receptur, wchodzi w fazę "zbierania", w której dokonuje iteracji nad zbiorem zasobów, podejmując odpowiednie działania, aby umieścić zasoby w pożądanym stanie, w którym użytkownicy są tworzeni, zapisywane są pliki, instalowane są pakiety, i tak dalej.

+0

To było naprawdę świetne wyjaśnienie !! Byłem świadomy koncepcji konwergencji u szefa kuchni, ale nie idempotencji. Dziękuję za artykulację. :) – dextren

+0

-1. Nie uważam tego za szczególnie jasne wyjaśnienie; sprawia, że ​​idempotencja i konwergencja brzmią tak, jakby były w zasadzie tym samym, ponieważ polecenia, których używasz jako przykłady dwóch pojęć, są semantycznie identyczne. Przykład polecenia idempotent-but-not-convergent (lub polecenie convergent-but-not-idempotent, jeśli coś takiego ma sens) dodawałoby jasności. –

Powiązane problemy