मुझे अपने पर्यावरण चर को कैसे संग्रहित करना चाहिए?


11

यह पर्यावरण चर / संरचना के बारे में तरीकों और सलाह के बारे में एक बहुत व्यापक प्रश्न है। लेकिन आखिरकार मैं 'मेरे पर्यावरण चर को कैसे स्टोर करना चाहिए' के ​​बहुत ही विशिष्ट प्रश्न के उत्तर की तलाश कर रहा हूं।

सबसे पहले कुछ स्पष्टीकरण:

  • मेरे लिए एक वातावरण 3 से 10 सर्वरों तक हो सकता है और यह एक विशिष्ट ग्राहक के बुनियादी ढांचे को रखने का एक तरीका है।
  • प्रत्येक वातावरण के अंदर कुछ चर होते हैं जो ज्यादातर कुछ प्रमुख इनपुट (नाम, आकार आदि) से स्वचालित रूप से उत्पन्न होते हैं।

जैसा कि यह अभी खड़ा है, हम अपने सभी पर्यावरण चर जैसे संरचना में संग्रहीत कर रहे हैं:

<playbook>.yml                   # Various playbooks for deployment
roles/windows                    # Ansible role for Ubuntu
roles/ubuntu                     # Ansible role for Ubuntu
config/hosts/<name>.yml          # Ansible inventory
config/hosts/vars/<name>.json    # Environment specific variables 

अभी ऊपर के गिट रिपॉजिटरी में सबमॉड्यूल के रूप में कॉन्‍फ़िगर किया गया है। चूँकि परिवर्तनशील फ़ाइल में बार-बार परिवर्तन होता है, इस कारण डेटा में परिवर्तन होता है, एक बार, दो बार या तीन बार कमिट करने के बीच, परिवर्तन को ट्रेस करना अधिक कठिन होता है।

जैसा कि मैं व्यक्तिगत रूप से इसे आगे बढ़ता हुआ देख रहा हूं, हमें अपने सभी ग्राहक चर को केंद्रीकृत / स्केलेबल तरीके से संग्रहित करने की तलाश में होना चाहिए और फिर इसे एक गतिशील सूची के साथ साथ हुक करना चाहिए ।

मैं समझता हूं कि कुछ ऐसी प्रौद्योगिकियां हैं, जो कंसूल जैसी आवश्यकता के अनुसार काम कर सकती हैं, लेकिन वे ऐसे माहौल में सबसे अच्छा काम करती हैं, जो छोटे से बहुत भिन्न होने के बजाय एक बड़ा अनुप्रयोग प्रदान करता है।

मैं अनिवार्य रूप से हमें एक इन्वेंट्री स्क्रिप्ट लिखने के लिए देख रहा हूं और फिर हमारे सभी डेटा को कुछ नॉट-फॉर-उद्देश्य डेटाबेस में डाल दिया है और फिर कुछ भी नहीं बदला जा रहा है। मैं इसे एक अनुमान के तौर पर देख रहा हूं कि वर्तमान में हमारे द्वारा संग्रहित किए जाने वाले बहुत सारे डेटा पर संभावित रूप से ट्रिम हो सकता है और शायद डेटा को स्टोर करने के अलग-अलग तरीकों पर गौर करने के बजाय इसे फिर से कार्य करता है।

मुझे उम्मीद है कि किसी को कोड के रूप में बुनियादी ढांचे को लागू करने में किसी तरह का अनुभव होगा जब एक, दो या तीन विशाल लोगों के विपरीत बहुत सारे छोटे वातावरण से निपटना होगा।

कोई सुझाव?

जवाबों:


13

मैंने पर्यावरण चर पर दो रन बनाए हैं जो एक स्केलेबल तरीके से कर रहे हैं और न ही सही खत्म हुआ है, क्योंकि जैसा कि मैंने खोजा है, सही पाने के लिए बहुत मुश्किल चीज है। मैं नीचे दिए गए अपने दोनों अनुभवों का सारांश दूंगा:

सामान्य तथ्य

  • पर्यावरण चर को मूल स्रोत कोड से एक अलग भंडार में संग्रहीत किया जाता है (वे एक साथ प्रस्तुत किए जाते हैं लेकिन अभी भी भंडार पर आधारित होते हैं)
  • विरूपण साक्ष्य के लिए एक अलग "बिल्ड" प्रक्रिया है और यह चर है।
  • है वातावरण चर के लिए एक अलग रिहाई प्रक्रिया। यदि आप पर्यावरण चर बदलना चाहते हैं तो आपको उसी परिवर्तन समीक्षा बोर्डों और सामान्य रूप से जाना होगा

