জিরো ডাউনটাইম মোতায়েন অর্জন


40

আমি শূন্য ডাউনটাইম মোতায়েনগুলি অর্জন করার চেষ্টা করছি যাতে আমি বন্ধ সময়গুলিতে কম এবং "ধীর" সময়ের মধ্যে - বা যে কোনও সময় তাত্ত্বিক সময়ে আরও স্থাপন করতে পারি।

আমার বর্তমান সেটআপ, কিছুটা সরলীকৃত:

  • ওয়েব সার্ভার এ (। নেট অ্যাপ)
  • ওয়েব সার্ভার বি (। নেট অ্যাপ)
  • ডাটাবেস সার্ভার (এসকিউএল সার্ভার)

আমার বর্তমান স্থাপনার প্রক্রিয়া:

  1. ওয়েব সার্ভার এ এবং বি উভয় সাইটের "থামান"
  2. অ্যাপ্লিকেশনটির সংস্করণ স্থাপনের জন্য ডাটাবেস স্কিমা আপগ্রেড করুন
  3. ওয়েব সার্ভার আপডেট করুন এ
  4. ওয়েব সার্ভার আপডেট করুন বি
  5. অনলাইনে সবকিছু ফিরিয়ে আনুন

বর্তমান সমস্যা

এটি প্রতি মাসে অল্প পরিমাণে ডাউনটাইম বাড়ে - প্রায় 30 মিনিট। আমি অফ ঘন্টা সময় এটি করি, সুতরাং এটি কোনও বিশাল সমস্যা নয় - তবে এটি এমন কিছু যা আমি এড়াতে চাই।

এছাড়াও - সত্যিই 'ফিরে' যাওয়ার কোনও উপায় নেই। আমি সাধারণত রোলব্যাক ডিবি স্ক্রিপ্ট তৈরি করি না - কেবলমাত্র স্ক্রিপ্টগুলি আপগ্রেড করি।

লোড ব্যালান্সারের উপকার

আমি একবারে একটি ওয়েব সার্ভার আপগ্রেড করতে সক্ষম হতে চাই। ওয়েব সার্ভারটিকে লোড ব্যালান্সারের বাইরে নিয়ে যান, এটিকে আপগ্রেড করুন, অনলাইনে আবার রেখে দিন, তারপরে ওয়েব সার্ভার বি এর জন্য পুনরাবৃত্তি করুন

সমস্যা ডাটাবেস। আমার সফ্টওয়্যারটির প্রতিটি সংস্করণে ডাটাবেসের বিভিন্ন সংস্করণের বিপরীতে সম্পাদন করা প্রয়োজন - সুতরাং আমি "আটকে" আছি।

সম্ভাব্য সমাধান

একটি বর্তমান সমাধান আমি বিবেচনা করছি নিম্নলিখিত নিয়মগুলি গ্রহণ করা:

  • কোনও ডাটাবেস সারণি কখনই মুছবেন না।
  • কোনও ডাটাবেস কলাম কখনই মুছবেন না।
  • কোনও ডাটাবেস কলামের পুনরায় নামকরণ করবেন না।
  • কোনও কলাম কখনই পুনরায় অর্ডার করবেন না।
  • প্রতিটি সঞ্চিত পদ্ধতি অবশ্যই সংস্করণ করা উচিত।
    • অর্থ - এটি সম্পাদিত হয়ে গেলে 'spFindAllThings_2' হয়ে উঠবে F
    • তারপরে আবার সম্পাদনা করা হয়ে গেলে এটি 'spFindAllThings_3' হয়ে যায়।
    • একই নিয়ম দর্শনে প্রযোজ্য।

