নির্ভরতা প্রচারের কৌশলগুলি: চালিত বা অর্কেস্ট্রেটেড?


10

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

  • অ উত্পাদনের
    • DEV- সংহত উন্নয়নের পরিবেশ যেখানে সিআই ধাক্কা পরিবর্তনগুলি তৈরি করে; ইঞ্জিনিয়ারদের জন্য স্থানীয়ভাবে পুনরুত্পাদনযোগ্য নয় এমন হার্ড-টু-বগ বাগগুলি সমস্যার সমাধানের জন্য দরকারী
    • QA - বিচ্ছিন্ন কিউএ / পরীক্ষার পরিবেশ
    • DEMO - ব্যবসায়ের অংশীদারদের জন্য স্থিতিশীল ইউএটি পরিবেশ
  • উত্পাদনের
    • LIVE - আমাদের লাইভ / উত্পাদন পরিবেশ

কোড প্রচার যায়: LOCAL(বিকাশকারীর মেশিন) => DEV=> QA=> DEMO=> LIVE

বলুন আমাদের কাছে একটি অ্যাপ্লিকেশন রয়েছে যা myappএকটি RESTful ওয়েব পরিষেবাদি mywsযার সাহায্যে ডাকা হয় , এটি নিজেই ডিবি নামে পরিচিত mydb

বর্তমানে, আমাদের কাছে যা আছে আমি এই নির্ভরতাগুলির মধ্যে " অর্কেস্টেটেড " পদোন্নতি বলব : যে myapp-devপয়েন্টগুলি myws-devব্যবহার করে mydb-dev। একইভাবে, myapp-qaপয়েন্টগুলি myws-qaযা ব্যবহার করে mydb-qa। একই জন্য DEMOএবং LIVE

এই সঙ্গে সমস্যা আমি পরিবর্তন করতে, বলছি, যে কোনো সময় থেকে হয় myapp, এই আমাকে পরিবর্তন করতে প্রয়োজন mywsএবং mydbহিসাবে ভাল। তবে যেহেতু প্রতিটি DEVপরিবেশ তার নির্ভরতাগুলির পরিবেশের দিকে নির্দেশ করে DEV, এর অর্থ হ'ল আমাকে একই সময়ে সমস্ত পরিবর্তনগুলি শিডিউল এবং রোলআউট করতে হবে। তদুপরি, যদি একটি বিল্ড অস্থির / ভাঙা হয়ে যায় তবে এটি প্রায়শই অন্যান্য প্রবাহের উপাদানগুলি নীচে আনে; উদাহরণস্বরূপ, যদি কোনও বিকাশকারী পরিবর্তন করার সময় কোনও কিছু ভেঙে mydb-devদেয়, myws-devএবং myapp-devক্লাস্টারগুলি সাধারণত অস্থির হয়ে ওঠে।

এটি সমাধানের জন্য, আমি কী জন্য একটি " সাইলড " প্রচার কৌশল বলব তার জন্য একটি প্রস্তাব রাখছি : সমস্ত আন্ত-উপাদান নির্ভরতা এই নির্দেশিকাটি অনুসরণ করে:

  • আপস্ট্রিম নির্ভরতা উপর নির্ভর করে DEMO, তাদের স্রোতবরাবর নির্ভরতা পরিবেশ তাদের অ উৎপাদন পরিবেশের সব জন্য ( DEV, QAএবং DEMO); এবং
  • LIVEপ্রবাহ নির্ভরতা তাদের উত্পাদন পরিবেশের জন্য তাদের নিম্ন প্রবাহের নির্ভরতার জন্য পরিবেশের উপর নির্ভর করে

এই কনভেনশনটি ব্যবহার করে, myapp-devপয়েন্টটি myws-demoব্যবহার করবে, যা ব্যবহার করবে mydb-demo। একইভাবে, myapp-qaএছাড়াও নির্দেশ করবে myws-demoএবং mydb-demo

