ডাউনটাইম সৃষ্টি না করে আপনি কীভাবে আপনার উত্পাদন কোডবেস / ডাটাবেস স্কিমাকে আপডেট করবেন?


42

কোনও ডাউনটাইম সৃষ্টি না করে প্রোডাকশন সার্ভারের কোড বেস / ডাটাবেস স্কিমাকে আপডেট করার জন্য কিছু কৌশল কী কী?


1
ভাল প্রশ্ন কারণ আমি দেখছি অনেক লোক এটিকে উপেক্ষা করে। সময় অর্থ অর্থ এবং ডাউনটাইম শেষ ব্যবহারকারীদের পক্ষে কখনই ভাল লাগে না, কারণ যতই যুক্তিযুক্ত হোক না কেন।
ড্যান ম্যাকগ্রা

@ ড্যান ম্যাকগ্রা: যা ধরুন যে আপনি আসলে একটি ডাউনটাইম রাখতে পারেন, আমি এমন একটি সিস্টেমে কাজ করি যা সাধারণত (সাধারণত) বছরে 4 বার (ত্রৈমাসিক বিড়াল) এবং প্রত্যেকবার সর্বোচ্চ 15 মিনিটের জন্য (এই সময়টিতে ট্র্যাফিক সারি করার জন্য) থাকে। .. ডাটাবেস পরিবর্তনগুলি খুব তদন্ত করা হয় :)
ম্যাথিউ এম .9

2
এটি dba.stackex بدل.com এর জন্য একটি দুর্দান্ত প্রশ্ন হবে , যা কয়েক ঘন্টার মধ্যে সর্বজনীন বিটাতে চলে যায়।
ল্যারি কোলেম্যান

উত্তর:


20

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

  1. ওয়েবসভার এ লোড ব্যালেন্সার থেকে সংযোগ বিচ্ছিন্ন করতে হবে (সুতরাং আগত সমস্ত ট্র্যাফিক বিতে যায়)।
  2. লগ শিপিং বন্ধ হয়ে গেছে (ডিবি সার্ভার এম প্রথমে আপডেট হতে চলেছে)।
  3. ওয়েবসারভার আপডেট করুন। ডিবি সার্ভার এম-তে কনফিগারেশনটি নির্দেশ করুন M.
  4. পরীক্ষা করুন এবং যাচাই করুন যে আপডেটটি কাজ করেছে (সাধারণত লোকেরা সরাসরি আইপি ঠিকানায় আঘাত করে)।
  5. লোড ব্যালেন্সার সেট করুন যাতে বিদ্যমান সেশনগুলি বিতে যেতে থাকে নতুন সেশনগুলি এ যান A.
  6. বি এর সমস্ত সেশনের জন্য অপেক্ষা করুন (দেড় ঘন্টা বা তার বেশি সময় হতে পারে, সাধারণত আমরা ট্র্যাফিক দেখি এবং 1 ঘন্টা বিরতি নির্ধারিত থাকে)।
  7. আপডেট বি এবং এন।
  8. আপডেটটি পরীক্ষা করে যাচাই করুন update
  9. আবার লগ শিপিং সেট আপ করুন এবং এটি পরীক্ষা করে test
  10. নিয়মিত ক্রিয়ায় লোড ব্যালান্সার সেট করুন।

খুব জটিল ওয়েব অ্যাপ্লিকেশনগুলিতে, 1-5 পদক্ষেপ হিসাবে যা বর্ণনা করা হয়েছে তা সারা রাত সময় নিতে পারে এবং সময় এবং জরুরি যোগাযোগের নম্বর সহ 50 পৃষ্ঠার এক্সেল স্প্রেডশিট হতে পারে। এই পরিস্থিতিতে, সিস্টেমটি ব্যবহারকারীদের জন্য উপলভ্য রেখে সন্ধ্যা to টা থেকে 6 টা অবধি অর্ধেক সিস্টেমটি আপডেট করার সময় নির্ধারিত হয়। ডিআর সাইটের আপডেটটি হ্যান্ডেল করা সাধারণত নিম্নলিখিত রাতের জন্য নির্ধারিত হয় - আশা করি প্রথম দিনটি কোনও কিছুতেই ব্রেক না করে।