যদিও এটি কিছুটা চরম মনে হচ্ছে - আমি মনে করি এটি সমস্যার সমাধান করে। অ্যাপ্লিকেশনটির প্রতিটি সংস্করণ ডিবিতে একটি বিরতিহীন পথে আঘাত করবে। কোডটি ভিউ / সঞ্চিত পদ্ধতি থেকে নির্দিষ্ট ফলাফল প্রত্যাশা করে - এবং এটি 'চুক্তিটি' বৈধ রাখে। সমস্যাটি হ'ল - এটি কেবল .ালু ep আমি জানি অ্যাপটি কিছুক্ষণের জন্য নিযুক্ত হওয়ার পরে আমি পুরাতন সঞ্চিত পদ্ধতিগুলি পরিষ্কার করতে পারি, তবে এটি কেবল নোংরা অনুভব করে। এছাড়াও - এটি এই নিয়ম অনুসরণ করে সমস্ত বিকাশকারী উপর নির্ভর করে, যা বেশিরভাগই ঘটবে, তবে আমি কল্পনা করি যে কেউ ভুল করবে।

শেষ পর্যন্ত - আমার প্রশ্ন

  • এই ঝাল নাকি হকি?
  • অন্য কেউ কি এভাবে করছে?
  • অন্যান্য ব্যক্তিরা কীভাবে এই সমস্যাটি সমাধান করছেন?

2
আপনার ব্যাকআউট পরিকল্পনা কোথায়? আপনি কীভাবে পরীক্ষা করে দেখেন যে সমস্ত কিছু কাজ করে এবং কোনও প্রতিক্রিয়া নেই?
হরিণ হান্টার

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

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

2
আপনি জায়গায় একটি রোলব্যাক পরিকল্পনা করতে চান। একদিন আপনার দরকার হবে।
থরবজর্ন রাভন অ্যান্ডারসন

1
আমার অভিজ্ঞতায়, বেশিরভাগ ওয়েবসাইটের ক্ষেত্রে, আপনার সম্ভাব্য সমাধানটি সমাধান করা সমস্যার চেয়ে খারাপ। এটি যে জটিলতা যুক্ত করবে আপনি এখন অনুমান করতে পারেন তার চেয়ে ব্যয়বহুল হবে। সম্ভবত পরিবর্তনগুলি তৈরি করতে এবং বৈশিষ্ট্যগুলি যুক্ত করতে আরও অনেক সময় / প্রচেষ্টা আমি শুধুমাত্র ওয়েবসাইটের যা একেবারে না পারেন, তা বিবেচনা চাই কোন ডাউনটাইম আছে, কি কখনো
এমজিওউইন

উত্তর:


14

এটি ডাটাবেস-ব্যাকড সফ্টওয়্যার আপগ্রেডগুলির জন্য খুব ব্যবহারিক পদ্ধতি। এটি 2003 সালে মার্টিন ফোলার এবং প্রমোদ সাদালাগের দ্বারা বর্ণনা করা হয়েছিল এবং পরবর্তীকালে রিফ্যাক্টরিং ডেটাবেসগুলি: বিবর্তনীয় ডেটাবেস ডিজাইনে লেখা হয়েছিল ।

আপনি যখন বলছেন যে এটি অল্প মনে হচ্ছে তখন আপনি কী বোঝাতে চেয়েছেন তা আমি দেখতে পাচ্ছি, তবে যখন ইচ্ছাকৃতভাবে এবং পূর্বাভাসের সাথে সম্পন্ন করা হয়েছে এবং কোডবেস এবং ডাটাবেসের বাইরে অব্যবহৃত কাঠামোগুলি রিফ্যাক্টারে সময় নেওয়ার সময় যখন তারা প্রদর্শিত হবে না, তখন এটি তার চেয়ে অনেক বেশি শক্তিশালী than আপগ্রেড এবং রোলব্যাক স্ক্রিপ্টগুলির উপর ভিত্তি করে সহজ সমাধান।


5

