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