2015-06-03 9 views
11

में अभिसरण और बेवकूफता के बीच अंतर शेफ में अभिसरण और बेवकूफता के बीच बुनियादी अंतर क्या है?शेफ

+0

आपकी समस्या क्या है? अभिसरण एक शेफ चलाने में चरणों में से एक है (इसके बारे में http.docs.chef.io पर एक खोज करें), idempotency f (x) = f (f (x)) के लिए गणित शब्द है: I अंतिम परिणाम होना चाहिए इसके परिणाम पर फ़ंक्शन को कितनी बार बुलाया जाता है => केवल कुछ आवश्यक => ऐसी फ़ाइल को स्पर्श न करें जो सामग्री पहले ही अपेक्षित सामग्री – Tensibai

उत्तर

27

अभिसरण और मूर्खता शेफ-विशिष्ट नहीं हैं। वे आमतौर पर कॉन्फ़िगरेशन प्रबंधन सिद्धांत के लिए जिम्मेदार होते हैं, हालांकि अन्य क्षेत्रों में उल्लेखनीय रूप से गणित का उपयोग किया जाता है।

चलो अधिक बुनियादी, बेवकूफ के साथ शुरू करते हैं। हम idempotent के गणितीय उपयोग को अनदेखा करने जा रहे हैं, और इसके बारे में बात करते समय कॉन्फ़िगरेशन प्रबंधन लोगों का क्या मतलब है इसके बजाय ध्यान केंद्रित करें। यह है: "एक ही कार्रवाई के कई अनुप्रयोगों के सिस्टम सिस्टम पर दुष्प्रभाव नहीं होते हैं।" एक idempotent आपरेशन के एक साधारण उदाहरण mkdir -p है:

mkdir -p /var/lib/statedir/myapp 

कोई फर्क नहीं पड़ता कि कितनी बार हम इस आदेश को चलाने के लिए, उस में उस वृक्ष बनाया जा रहा परिणाम देगा। बेवकूफ संचालन के बारे में यह कहने का एक और तरीका यह है कि, "उपकरण को चालू करने से पहले और बाद में सिस्टम को पहली बार नहीं बदला जाता है।"

अब अभिसरण के साथ इसके विपरीत। आम तौर पर, अभिसरण करने के लिए [लोगों या] चीजों को एक साथ लाने का मतलब है। कॉन्फ़िगरेशन प्रबंधन में, अभिसरण का अर्थ है सिस्टम सिस्टम को परिभाषित नीति के अनुरूप लाएं। यही है, सिस्टम को केवल तभी किया जाता है जब उन्हें बनाने की आवश्यकता हो। एक संसृत आपरेशन का एक सरल उदाहरण है:

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

इस अभिसरण है क्योंकि हम केवल mkdir आदेश अगर वांछित निर्देशिका मौजूद नहीं है क्रियान्वित कर रहे हैं। हम इसे "परीक्षण और मरम्मत" ऑपरेशन भी कहते हैं। यही है, हम उस विशिष्ट चीज़ की वर्तमान स्थिति का परीक्षण करते हैं, जिसे हम प्रबंधित कर रहे हैं, और उसके बाद उस स्थिति में एक विशिष्ट कमांड या ऑपरेशन के साथ इसे सुधारें। यही कारण है कि बावर्ची इस तरह एक संसाधन के साथ पर्दे के पीछे करता है:

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

जिस तरह से हम (बावर्ची) इस बारे में बात करते है कि बावर्ची idempotent राज्य विभिन्न संसाधनों द्वारा घोषित करने के लिए प्रणाली कवरेज़ की कार्रवाई करता है है। शेफ में हर संसाधन घोषणात्मक है, और संसाधन की वर्तमान स्थिति के बारे में एक परीक्षण करता है, और फिर उस से मेल खाने के लिए सिस्टम की मरम्मत करता है।

शेफ कैसे काम करता है इसके बारे में खरपतवारों में गहराई से पाने के लिए, इसमें एक "संकलन" चरण और एक शेफ रन में "अभिसरण" चरण होता है। "संकलन" चरण में, यह नोड पर रूबी व्यंजनों का मूल्यांकन करता है, और यह संसाधन वस्तुओं की तलाश में है जो इसे "संसाधन संग्रह" में जोड़ता है। एक बार जब यह सभी व्यंजनों का मूल्यांकन कर लेता है, तो यह "अभिसरण" चरण में प्रवेश करता है जहां यह संसाधन संग्रह पर पुनरावृत्त होता है, संसाधनों को वांछित स्थिति में रखने के लिए उचित कार्रवाई करता है, जिससे उपयोगकर्ता बनाए जाते हैं, फाइलें लिखी जाती हैं, पैकेज स्थापित होते हैं, इत्यादि।

+0

है जो वास्तव में एक महान स्पष्टीकरण था !! मैं शेफ में अभिसरण अवधारणा से अवगत था लेकिन मूर्खता नहीं। अभिव्यक्ति के लिए धन्यवाद। :) – dextren

+0

-1। मुझे यह विशेष रूप से स्पष्ट स्पष्टीकरण नहीं मिला है; यह बेवकूफता और अभिसरण ध्वनि बनाता है जैसे कि वे मूल रूप से एक ही चीज हैं, क्योंकि आप दो अवधारणाओं के उदाहरणों के रूप में उपयोग किए जाने वाले आदेशों को अर्थात् समान रूप से समान हैं। एक idempotent-but-not-convergent कमांड का एक उदाहरण (या एक अभिसरण-लेकिन-नहीं-idempotent कमांड, अगर ऐसी चीज भी समझ में आता है) स्पष्टता जोड़ देगा। –

संबंधित मुद्दे