कौंसल केवी जोड़े का उपयोग करना

पर्यावरण चर एक विरूपण साक्ष्य भंडार (कभी मूल गिट रेपो) से लोड किए जाते हैं और उदाहरण के लिए एक नामांकित केवी जोड़ी पेड़ में लोड किए जाते हैं

/env/dev1/my/application/v1.1.1

जहां पूर्ववर्ती देव 1 पर्यावरण का नाम है, मेरा / अनुप्रयोग अनुप्रयोग नामस्थान है, और v1.1.1 उपयोग करने के लिए पर्यावरण चर का संस्करण है।

डेवलपर्स के लिए ये सभी चीजें अदृश्य हैं। रनटाइम के दौरान प्लेटफ़ॉर्म यह जाँचता है कि वर्तमान कॉन्सल क्लस्टर में पर्यावरण मौजूद है (यदि इसमें कोई समस्या नहीं है और यह त्रुटियां हैं), तो यह एप्लिकेशन नेमस्पेस के लिए सबट्री की जाँच करता है (इस तरह कोई क्रॉस संदूषण नहीं हो सकता है जहाँ एक ऐप एक और एप्लिकेशन संस्करण का संदर्भ) तब विन्यास का वर्जन नंबर ले जाने योग्य विरूपण साक्ष्य से जुड़े लेबल से लिया जाता है। इस लेबल को अपडेट करना यहां महत्वपूर्ण बात है क्योंकि इसका मतलब है कि अगर हम दोनों उत्पादन डेटा केंद्रों को खो देते हैं, तो हम अपनी तैनाती योग्य कलाकृतियों से मेटा डेटा को सरल रूप से पढ़कर और केवी स्टोर में सभी पर्यावरण चर को लोड करके पर्यावरण को फिर से खड़ा कर सकते हैं।

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

एम्बेडेड के साथ एक "परिनियोजन" कलाकृतियों को संग्रहीत करना

यह कसकर विन्यास के संस्करण के लिए विरूपण साक्ष्य का सटीक संस्करण है। यदि आपने कॉन्फ़िगरेशन बदल दिया है तो आपको इस परिनियोजन विरूपण साक्ष्य का पुनर्निर्माण करना होगा।

परिनियोजन विरूपण साक्ष्य ही अनिवार्य रूप से एक यमल फ़ाइल थी जिसमें यूआरएल को भरोसेमंद बाइनरी और उससे जुड़े सभी कॉन्फ़िगरेशन शामिल थे।

प्लेटफ़ॉर्म में चर को पढ़ने के लिए घटक होता है और फिर शुरू होने पर उन्हें एप्लिकेशन के प्रोसेस ट्री में डाल दिया जाता है।

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

यह डेवलपर्स के लिए अपने आवेदन में तर्क बनाने और तर्क बनाने के लिए बस थोड़ा कठिन बनाता है जो चर के आधार पर उसके व्यवहार को बदल देगा ताकि वे उपयुक्त परीक्षण चक्रों के बिना बदलाव में फिसल सकें।

बोनस अंक

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

बेशक रहस्य प्रबंधन कीड़े की अपनी इच्छा है। लेकिन यह शायद गौर करने लायक है।


2
पुन: आवेदन रहस्य, मैं तिजोरी ( vaultproject.io ) पर एक नज़र डालने का सुझाव दूंगा क्योंकि यह भी हैशिकॉर्प के टूलचिन का एक हिस्सा है और कौंसुल (और उस बॉक्स से अन्य उपकरण) के साथ बड़े करीने से एकीकृत करता है
माइकल