আপটাইম যেখানে প্রয়োজন হয়, সেখানে প্যাচগুলি প্রথম কিউএ পরিবেশে পরীক্ষা করা হয়, যা আদর্শভাবে উত্পাদন হিসাবে একই হার্ডওয়্যার। যদি তারা কোনও বাধা না দেখায় তবে তাদের নিয়মিত সময়সূচীতে প্রয়োগ করা যেতে পারে যা সাধারণত উইকএন্ডে হয়।


7
আপনি কীভাবে ডিবি এম এবং ডিবি এন থেকে নতুন ডেটা মার্জ করার প্রস্তাব করবেন? তাদের উভয়েরই নতুন, আপডেট এবং মুছে ফেলা রেকর্ড থাকবে যা অন্যটির কাছে নেই।
ষাট ফুটারসুডে

@ টাঙ্গুরেনা, আপনি কি উপরের মন্তব্যের উত্তর দিতে পারবেন?
sino

9

সাধারণ ডাটাবেসের জন্য (উদাহরণস্বরূপ ওরাকল) সমান্তরালে কোয়েরি চালানোর সময়ও ডাটাবেস স্কিমা পরিবর্তন করা সম্ভব। যদিও এর জন্য কিছু সামনের পরিকল্পনা করা দরকার।

পরিবর্তনের প্রয়োগের জন্য এগুলি হ'ল কিছু প্রতিবন্ধকতা:

  • এটি বিদ্যমান কোডের সাথে কাজ করবে, মানে কোডটি স্কিমার পুরানো এবং নতুন সংস্করণ উভয়ই নিয়ে কাজ করবে
  • এটি ডিবি-তে এমন বোঝা জাগ্রত করা উচিত নয় যে লেনদেন বন্ধ হয়ে যায় (আমি আপনার দিকে তাকাচ্ছি CREATE INDEX)
  • এটি ডেটা হ্রাস করতে হবে না (আপনি একটি টেবিল ড্রপ এবং পুনরায় তৈরি করতে পারবেন না)

স্কিমাটি পশ্চাদপটে সামঞ্জস্যপূর্ণ হওয়ার জন্য, আপনি সাধারণত একটি কলাম যুক্ত বা মোডিফাই করতে পারেন, বিদ্যমান কোডটি আর ব্যবহার না করে আপনি কেবল কিছু ড্রপ করতে পারেন।

যদি আপনার কোডটি স্বচ্ছভাবে পরিবর্তনটি পরিচালনা করতে না পারে তবে ডাটাবেস পরিবর্তন করার আগে কোডটি পরিবর্তন করুন।

সামনের পরিকল্পনার বিষয়ে সহজ পরামর্শ: সর্বদা আপনার ডিবি অনুরোধগুলিতে কলামের নামগুলি স্পষ্ট করুন (ব্যবহার করবেন না SELECT * FROM)। এইভাবে আপনার কাছে পুরানো অনুরোধগুলিতে নতুন কলামগুলি প্রদর্শিত হবে না।


1
প্রকৃতপক্ষে, ফরওয়ার্ড পরিকল্পনা এবং অভিযোজনযোগ্যতার জন্য, থেকে * নির্বাচন করুন ম্যানুয়ালি কলাম তালিকাভুক্ত করার চেয়ে অসীম ভালো। সুস্পষ্ট কলামের নাম ব্যবহারের ফলে বেশিরভাগ ক্ষেত্রে প্রযুক্তিগত debtণ প্রচুর হয়। যদি আপনার কোডটি নতুন কলামগুলি থেকে বিচ্ছিন্ন হয় তবে আপনার কোডটি ইতিমধ্যে ভঙ্গ।
মর্গ

@ মর্গ: আসলেই নয়। সুরক্ষার জন্য আপনাকে বাইন্ড ভেরিয়েবলগুলি ব্যবহার করতে হবে, যা আমি কাঠামোতে ব্যবহার করি (কমপক্ষে) লিখতে ভেরিয়েবল সরবরাহ করা প্রয়োজন, এবং আউটপুট কলামগুলির মতো ঠিক তেমন ভেরিয়েবল থাকা দরকার, সুতরাং এর select *অর্থ কোডটি বিচ্ছেদ হলে নতুন কলাম যুক্ত হয়েছে (এটিতে ভেরিয়েবলের লেখার অভাবের জন্য)। অবশ্যই, এটি দৃ strongly়ভাবে টাইপ করা ভাষা ব্যবহারের ফলাফল হতে পারে।
ম্যাথিউ এম।