"জিরো ডাউনটাইম" এই ধরণের পদ্ধতির সম্ভাব্য কারণগুলির মধ্যে একটি মাত্র। এইভাবে একটি ডেটামোডেলকে পিছনের দিকে সামঞ্জস্যপূর্ণ রাখলে আপনাকে অনেকগুলি বিভিন্ন সমস্যার মোকাবিলা করতে সহায়তা করে:

  • আপনার যদি আপনার ডেটাবেস অ্যাক্সেস করে অনেকগুলি সফ্টওয়্যার প্যাকেজ থাকে, আপনি যদি স্কিমা পরিবর্তনগুলি প্রভাবিত করেন তবে আপনাকে সেগুলি সব পরীক্ষা করতে হবে না (একাধিক দল একই প্রোগ্রামে সমস্ত ডেটাবেস ব্যবহার করে স্কিমার পরিবর্তনগুলি খুব শক্ত হয়ে উঠতে পারে)

  • যদি আপনার অবশ্যই প্রয়োজন হয় তবে আপনি আপনার প্রোগ্রামগুলির একটির পুরানো সংস্করণটি যাচাই করতে পারেন এবং এটি সম্ভবত একটি নতুন ডাটাবেস পুনরায় চালিত হবে (যতক্ষণ না আপনি পুরানো প্রোগ্রামটি কোনও নতুন কলামগুলি সঠিকভাবে পরিচালনা করবেন না)

  • বর্তমান ডাটাবেস সংস্করণে আর্কাইভ করা ডেটা আমদানি / রফতানি করা অনেক সহজ

আপনার তালিকার জন্য এখানে একটি অতিরিক্ত নিয়ম

  • প্রতিটি নতুন কলামটি হয় NULLable বা একটি অর্থবহ ডিফল্ট মান প্রদান করা উচিত

(এটি নিশ্চিত করে তোলে যে এমনকি পুরানো প্রোগ্রামগুলি যা নতুন কলামগুলি জানে না তারা আপনার ডেটাবেজে নতুন রেকর্ড তৈরি করার সময় কিছুই ভাঙবে না)।

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


4

এটি বিভিন্ন রকমের একটি ডিপ্লোয়মেন্ট থেকে অন্যটিতে পরিবর্তিত হয়।

অবশ্যই, আপনি কখনই কোনও টেবিল বা কলামটি মুছতে পারেননি। ইন্টারফেসের সামঞ্জস্যতা ভেঙে এমন কোনও কিছুই আপনি কখনই পরিবর্তন করতে পারবেন না। আপনি সর্বদা বিমূর্ততার একটি স্তর যুক্ত করতে পারেন। তবে তারপরে আপনাকে সেই বিমূর্ততা এবং সংস্করণটির সংস্করণ করতে হবে।

আপনার নিজেকে যে প্রশ্নটি জিজ্ঞাসা করতে হবে তা হ'ল, প্রতিটি একক রিলিজ স্কিমাকে এমনভাবে পরিবর্তন করে যে এটি পিছনের দিকে সামঞ্জস্যপূর্ণ নয়?

খুব কম রিলিজ যদি সেইভাবে স্কিমা পরিবর্তন করে তবে ডাটাবেসের সমস্যাটি নিঃশব্দ। কেবল অ্যাপ্লিকেশন সার্ভারগুলির একটি ঘূর্ণায়মান মোতায়েন করুন।

ন্যূনতম-ডাউনটাইম মোতায়েনের জন্য আমি যে দুটি জিনিস সর্বাধিক সাহায্য করে তা হ'ল:

  1. পিছনে সামঞ্জস্যের জন্য প্রচেষ্টা করুন - কমপক্ষে একটি একক রিলিজের মধ্যে। আপনি সবসময় এটি অর্জন করতে পারবেন না, তবে আমি বাজি রাখতে পারি যে আপনি এটি 90% বা তার বেশি রিলিজ অর্জন করতে পারেন, বিশেষত প্রতিটি প্রকাশ যদি ছোট হয়।
  2. একটি প্রাক-রিলিজ এবং পোস্ট-রিলিজ পরবর্তী ডেটাবেস স্ক্রিপ্ট রয়েছে। এটি আপনাকে অ্যাপ্লিকেশন কোড স্থাপনের আগে আপনার নতুন অবজেক্ট তৈরি করে পুনরায় নামগুলি বা ইন্টারফেস পরিবর্তনগুলি পরিচালনা করতে দেয়, তারপরে অ্যাপ কোড স্থাপনের পরে পুরানোটিকে বাদ দেয়। আপনি যদি একটি নতুন অ-শনাক্তযোগ্য কলাম যুক্ত করেন তবে আপনি এটির পূর্বনির্ধারিত স্ক্রিপ্টে একটি ট্রিগার সহ যে কোনও ডিফল্ট মান পূরণ করে তা হিসাবে যুক্ত হিসাবে যুক্ত করতে পারেন। তারপরে আপনার প্রকাশের পরে, আপনি ট্রিগারটি বাদ দিতে পারেন।

