আমার পরিবেশের পরিবর্তনশীলগুলি কীভাবে সংরক্ষণ করব?


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 হ'ল পরিবেশের পরিবর্তনশীলগুলির সংস্করণ।

বিকাশকারীদের কাছে এই সমস্ত জিনিস অদৃশ্য। রানটাইমের সময় প্ল্যাটফর্মটি পরীক্ষা করে যে বর্তমান কনসাল ক্লাস্টারে পরিবেশ বিদ্যমান (এটি যদি কোনও সমস্যা না হয় এবং এটির ত্রুটিগুলি আউট হয়) তবে এটি অ্যাপ্লিকেশন নেমস্পেসের জন্য সাবট্রিটি পরীক্ষা করে (এইভাবে কোনও অ্যাপ্লিকেশন যেখানে কোনও ক্রস দূষণ হতে পারে না) অন্য অ্যাপ্লিকেশনগুলির রেফারেন্স উল্লেখ করে) তারপরে কনফিগারেশনের সংস্করণ নম্বরটি ডিপ্লোয়েবল আর্টফ্যাক্টের সাথে সংযুক্ত লেবেল থেকে নেওয়া হয়েছে। এই লেবেলটি আপডেট করা এখানে মূল বিষয় কারণ এটির অর্থ হ'ল আমরা যদি উভয় উত্পাদন ডেটা কেন্দ্র হারাতে পারি তবে আমরা আমাদের কার্যকর করার যোগ্য আর্টিক্টস থেকে মেটা ডেটা সহজভাবে পড়ে এবং কেভি স্টোরের সমস্ত পরিবেশের ভেরিয়েবল লোড করে পরিবেশকে আবার দাঁড়াতে পারি ।

এই পদ্ধতির বিকাশকারীদের সাথে সর্বদা সমস্যা , এবং আমি প্রতি একক সময় বলতে চাইছি, পরিবেশে কনফিগারেশন পরিবর্তনগুলি স্লিপ করার একটি উপায় খুঁজে পেয়েছি যা অ্যাপ্লিকেশনটি কীভাবে চালিত হবে তার উল্লেখযোগ্য প্রভাব রয়েছে। কারণ কোডের পরিবর্তনের চেয়ে কনফিগারেশন পরিবর্তনগুলি অনুমোদিত হওয়া সহজ হয়ে যায়।

এম্বেড থাকা ভেরিয়েবলগুলি সহ একটি "ডিপ্লয়মেন্ট" আর্টিফ্যাক্ট সংরক্ষণ করা

এটি দৃtif়ভাবে নিদর্শনগুলির সঠিক সংস্করণটিকে কনফিগারেশনের সংস্করণে সংযুক্ত করে। আপনি যদি কনফিগারেশন পরিবর্তন করেন তবে আপনাকে এই স্থাপনার নিদর্শনটি পুনর্নির্মাণ করতে হবে।

স্থাপনার নিদর্শনটি নিজেই মূলত একটি ইয়ামল ফাইল ছিল যার মধ্যে রিলিজযোগ্য বাইনারি এবং এর সাথে সংযুক্ত সমস্ত কনফিগারেশনের URL ছিল।

প্ল্যাটফর্মটিতে ভেরিয়েবলগুলি পড়ার উপাদান রয়েছে এবং তারপরে এটি শুরু হওয়ার সাথে সাথে অ্যাপ্লিকেশনটির প্রসেস ট্রিতে আউট করে।

এটি এখন পর্যন্ত অনেক বেশি সফল হয়েছে কারণ এমন একটি নিদর্শন রয়েছে যা আমরা ইতিহাসের সন্ধান করতে পারি এবং যা আমরা কোনও পর্যালোচনা বোর্ডের কাছে ধরে রাখতে পারি এবং বলতে পারি "এটিই আমাদের যত্নশীল একমাত্র নিদর্শন, আমাদের দেখার দরকার নেই অন্য কোনও পরিবর্তন, কেবলমাত্র এই জিনিসটিতে পরিবর্তন হয় "(যেমন। স্থাপনার জন্য প্রয়োগের সংস্করণ, পরিবেশের ভেরিয়েবলগুলি অন্তর্ভুক্ত ইত্যাদি)

এটি বিকাশকারীদের তাদের প্রয়োগের জন্য যুক্তি তৈরি করার চেষ্টা করতে এবং কিছুটা শক্ত করে তোলে যা ভেরিয়েবলের ভিত্তিতে এর আচরণ পরিবর্তন করে যাতে তারা উপযুক্ত পরীক্ষার চক্রের পরিবর্তে পরিবর্তনে পিছলে যেতে পারে।