হ্যাঁ সত্যই, নির্বাচন * এড়ানোর ক্ষেত্রে কোনও অতিরিক্ত সুরক্ষা নেই। দৃ strongly়ভাবে টাইপ করা ভাষা এবং খুব খারাপ ডিজাইনের সাথে এটির কিছুই করার নেই। যদি আপনার কাঠামোটি নির্বিঘ্নে পরিবর্তন পরিচালনা করতে না পারে তবে এটি অকেজো। যখন আমি কোনও কলাম পরিবর্তন করি, আমার অ্যাপ্লিকেশন কখনই কাজ করা থামায় না। আপনি যখন এটি বিরতি। কোনটি আরও নির্ভরযোগ্য বা সুরক্ষিত তা নিয়ে আমার কোনও প্রশ্ন নেই বলে আমি মনে করি না।
মর্গ

@ মর্গ: আমি কীভাবে select *আরও নির্ভরযোগ্য এবং সুরক্ষিত তা দেখতে ব্যর্থ । আপনি যদি ব্যবহার করতেন select one, two from ...তবে আপনি কেবল ব্যবহার করছিলেন oneএবং two; যদি thirdটেবিলটিতে যুক্ত হয়, তবে আপনার এটির (এখানে) কোনও ব্যবহার নেই, সুতরাং এটি পুনরুদ্ধারের কোনও কারণ নেই। এবং যদি আপনার হঠাৎ এটি ব্যবহার করার প্রয়োজন হয়, তবে আপনি কোডটি সংশোধন করবেন, যাতে আপনি পাশাপাশি এই মুহুর্তে কোয়েরিটিও সংশোধন করতে পারেন!
ম্যাথিউ এম।

@ মুরগ: ঠিক আছে, মনে হচ্ছে আমরা একে অপরের সাথে কথা বলছি, সম্ভবত আমাদের অভিজ্ঞতাগুলি ভিন্ন। আমি এমন পণ্যগুলিতে কাজ করি যেখানে পারফরম্যান্স সর্বজনীন সম্পত্তি, এবং এর অর্থ এটি selectসম্ভব যথাসম্ভব নির্বাচনী হওয়া দরকার (এবং একটি সূচক দ্বারা আচ্ছাদিত) অন্যথায় আমি টোস্ট (বাধ্যতামূলক যোগদানের আগেও) am আমি দুঃখের সাথে বলতে চাই, তবে আপনি যে পদ্ধতির বর্ণনা দিচ্ছেন তা সেই পণ্যগুলিতে সম্পূর্ণ ব্যর্থতা ছিল।
ম্যাথিউ এম।

5

সমস্ত সিস্টেম পারে না, এটি এমনভাবে সেট আপ করতে হবে যা এটি সমর্থন করে।

উদাহরণস্বরূপ, কয়েক বছর আগে আমাদের আপগ্রেড করা আমাদের অন্যতম প্রধান সিস্টেম 24/7 পাওয়া উচিত। এটিতে অফ সাইট ইউজার ইন্টারফেস লেয়ার এবং বিজনেস লেয়ারের মধ্যে খাঁটি যোগাযোগের স্তর সহ একাধিক স্তর রয়েছে। যেভাবে যোগাযোগ স্তরটি কোড করা হয়েছিল, তার কারণে ব্যবসায় স্তর বা ডিবি স্কিমাতে ভবিষ্যতের যে কোনও পরিবর্তন আসল আউটেজ ছাড়াই প্রয়োগ করা যেতে পারে। সবচেয়ে খারাপ পরিস্থিতিতে, ব্যবহারকারীর পরিবর্তনগুলি কার্যকর হওয়ার সাথে সাথে 10-30 সেকেন্ডের বিরতি পড়বে।

পরিবর্তনগুলি যদি ব্যবসায়ের স্তরে বিশুদ্ধরূপে কোড পরিবর্তন হয় তবে সেগুলি সারি রেখে কেবলমাত্র মিলি সেকেন্ডের বিলম্বের সাথে 'সাইকেল চালানো' যেতে পারে।