আশা করি আপনার বাকি মোতায়েনগুলি রক্ষণাবেক্ষণ উইন্ডোর জন্য সংরক্ষণ করা যেতে পারে।

অন্যান্য ধারণা যা ডাউনটাইমের প্রয়োজন এমন কয়েকটি মোতায়েনের মোকাবেলায় সহায়তা করতে পারে:

  • আপনি কি আপনার কোডটিতে পশ্চাদপদ সামঞ্জস্যতা তৈরি করতে পারেন? উদাহরণস্বরূপ, এমন কোনও উপায় আছে যা আপনার কোড একাধিক ধরণের ফলাফলের সেটগুলিকে সমর্থন করতে পারে? যদি আপনাকে কোনও কলাম থেকে কোনও ডাবল পরিবর্তন করতে হয় তবে আপনার অ্যাপ কোডটি এটিকে স্ট্রিং হিসাবে পড়তে এবং পার্স করতে পারে। হ্যাকির মতো, তবে এটি যদি মুক্তির প্রক্রিয়াটির মাধ্যমে নিজেকে পেতে অস্থায়ী কোড হয় তবে এটি বিশ্বের শেষ নাও হতে পারে।
  • সঞ্চিত পদ্ধতিগুলি আপনার অ্যাপ কোডটি স্কিমা পরিবর্তনগুলি থেকে অন্তরক করতে সহায়তা করতে পারে। এটি কেবল এতদূর যেতে পারে তবে কিছুটা সাহায্য করে।

2

আপনি কিছুটা অতিরিক্ত পরিশ্রমের জন্য এটি সম্ভবত এটি করতে পারেন।

  1. রফতানি করে ডাটাবেস ব্যাক আপ করুন
  2. ব্যাক আপ আমদানি করুন তবে একটি রিলিজ সংস্করণ যেমন myDb_2_1 এর সাথে এটির নামকরণ করুন
  3. MyDB_2_1 এ ডাটাবেস রিলিজ কার্যকর করুন
  4. ওয়েব সার্ভার এ-তে অ্যাপ পুলটি "থামান" বা লোড ব্যালান্সারের বাইরে নিয়ে যান
  5. ওয়েব সার্ভার এ আপডেট করুন, পোস্ট বাস্তবায়ন পরীক্ষা চালান এবং প্রয়োজনে রোলব্যাক করুন
  6. সেশন ওয়েব সার্ভার বি রক্তপাত করে এবং ওয়েব সার্ভারটিকে লুপে ফিরিয়ে দেয়
  7. ওয়েব সার্ভার বি আপগ্রেড করুন এবং তারপরে লোড ব্যালেন্সারে আবার রেখে দিন

স্বাভাবিকভাবেই ওয়েব আপডেটগুলিতে নতুন ডিবি স্কিমাকে নির্দেশ করতে নতুন কনফিগার এন্ট্রি প্রয়োজন। কথাটি হ'ল আপনি যদি মাসে একবার রিলিজ করছেন এবং এটি একটি ছোট দল যে আপনি সত্যিই কতগুলি ডিবি পরিবর্তন করছেন যা পিছনের দিকে সামঞ্জস্যপূর্ণ নয়? আপনি যদি এটি নিয়ন্ত্রণ করে দেখতে পারেন যে আপনি কোনও নিচু সময় ছাড়াই একটি স্বয়ংক্রিয় স্থাপনা নেওয়ার জন্য যেতে পারেন বা খুব খারাপ সময়ে মাত্র 5 মিনিট ডাউন সময় পাবেন।


1
আপনি যদি ব্যাকআপ সংরক্ষণ করার পরে সার্ভার এ-তে থাকা অ্যাপ্লিকেশনটি তার ডিবিতে লিখবে তবে আপনি সার্ভার এটিকে থামানোর আগে কী করবেন? সর্বদা একটি "দুর্বলতার উইন্ডো" থাকে। এই লেখাগুলি হারিয়ে যাবে, যা গ্রহণযোগ্য হবে না।
স্লেসকে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.