আমাদের কাছে এমন একটি অ্যাপ্লিকেশন রয়েছে যাতে দ্রুত (<1 সেকেন্ড) এবং ধীর ডাটাবেস মাইগ্রেশন (> 30 সেকেন্ড) উভয়ের মিশ্রণ রয়েছে। এই মুহুর্তে, আমরা সিআই এর অংশ হিসাবে ডাটাবেস স্থানান্তর চালাচ্ছি, তবে আমাদের সিআই সরঞ্জামটি আমাদের অ্যাপের জন্য একাধিক ডাটাবেস সংযোগের স্ট্রিংগুলি জানতে হবে (একাধিক পরিবেশ জুড়ে) যা আদর্শ নয়। আমরা এই প্রক্রিয়াটি পরিবর্তন করতে চাই যাতে অ্যাপ্লিকেশনটি এটি শুরু হওয়ার সাথে সাথে তার নিজস্ব ডাটাবেস স্থানান্তর চালায়।
পরিস্থিতি এখানে:
আমাদের কাছে এই অ্যাপ্লিকেশনটির একাধিক উদাহরণ রয়েছে - প্রায় 5 টি উত্পাদন production আসুন তাদের কল করুন node1, ..., node5
। প্রতিটি অ্যাপ্লিকেশন একটি একক এসকিউএল সার্ভার উদাহরণের সাথে সংযোগ স্থাপন করে এবং আমরা রোলিং ডিপ্লোয়মেন্টগুলি ব্যবহার করি না (যতক্ষণ পর্যন্ত আমি জানি সমস্ত অ্যাপ্লিকেশন একসাথে মোতায়েন করা হয়েছে)
সমস্যা: বলুন আমাদের দীর্ঘকাল চলতে চলেছে have এই ক্ষেত্রে, node1
শুরু হয়, তারপরে স্থানান্তর চালানো শুরু করে। এখন, node4
শুরু হয়, এবং দীর্ঘ-চলমান মাইগ্রেশন এখনও শেষ হয়নি, তাই node4
মাইগ্রেশন চালানোও শুরু করে -> সম্ভাব্য ডেটা দুর্নীতি? আপনি কীভাবে এই সমস্যার বিরুদ্ধে রোধ করবেন বা সমস্যাটি চিন্তার পক্ষে যথেষ্ট গুরুত্বপূর্ণ?
আমি এএ ডিস্ট্রিবিউট লক ( etcd
এই লাইনগুলি ব্যবহার করে বা কিছু) দিয়ে এই সমস্যাটি সমাধান করার কথা ভাবছিলাম । মূলত, সমস্ত অ্যাপ্লিকেশন লকটি অর্জন করার চেষ্টা করে, তাদের মধ্যে কেবল একটি এটি পেয়ে এবং মাইগ্রেশন চালায়, তারপরে আনলক করে। যখন বাকী অ্যাপস শুরু হয়ে যায় এবং সমালোচনামূলক বিভাগে প্রবেশ করে, সমস্ত স্থানান্তর ইতোমধ্যে চালানো হয়েছে যাতে মাইগ্রেশন স্ক্রিপ্টটি সবেমাত্র বের হয়।
তবে, আমার অন্ত্রে বলছে "এটি ওভারকিল, এর একটি সহজ সমাধান হতে হবে," তাই আমি বুঝতে পেরেছিলাম যে এখানে অন্য কারও কোনও ভাল ধারণা আছে কিনা তা জানতে আমি এখানে জিজ্ঞাসা করব।