এটি এটি করতে পারে কারণ:

  • যোগাযোগ স্তর বার্তা রাখতে পারে। এটি আমাদেরকে ইউআই স্তর নামানোর দরকার ছাড়াই ইউআই লেয়ার ব্যতীত অন্য যে কোনও স্তরের উপর সত্যিকারের আউটেজ পেতে দেয়।
  • ব্যবসায়িক লেয়ার MVDB দ্বারা পরিচালিত নামক UniData । এটি মেমরিতে সমস্ত কোড ধারণ করে। কোড সংকলনের পরে, আপনি পুরানো প্রতিস্থাপন করে নতুন অবজেক্ট কোডটিকে মেমরিতে বাধ্য করতে একটি কমান্ড ব্যবহার করতে পারেন।

অন্যান্য কৌশলগুলি বিদ্যমান সিস্টেমের অন্য একটি আয়নাতে লেনদেনের প্রতিরূপ জড়িত। একটিকে আপডেট প্রয়োগ করে, আপডেট এবং স্যুইচ এর মধ্যে করা সমস্ত লেনদেন স্যুইচিং এবং পুনরায় খেলুন। যদিও আপনার সিস্টেমে YYMV নির্ভর করে।


1

এম্বেড থাকা ডাটাবেস সিস্টেম এবং এম্বেড থাকা সিস্টেমগুলির বিশ্ব থেকে এখানে একটি ভিন্ন দৃষ্টিকোণ। এম্বেড থাকা সিস্টেমে বিভিন্ন নেটওয়ার্ক / টেলিযোগযোগ অবকাঠামোগত সরঞ্জাম অন্তর্ভুক্ত থাকে এবং এই অঞ্চলে তারা প্রায়শই 99.999% (পাঁচ 9 এস) আপটাইম সম্পর্কে কথা বলে।

আমরা (ম্যাকোবজেক্ট) এক্সট্রিমডিবি উচ্চ উপলভ্যতা সহ এমবেডড ডাটাবেস সিস্টেম পণ্যগুলির এক্সট্রিমডিবি পরিবারের বিক্রেতা।

প্রথমে বুঝতে হবে যে "এমবেডেড ডাটাবেস" এর অর্থ হ'ল ডাটাবেস সিস্টেমটি এমন একটি গ্রন্থাগার যা আপনার অ্যাপ্লিকেশন কোডের সাথে সংকলিত এবং সংযুক্ত; সেই অর্থে, এটি আপনার অ্যাপ্লিকেশনটিতে "এমবেডেড"।

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

প্রাথমিক সিঙ্ক্রোনাইজেশনের একটি বৈশিষ্ট্যকে বলা হয় "বাইনারি স্কিমা বিবর্তন"। সরল ইংরেজিতে, এর অর্থ হ'ল প্রতিলিপিটির ডাটাবেস পপুলেশন করার প্রক্রিয়াটির প্রতিরূপের ডাটাবেস স্কিমা এবং মাস্টার এর ডাটাবেস স্কিমার মধ্যে পার্থক্য সমন্বিত করবে।

অনুশীলনে, এর অর্থ হ'ল আপনি নিজের অ্যাপ্লিকেশনটির একটি নতুন সংস্করণ তৈরি করতে পারেন (নতুন / বাদ পড়া টেবিল, নতুন / বাদ / / পরিবর্তিত ক্ষেত্র, নতুন / বাদ পড়া সূচী সহ), আপনার অ্যাপ্লিকেশনটির নতুন সংস্করণ মাস্টারের সাথে সংযুক্ত করতে পারেন এবং তারপরে এটি সৃষ্টি করতে পারে নতুন মাস্টার হওয়ার জন্য আরও নতুন প্রতিরূপ (যেমন নতুন প্রতিরূপে একটি ব্যর্থতা জোর করে তাই এটি মাস্টার হয়ে যায় এবং পুরানো মাস্টার নিজেকে নিচে নামিয়ে দেয়)। ভয়েলা, আপনি আপনার সিস্টেমের সহজলভ্যতা বাধাগ্রস্ত না করে আপনার অ্যাপ্লিকেশনটি N থেকে 1+ সংস্করণে স্থানান্তরিত করেছেন। এখন আপনি পুরানো মাস্টার এবং অন্য যে কোনও প্রতিরূপ এন 12+ সংস্করণে আপগ্রেড করতে পারেন।

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