বোনাস পয়েন্ট

অ্যাপ্লিকেশন গোপনীয়তা বিবেচনা করুন। এর জন্য আমাদের সমাধান এখনও পর্যন্ত একটি সর্বজনীন আরএসএ কী সরবরাহ করা হয়েছে যা বিকাশকারী দলগুলি বর্ধিত জাভা কী স্টোরটি এনক্রিপ্ট করতে ব্যবহার করে (প্রায় প্রতিটি ভাষায় কোথাও কোথাও কোথাও জাভা কী স্টোরগুলি পড়তে পারে এমন একটি লাইব্রেরি রয়েছে) এটি তৃতীয় ধরণের নিদর্শন হিসাবে ধরা হয় এবং সার্ভারে টানা হয়, আমাদের প্ল্যাটফর্মের প্রাইভেট কী দিয়ে ডিক্রিপ্ট করা হয় এবং রান সময়ে অ্যাপ্লিকেশনটিকে সরবরাহ করা হয়।

স্বীকারোক্তিযুক্ত গোপনীয় ব্যবস্থাপনার নিজস্ব পোকার কৃমি। তবে এটি সম্ভবত বিবেচনাযোগ্য।


2
পুনরায়: অ্যাপ্লিকেশন সিক্রেটস, আমি ভল্টের দিকে নজর দেওয়ার পরামর্শ দেব ( ভল্ট্রোপজেক্ট.আইও ) কারণ এটি হ্যাশিকর্পের টুলচেনেরও একটি অংশ এবং কনসুলের (এবং সেই বাক্সের অন্যান্য সরঞ্জামগুলি) এর সাথে বরং পরিষ্কারভাবে সংহত করেছে
মাইকেল ব্রাভো

হ্যাশিকর্প স্টাফগুলি সাধারণত কতটা দুর্দান্ত তা দেওয়াতে আমি ভল্টের দ্বারা আসলে খুব আক্রান্ত হয়েছি। বাজারের বাকি অংশগুলির তুলনায় তাদের পণ্যগুলির মূলত তিনটি বড় ব্যবধান - ১. 'গোপনের গোপনীয়তা' মূলত মডেলটির উত্সাহিত হয়। আমি শারডিং বা এইচএসএম ব্যবহার করছি। তবে মূলত এটি সিক্রেটস ট্রেডিং। 2. সরঞ্জামের সামঞ্জস্যতা, তাদের অন্যান্য সরঞ্জামের মতো প্লাগইনগুলির জন্য কোনও সমর্থন নেই Price. দাম। আমি ভল্ট ব্যয়বহুল বলে ভেবে ভেবেছিলাম যে আমি যখন কোম্পানিকে বলি তখন তা বিশ্বাস করি না। তারা খুব সস্তা হওয়ায় পণ্যগুলি প্রত্যাখ্যান করেছে, এটি গণ্ডগোল করেছে। তবে ভল্ট এত বেশি ছিল যে তারা এটি বিবেচনাও করেনি।
hvindin

এটি লক্ষণীয় যে এটি কেবলমাত্র ব্যয়-প্রতিরোধক যদি আপনি কোনও অর্থ প্রদানের সংস্করণ ব্যবহার করেন । ভল্টের মূল পণ্য ওপেন সোর্স। অবশ্যই তারা তাদের সাইটে প্রো / এন্টারপ্রাইজ সংস্করণগুলির জন্য মূল্য তালিকা করে না, সুতরাং এই সংস্করণগুলির জন্য এটি কীভাবে [আনমন] যুক্তিযুক্ত হতে পারে তা আমার কোনও ধারণা নেই।
অ্যাড্রিয়ান

হুঁ, আমি আমার মন্তব্য থেকে যে বাদ পড়েছি তা লক্ষ্য করিনি, যদিও খাঁটি হিসাবে আমার প্রথম দুটি সমস্যা এখনও রয়ে গেছে। যদিও যোগ্যতা অর্জনের জন্য, অন্যান্য হ্যাশিকর্প পণ্যগুলির তুলনায় সেগুলি হ'ল ভল্টের বিষয়ে আমার চিন্তাভাবনা which এগুলির মধ্যে আমার মনে হয় সমস্ত দুর্দান্ত। বাজারে অন্যান্য পণ্যের সাথে তুলনা করে একই রকম ফাংশন সম্পাদন করা সমান হতে পারে কেবল কোনও কারণে প্রত্যাশার চেয়ে অনেক বেশি ব্যয়বহুল।
hvindin