এখানে সুবিধা হলো আমি খুঁজে যায় বিল্ড স্থিতিশীল : এটা অনেক কম সম্ভবত যে DEMOএকটি নির্দিষ্ট উপাদান পরিবেশ অস্থির হয়ে যাবে কারণ কোডে এটা করতে পারবেন না DEMOকঠোর পরীক্ষার উভয় উপর ছাড়া DEVএবং QA

শুধুমাত্র অসুবিধা আমি এই পদ্ধতি খুঁজে পেতে পারেন যে, যদি DEMOএকটি নির্দিষ্ট উপাদান জন্য বিরতি করে, সব সব মূল প্রজেক্টের নির্ভরতা জন্য অ উৎপাদন পরিবেশের হঠাৎ ভাঙ্গা হবে। তবে আমি পাল্টা বলব যে এটি পরীক্ষা করা DEVএবং চালিত হওয়ার কারণে খুব কমই ঘটেছিল QA

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


এটি একটি দুর্দান্ত প্রশ্ন, জিজ্ঞাসা করার জন্য আপনাকে ধন্যবাদ!
ক্রিস সাইরেফাইস

উত্তর:


7

আমি যদি আপনার পোস্টটি সঠিকভাবে পড়ছি তবে মনে হয় না যে এই প্রস্তাবটি আসলে কথিত সমস্যাগুলির কোনও একটিই সমাধান করে।

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

"সাইলেড প্রচারের কৌশল" দেখে মনে হচ্ছে এটি কেবল এটিকে আরও খারাপ করে দেবে। যদি মাইয়াপ ভি 2, মিউজ ভি 2 এবং মাইডিবি ভি 2 কেবলমাত্র ডিইভিতে থাকে এবং মাইপ্প ভি 2 ক্র্যাশ না হওয়ার জন্য মাইডিবি ভি 2 এর উপর নির্ভর করে, তবে আমি যখন ডিএভিতে মায়াপ্প ভি 2 চালানোর চেষ্টা করব তখন আমি মাইডিবি ভি 1 ডেমোকে আঘাত করব এবং এটি ক্র্যাশ হয়ে যাবে। আপনি মাইয়াপ ভি 2-তে কাজ শুরু করার আগেই আপনাকে নিয়মিতভাবে সিলোগুলি নিয়মিতভাবে ওভাররাইড করতে বাধ্য করা বা মাইডবি ভি 2 সরবরাহ করার জন্য বাধ্য করা হবে d আরও গুরুত্বপূর্ণ, আপনি কখনই ডিইভিতে মাইডিবি ভি 2 পরীক্ষা করে দেখবেন না, সুতরাং এটি যদি ভেঙে যায় তবে ডেমোতে বিরতি না হওয়া পর্যন্ত আপনি এটিও খুঁজে পাবেন না এবং তারপরে আপনি আবার স্কোয়ারে ফিরে আসবেন।

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

তদুপরি, যদি একটি বিল্ড অস্থির / ভাঙা হয়ে যায় তবে এটি প্রায়শই অন্যান্য প্রবাহের উপাদানগুলি নীচে আনে; উদাহরণস্বরূপ, যদি ডেভেলপার মাইডিবি-ডেভ পরিবর্তন করার সময় কিছু ভেঙে দেয়, তবে মাইউস-ডেভ এবং মায়াপ-ডে ক্লাস্টারগুলি সাধারণত অস্থির হয়ে ওঠে।

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

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

আমার মনে হচ্ছে আমি সম্ভবত আপনার প্রস্তাবটি কোনওভাবে ভুল বুঝছি, তবে আশা করি এই উত্তরটি কমপক্ষে এটি স্পষ্ট করে দিয়েছে যে কী ভুল বোঝাবুঝি করা হয়েছিল এবং কীভাবে এটি পুনর্বিবেচনা করা যায়।


2
ধন্যবাদ @ ইক্সেরেক (+1) - না আমি মনে করি আপনি আমার প্রশ্নটি বুঝতে পেরেছেন এবং আপনি সফলভাবে আমার সাথে কথা বলেছিলেন a
শে

1
ওহ বাহ, আমি এতগুলি লেখার সমস্যায় পড়তে পেরে খুব আনন্দিত। তোমাকে অসংখ্য ধন্যবাদ. =)
Ixrec

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