আমাদের প্রচুর অ্যাপস এবং ওয়েব পরিষেবাদি রয়েছে (কিছু জনসাধারণের মুখোমুখি পণ্য, কিছু অভ্যন্তরীণ এবং একটি ব্যক্তিগত "ব্যাকএন্ড" এর অংশ) যা একে অপরের উপর নির্ভরশীল। এই উপাদানগুলির প্রত্যেকটির 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 ব্যতীত)। সুতরাং আমি জিজ্ঞাসা করছি: চাইল্ড প্রচারের কৌশলগুলি কি কোনও কনসকে ছাড়িয়ে যায়, এবং আমি এখানে যে অনন্য দৃষ্টি আকর্ষণ করছি তা কী?