আপনি কি "তাদের অ্যাপ্লিকেশনটিতে যুক্তি তৈরির একটি উদাহরণ দিতে পারেন যা ভেরিয়েবলের ভিত্তিতে এর আচরণ পরিবর্তন করবে যাতে তারা উপযুক্ত পরীক্ষার চক্রের পরিবর্তে পরিবর্তনগুলিতে পিছলে যায়?" সত্যিই সাধারণ কিছু মনে হচ্ছে, তবে আমি কেবল একটি দৃ concrete় উদাহরণ কল্পনা করতে পারি না।
কেনেচউ

3

আপনার পরিবেশ যদি গ্রাহক প্রতি হয়, আমি আপনার নির্দিষ্ট ক্ষেত্রে গ্রাহক প্রতি একটি সংগ্রহস্থল রাখার পরামর্শ দেব । (সাধারণভাবে এটি প্রতি পরিবেশে সংগ্রহস্থল। আপনি rep ভান্ডারগুলিতে কোডটি সাবমডিউল করতে পারবেন। আমি সম্ভবত এটি একাধিক সংগ্রহস্থলে করব। উত্তরীয় ভূমিকা এবং মডিউলগুলির জন্য একটি, রক্ষণাবেক্ষণ এবং স্থাপনার স্ক্রিপ্টগুলির জন্য একটি, পরিবেশে চলমান প্রতিটি বড় অ্যাপ্লিকেশনের জন্য একটি।

এখন আপনি optionচ্ছিকভাবে প্রকৃতপক্ষে কোডটি কাঁটাচামচ করতে পারেন বা অন্যথায় মুক্তির জন্য নির্দিষ্ট ট্যাগে সাবমডিউলটি পিন করতে পারেন, এটি নিশ্চিত করে যে গ্রাহকের পরিবেশ পরিচালিত কোডটি পরীক্ষা না করা এবং প্রকাশ না করা পরিবর্তিত হবে না making

আপনি যদি কোনও আর্টিক্ট রিপোজিটরি ব্যবহার করছেন তবে নিশ্চিত হয়ে নিন যে নিদর্শনগুলি যথাযথভাবে সংস্করণিত হয়েছে এবং সেই সংস্করণগুলি পরিবেশের ভেরিয়েবলগুলিতে সঠিকভাবে নির্দিষ্ট করা আছে।

অটোমেশন গুরুত্বপূর্ণ কারণ পরিবেশের পরিবর্তনশীলগুলি যেখানে সম্ভব সেখানে মানুষের দ্বারা আপডেট করা উচিত নয়, তবে স্ক্রিপ্টগুলির সাহায্যে তৈরি করা উচিত। নিশ্চিত হয়ে নিন যে প্রতি গ্রাহক জায়ে প্রায় কোনও ম্যানুয়াল আপডেট নেই এবং বিকাশকারীরা কেবল কোড সংগ্রহস্থল আপডেট করে update যদি তারা কনফিগারেশন পরিবর্তন করতে চান তবে এটি তৈরি করা স্ক্রিপ্টগুলির একটিতে করা উচিত, যা ভেরিয়েবলগুলি তৈরি করতে চালিত হয় এবং গ্রাহক ভাণ্ডারে ডিফটি প্রতিশ্রুতিবদ্ধ হয়। এটি এই প্রক্রিয়াটির জন্য অবিচ্ছিন্ন একীকরণ সেটআপ করার জন্য অর্থ প্রদান করে। এটি ব্যতীত এক পর্যায়ে রক্ষণাবেক্ষণের জন্য অনেকগুলি সংগ্রহস্থল থাকবে ।


কেবল একটি আপত্তি: গোপনীয়তাগুলির কোনও সংস্করণ নিয়ন্ত্রণ সংগ্রহস্থলে প্রবেশ করা উচিত নয় যতক্ষণ না এটির কঠোর অ্যাক্সেস নিয়ন্ত্রণ সমর্থন না থাকে। গিট হয় না - যে কেউ সংগ্রহশালাটি টেনে নেয় সে গোপনীয়তাগুলি দেখতে পারে, যা কোনও সমস্যা হতে পারে - তারা আর গোপনীয়তা নেই।
ড্যান কর্নিলিস্কু

ভালো বল ধরা. এটি এনক্রিপ্ট করা গোপনীয়তা। ডিক্রিপশন কীগুলি ট্রামিয়েন্ট।
জিরি ক্লাউদা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.