मैं वास्तव में बहुत बड़े हैशिकॉर्प सामान आमतौर पर दिया तिजोरी से अभिभूत हो गया है। आवश्यक रूप से उनके उत्पाद बनाम बाजार के बाकी हिस्सों में तीन प्रमुख अंतराल - 1. 'राज़ के लिए रहस्य' अनिवार्य रूप से मॉडल को उबालता है। मैं HSM का उपयोग कर रहा हूँ या इसका उपयोग कर रहा हूँ। लेकिन अनिवार्य रूप से यह सिर्फ व्यापार रहस्य है। 2. उपकरण संगतता, उनके अन्य उपकरणों के विपरीत प्लगइन्स के लिए कोई समर्थन नहीं है। मूल्य। जब कंपनी ने मुझे बताया कि मुझे लगा कि तिजोरी महंगी है, तो मुझे यकीन नहीं हुआ। उन्होंने बहुत सस्ते होने के लिए उत्पादों को अस्वीकार कर दिया है, यह गड़बड़ है। लेकिन तिजोरी इतनी अधिक थी कि वे इस पर विचार भी नहीं करते थे।
हविंडिन

यह ध्यान देने योग्य है कि यदि आप सशुल्क संस्करण का उपयोग करते हैं तो यह केवल लागत-निषेधात्मक है । वॉल्ट का मुख्य उत्पाद ओपन-सोर्स है। बेशक वे अपनी साइट पर समर्थक / उद्यम संस्करणों के लिए मूल्य निर्धारण को सूचीबद्ध नहीं करते हैं, इसलिए मुझे नहीं पता कि उन संस्करणों के लिए यह कैसे [अन] उचित है।
एड्रियन

हम्म, मैंने अपनी टिप्पणी से उस चूक को नोटिस नहीं किया, हालांकि मेरी तिजोरी के साथ मेरी पहली दो समस्याएं अभी भी खड़ी हैं। हालांकि, अर्हता प्राप्त करने के लिए, वे अन्य हैशिकॉर्प उत्पादों की तुलना में तिजोरी पर मेरे विचार हैं, जो कि मुझे लगता है कि सभी बहुत अच्छे हैं। बाजार में अन्य उत्पादों की तुलना में प्रदर्शन एक समान कार्य संभवत: सममूल्य पर होता है, बस किसी कारण से उम्मीद से बहुत अधिक महंगा है।
हविंदिन

क्या आप "उनके आवेदन में तर्क का निर्माण कर सकते हैं जो चर के आधार पर उसके व्यवहार को बदल देगा ताकि वे उपयुक्त परीक्षण चक्रों के बिना बदलावों में फिसल सकें।" कुछ सामान्य जैसा लगता है, लेकिन मैं अभी एक ठोस उदाहरण की कल्पना नहीं कर सकता।
केंच्यु

3

यदि आपके वातावरण प्रति ग्राहक हैं, तो मैं आपके विशिष्ट मामले में प्रति ग्राहक एक रिपॉजिटरी रखने का सुझाव दूंगा । (सामान्य तौर पर यह प्रति पर्यावरण भंडार है।) इस भंडार में पर्यावरण चर, सूक्षम चर और सूची के लिए एक मानक निर्देशिका संरचना, दृढ़ता से एन्क्रिप्ट किए गए रहस्य (खाता पहुंच टोकन, निजी कुंजी, आदि) होंगे। आप उन रिपॉजिटरी में कोड सबमिट करेंगे। मैं शायद इसे कई रिपॉजिटरी में करूंगा। पर्यावरणीय भूमिकाओं और मॉड्यूल के लिए एक, रखरखाव और परिनियोजन स्क्रिप्ट के लिए एक, पर्यावरण में चल रहे प्रत्येक प्रमुख अनुप्रयोग के लिए एक।

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

यदि आप एक विरूपण साक्ष्य भंडार का उपयोग कर रहे हैं , तो सुनिश्चित करें कि कलाकृतियों को ठीक से संस्करण दिया गया है और उन संस्करणों को पर्यावरण चर में ठीक से निर्दिष्ट किया गया है।

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


केवल एक आपत्ति: रहस्यों को एक संस्करण नियंत्रण भंडार में नहीं जाना चाहिए जब तक कि उसके पास सख्त अभिगम नियंत्रण समर्थन न हो। Git नहीं - जो कोई भी रिपॉजिटरी को खींचता है, वह रहस्यों को देख सकता है, जो एक समस्या हो सकती है - वे अब रहस्य नहीं हैं।
डैन कॉर्निलेस्कु

अच्छी पकड़। यह एन्क्रिप्टेड रहस्य है। डिक्रिप्शन कुंजी ट्रामिएंट हैं।
जिरी क्लौडा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.