কোনও ডাউনটাইম সৃষ্টি না করে প্রোডাকশন সার্ভারের কোড বেস / ডাটাবেস স্কিমাকে আপডেট করার জন্য কিছু কৌশল কী কী?
কোনও ডাউনটাইম সৃষ্টি না করে প্রোডাকশন সার্ভারের কোড বেস / ডাটাবেস স্কিমাকে আপডেট করার জন্য কিছু কৌশল কী কী?
উত্তর:
সাধারণত, আমি যে ওয়েবসাইটগুলিতে এই ধরণের প্রয়োজনীয়তা নিয়ে কাজ করেছি সেগুলি সমস্ত লোড-ব্যালান্সারের পিছনে ছিল, বা আলাদা ব্যর্থ স্থানের অবস্থান ছিল। এই নমুনায়, আমি অনুমান করব যে আপনি একটি একক লোড ব্যালেন্সার পেয়েছেন, 2 টি ওয়েব সার্ভার (এন্ড বি) এবং 2 ডাটাবেস সার্ভার (এম অ্যান্ড এন - সাধারণত ডিবি সার্ভারগুলি লগশিপিংয়ের মাধ্যমে সংযুক্ত থাকে - কমপক্ষে এসকিউএল সার্ভার জগতে )।
খুব জটিল ওয়েব অ্যাপ্লিকেশনগুলিতে, 1-5 পদক্ষেপ হিসাবে যা বর্ণনা করা হয়েছে তা সারা রাত সময় নিতে পারে এবং সময় এবং জরুরি যোগাযোগের নম্বর সহ 50 পৃষ্ঠার এক্সেল স্প্রেডশিট হতে পারে। এই পরিস্থিতিতে, সিস্টেমটি ব্যবহারকারীদের জন্য উপলভ্য রেখে সন্ধ্যা to টা থেকে 6 টা অবধি অর্ধেক সিস্টেমটি আপডেট করার সময় নির্ধারিত হয়। ডিআর সাইটের আপডেটটি হ্যান্ডেল করা সাধারণত নিম্নলিখিত রাতের জন্য নির্ধারিত হয় - আশা করি প্রথম দিনটি কোনও কিছুতেই ব্রেক না করে।
আপটাইম যেখানে প্রয়োজন হয়, সেখানে প্যাচগুলি প্রথম কিউএ পরিবেশে পরীক্ষা করা হয়, যা আদর্শভাবে উত্পাদন হিসাবে একই হার্ডওয়্যার। যদি তারা কোনও বাধা না দেখায় তবে তাদের নিয়মিত সময়সূচীতে প্রয়োগ করা যেতে পারে যা সাধারণত উইকএন্ডে হয়।
সাধারণ ডাটাবেসের জন্য (উদাহরণস্বরূপ ওরাকল) সমান্তরালে কোয়েরি চালানোর সময়ও ডাটাবেস স্কিমা পরিবর্তন করা সম্ভব। যদিও এর জন্য কিছু সামনের পরিকল্পনা করা দরকার।
পরিবর্তনের প্রয়োগের জন্য এগুলি হ'ল কিছু প্রতিবন্ধকতা:
CREATE INDEX
)স্কিমাটি পশ্চাদপটে সামঞ্জস্যপূর্ণ হওয়ার জন্য, আপনি সাধারণত একটি কলাম যুক্ত বা মোডিফাই করতে পারেন, বিদ্যমান কোডটি আর ব্যবহার না করে আপনি কেবল কিছু ড্রপ করতে পারেন।
যদি আপনার কোডটি স্বচ্ছভাবে পরিবর্তনটি পরিচালনা করতে না পারে তবে ডাটাবেস পরিবর্তন করার আগে কোডটি পরিবর্তন করুন।
সামনের পরিকল্পনার বিষয়ে সহজ পরামর্শ: সর্বদা আপনার ডিবি অনুরোধগুলিতে কলামের নামগুলি স্পষ্ট করুন (ব্যবহার করবেন না SELECT * FROM
)। এইভাবে আপনার কাছে পুরানো অনুরোধগুলিতে নতুন কলামগুলি প্রদর্শিত হবে না।
select *
অর্থ কোডটি বিচ্ছেদ হলে নতুন কলাম যুক্ত হয়েছে (এটিতে ভেরিয়েবলের লেখার অভাবের জন্য)। অবশ্যই, এটি দৃ strongly়ভাবে টাইপ করা ভাষা ব্যবহারের ফলাফল হতে পারে।
select *
আরও নির্ভরযোগ্য এবং সুরক্ষিত তা দেখতে ব্যর্থ । আপনি যদি ব্যবহার করতেন select one, two from ...
তবে আপনি কেবল ব্যবহার করছিলেন one
এবং two
; যদি third
টেবিলটিতে যুক্ত হয়, তবে আপনার এটির (এখানে) কোনও ব্যবহার নেই, সুতরাং এটি পুনরুদ্ধারের কোনও কারণ নেই। এবং যদি আপনার হঠাৎ এটি ব্যবহার করার প্রয়োজন হয়, তবে আপনি কোডটি সংশোধন করবেন, যাতে আপনি পাশাপাশি এই মুহুর্তে কোয়েরিটিও সংশোধন করতে পারেন!
select
সম্ভব যথাসম্ভব নির্বাচনী হওয়া দরকার (এবং একটি সূচক দ্বারা আচ্ছাদিত) অন্যথায় আমি টোস্ট (বাধ্যতামূলক যোগদানের আগেও) am আমি দুঃখের সাথে বলতে চাই, তবে আপনি যে পদ্ধতির বর্ণনা দিচ্ছেন তা সেই পণ্যগুলিতে সম্পূর্ণ ব্যর্থতা ছিল।
সমস্ত সিস্টেম পারে না, এটি এমনভাবে সেট আপ করতে হবে যা এটি সমর্থন করে।
উদাহরণস্বরূপ, কয়েক বছর আগে আমাদের আপগ্রেড করা আমাদের অন্যতম প্রধান সিস্টেম 24/7 পাওয়া উচিত। এটিতে অফ সাইট ইউজার ইন্টারফেস লেয়ার এবং বিজনেস লেয়ারের মধ্যে খাঁটি যোগাযোগের স্তর সহ একাধিক স্তর রয়েছে। যেভাবে যোগাযোগ স্তরটি কোড করা হয়েছিল, তার কারণে ব্যবসায় স্তর বা ডিবি স্কিমাতে ভবিষ্যতের যে কোনও পরিবর্তন আসল আউটেজ ছাড়াই প্রয়োগ করা যেতে পারে। সবচেয়ে খারাপ পরিস্থিতিতে, ব্যবহারকারীর পরিবর্তনগুলি কার্যকর হওয়ার সাথে সাথে 10-30 সেকেন্ডের বিরতি পড়বে।
পরিবর্তনগুলি যদি ব্যবসায়ের স্তরে বিশুদ্ধরূপে কোড পরিবর্তন হয় তবে সেগুলি সারি রেখে কেবলমাত্র মিলি সেকেন্ডের বিলম্বের সাথে 'সাইকেল চালানো' যেতে পারে।
এটি এটি করতে পারে কারণ:
অন্যান্য কৌশলগুলি বিদ্যমান সিস্টেমের অন্য একটি আয়নাতে লেনদেনের প্রতিরূপ জড়িত। একটিকে আপডেট প্রয়োগ করে, আপডেট এবং স্যুইচ এর মধ্যে করা সমস্ত লেনদেন স্যুইচিং এবং পুনরায় খেলুন। যদিও আপনার সিস্টেমে YYMV নির্ভর করে।
এম্বেড থাকা ডাটাবেস সিস্টেম এবং এম্বেড থাকা সিস্টেমগুলির বিশ্ব থেকে এখানে একটি ভিন্ন দৃষ্টিকোণ। এম্বেড থাকা সিস্টেমে বিভিন্ন নেটওয়ার্ক / টেলিযোগযোগ অবকাঠামোগত সরঞ্জাম অন্তর্ভুক্ত থাকে এবং এই অঞ্চলে তারা প্রায়শই 99.999% (পাঁচ 9 এস) আপটাইম সম্পর্কে কথা বলে।
আমরা (ম্যাকোবজেক্ট) এক্সট্রিমডিবি উচ্চ উপলভ্যতা সহ এমবেডড ডাটাবেস সিস্টেম পণ্যগুলির এক্সট্রিমডিবি পরিবারের বিক্রেতা।
প্রথমে বুঝতে হবে যে "এমবেডেড ডাটাবেস" এর অর্থ হ'ল ডাটাবেস সিস্টেমটি এমন একটি গ্রন্থাগার যা আপনার অ্যাপ্লিকেশন কোডের সাথে সংকলিত এবং সংযুক্ত; সেই অর্থে, এটি আপনার অ্যাপ্লিকেশনটিতে "এমবেডেড"।
এক্সট্রিমডিবি উচ্চ উপলব্ধতার সাথে আপনার অ্যাপ্লিকেশনটির (যা এক বা একাধিক প্রক্রিয়া হতে পারে) এর একটি মাস্টার উদাহরণ রয়েছে এবং আপনার আবেদনের এক বা একাধিক রেপ্লিকা উদাহরণ রয়েছে। যখন একটি প্রতিলিপি মাস্টারের সাথে সংযোগ স্থাপন করে, তখন এটি "প্রাথমিক সিঙ্ক্রোনাইজেশন" নামক একটি প্রক্রিয়ার মাধ্যমে মাস্টারের ডাটাবেসের একটি অনুলিপি গ্রহণ করে। মাস্টার অ্যাপ্লিকেশন কাজ চালিয়ে যাওয়ার সময় এটি করা যেতে পারে। একবার সিঙ্ক্রোনাইজ করা হয়ে গেলে, এটি প্রতিলিপি মাধ্যমে মাস্টারের লেনদেন গ্রহণ করে। অতএব, প্রতিলিপিটিতে সর্বদা বর্তমান ডেটা থাকে এবং মাস্টার ব্যর্থ হলে ইভেন্টটি (ফেলওভার নামক প্রক্রিয়ার মাধ্যমে) গ্রহণ করতে পারে।
প্রাথমিক সিঙ্ক্রোনাইজেশনের একটি বৈশিষ্ট্যকে বলা হয় "বাইনারি স্কিমা বিবর্তন"। সরল ইংরেজিতে, এর অর্থ হ'ল প্রতিলিপিটির ডাটাবেস পপুলেশন করার প্রক্রিয়াটির প্রতিরূপের ডাটাবেস স্কিমা এবং মাস্টার এর ডাটাবেস স্কিমার মধ্যে পার্থক্য সমন্বিত করবে।
অনুশীলনে, এর অর্থ হ'ল আপনি নিজের অ্যাপ্লিকেশনটির একটি নতুন সংস্করণ তৈরি করতে পারেন (নতুন / বাদ পড়া টেবিল, নতুন / বাদ / / পরিবর্তিত ক্ষেত্র, নতুন / বাদ পড়া সূচী সহ), আপনার অ্যাপ্লিকেশনটির নতুন সংস্করণ মাস্টারের সাথে সংযুক্ত করতে পারেন এবং তারপরে এটি সৃষ্টি করতে পারে নতুন মাস্টার হওয়ার জন্য আরও নতুন প্রতিরূপ (যেমন নতুন প্রতিরূপে একটি ব্যর্থতা জোর করে তাই এটি মাস্টার হয়ে যায় এবং পুরানো মাস্টার নিজেকে নিচে নামিয়ে দেয়)। ভয়েলা, আপনি আপনার সিস্টেমের সহজলভ্যতা বাধাগ্রস্ত না করে আপনার অ্যাপ্লিকেশনটি N থেকে 1+ সংস্করণে স্থানান্তরিত করেছেন। এখন আপনি পুরানো মাস্টার এবং অন্য যে কোনও প্রতিরূপ এন 12+ সংস্করণে আপগ্রেড করতে পারেন।