অ্যাপাচি বুককিপারের সাথে কীভাবে বিতরণ করা ডেটাবেস তৈরি করবেন - পর্ব 1

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

বিতরণ সিস্টেমে কার্যকর হওয়া বেশ কয়েকটি চ্যালেঞ্জগুলি সমাধান করার জন্য আপনি অ্যাপাচি বুককিপার বৈশিষ্ট্যগুলি কীভাবে উপার্জন করতে পারেন তা দেখতে পারেন।

শেষ পর্যন্ত, আপনি শিখতে পারেন যে কীভাবে এই আর্কিটেকচারটি হার্ডডিবি-তে গৃহীত হয়েছে, জাভাতে লিখিত বিতরণ এম্বেডযোগ্য এসকিউএল ডাটাবেস।

সিস্টেমের সংক্ষিপ্ত বিবরণ

আমরা কী তৈরি করতে চাই এবং আমাদের কী কী সম্পত্তি প্রয়োজন তার একটি উচ্চ-স্তরের দৃশ্য থেকে শুরু করা যাক।

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

এই তালিকাটি বেশ জেনেরিক মনে হচ্ছে এবং এ জাতীয় ক্ষমতা সহ সিস্টেম ডিজাইনের বিভিন্ন উপায় রয়েছে।

এটি আরও কংক্রিট করার জন্য, আসুন একটি কংক্রিটের দৃশ্য তৈরি করুন:

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

লিখুন-এগিয়ে লগিং

এসিডি সমর্থন করতে (পারমাণবিকতা, ধারাবাহিকতা, বিচ্ছিন্নতা, স্থায়িত্ব) শব্দার্থবিজ্ঞান, ডাটাবেসগুলি রাইটিং-ফরোয়ার্ড লগিং ব্যবহার করে।

আসুন ধরে নেওয়া যাক একটি ডাটাবেস স্থানীয় অস্থির মেমরি (র‌্যাম) এ একটি টেবিলের একটি অনুলিপি সঞ্চয় করে। যখন কোনও ক্লায়েন্ট কোনও লেখার জন্য অনুরোধ করে (কোনও আপডেট আপডেটের মতো), তখন ডাটাবেসটি অবিরাম স্টোরেজে ক্রিয়াকলাপটি 'লগ' করে এবং লগ (ওয়াল) এ রেকর্ডের জন্য একটি নতুন মান লিখে।

স্টোরেজ যখন লেখার স্বীকৃতি দেয় (fsync), পরিবর্তনটি টেবিলের ইন-মেমরি অনুলিপিটিতে প্রয়োগ করা হয়। তারপরে স্টোরেজ ক্লায়েন্টের কাছে ফলাফল স্বীকার করে। আমরা ইন-মেমরি অনুলিপিটি আপডেট করার সাথে সাথে অন্যান্য ক্লায়েন্টরা নতুন মানটি পড়তে সক্ষম হবে।

লগ স্ট্রিম এবং টেবিলের বিষয়বস্তু লিখুন

উপরের উদাহরণে, টেবিলটি খালি শুরু হয়, তারপরে আমাদের প্রথম লেখার অপারেশন রয়েছে, INSERT (রেকর্ড 1), যা এলএসএন (লগ সিকোয়েন্স নম্বর) এ ঘটে 1.. আমাদের টেবিলে এখন রেকর্ড 1 রয়েছে। তারপরে আমরা LSN2 এ অন্য একটি পরিবর্তন লগ ইনরসার্ট (রেকর্ড 2) এ প্রবেশ করি, এখন সারণিতে রেকর্ড 1 এবং রেকর্ড 2 রয়েছে, তারপরে আমরা এলএসএন 3 এ একটি মোছা (রেকর্ড 1) লগইন করি এবং টেবিলটি কেবল রেকর্ড 2 ধারণ করে।

সার্ভারটি পুনরায় চালু হয়ে গেলে, সমস্ত লগগুলি পড়ার এবং টেবিলের বিষয়বস্তু পুনর্গঠন করে এটি পুনরুদ্ধার অপারেশন সম্পাদন করে, তাই আমরা টেবিলটিতে কেবল রেকর্ড 2 রেখে শেষ করি।

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

লগতে লেখার আগে আমরা মেমরির পরিবর্তনটি প্রয়োগ করে থাকলে এটি ঘটতে পারে না।

দয়া করে নোট করুন যে কেবল অপারেশনগুলি যা টেবিলের বিষয়বস্তুগুলিকে পরিবর্তন করে তা লিখিত-সামনের লগতে লেখা হয়: আমরা লগিং রিড করছি না।

চেকপয়েন্ট

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

যখন আপনার ডাটাবেস একটি চেকপয়েন্ট সম্পাদন করে, এটি কোনও নির্দিষ্ট এলএসএন-এ টেবিলের সামগ্রীগুলিকে টেকসই স্টোরেজে ফ্লাশ করে।

এলএসএন 3 এ একটি চেকপয়েন্ট ঘটে

এখন যেহেতু আমরা LSN3 এ টেবিলটি নিয়মিত রেখেছি, আমরা সংস্থানগুলি সংরক্ষণ করতে এবং লগের অংশটি এলএসএন 1 থেকে এলএসএন 3 এ ফেলে দিতে পারি। সুতরাং যখন সার্ভারটি পুনরুদ্ধার করে, তখন এটি কেবলমাত্র LSN4 পুনরায় চালিত করতে পারে এবং ফলস্বরূপ, এটি একটি দ্রুত প্রারম্ভিক ক্রমকে মঞ্জুরি দেয়।

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

প্রতিলিপি রাষ্ট্র মেশিন

একটি প্রতিলিপিযুক্ত রাষ্ট্র মেশিন একটি সত্তা, এই ক্ষেত্রে, সারণী, যেটি নির্দিষ্ট সময়ে (টেবিলের বিষয়বস্তু) নির্দিষ্ট সময়ে (লগের অনুক্রম সংখ্যা) হয় এবং রাজ্যে পরিবর্তনের ক্রমটি একটি সেটের সমান হয় আন্তঃসংযুক্ত মেশিনের, সুতরাং শেষ পর্যন্ত, প্রতিটি মেশিন একই অবস্থা ধারণ করে।

আপনি যখনই কোনও মেশিনে একটি রেকর্ড পরিবর্তন করেন, আপনাকে অবশ্যই অন্য প্রতিলিপিগুলিতে একই পরিবর্তনটি প্রয়োগ করতে হবে।

আমাদের মেশিনের অবস্থার পরিবর্তনের সামগ্রিক ক্রম দরকার এবং আমাদের লেখার জন্য এগিয়ে থাকা লগই এই উদ্দেশ্যে উপযুক্ত।

প্রতিটি নোডে টেবিলের একটি অনুলিপি থাকে এবং ওয়াল ভাগ করা হয়

আমাদের আর্কিটেকচারে, কেবলমাত্র একটি নোড সিস্টেমের অবস্থা পরিবর্তন করতে সক্ষম, যা টেবিলের বিষয়বস্তুগুলিকে পরিবর্তন করতে পারে: আসুন একে একে নেতা বলি call

প্রতিটি নোডের স্মৃতিতে পুরো টেবিলের একটি অনুলিপি থাকে। যখন কোনও লেখা আসে, এটি ওয়াল-এ লেখা হয় এবং তারপরে এটি পাঠকদের জন্য ক্লায়েন্টদের কাছে দৃশ্যমান করা হয়।

অন্যান্য নন-লিডার নোড, অনুসরণকারীরা লগটি লেজ করে, এটি ক্রমাগত লগ থেকে পরিবর্তনগুলি পড়তে থাকে, ঠিক যেমনটি তারা নেতা দ্বারা জারি করা হয়।

অনুসরণকারীরা তাদের নিজস্ব কপির সাথে প্রতিটি পরিবর্তন প্রয়োগ করেন, এইভাবে তারা টেবিলের জন্য একই ইতিহাস দেখতে পাবেন।

এটিও গুরুত্বপূর্ণ যে প্রতিটি পরিবর্তন ওয়াল কর্তৃক একই পরিবর্তন স্বীকৃত হওয়ার পরে অনুসরণকারী দ্বারা প্রয়োগ করা হয়, অন্যথায়, নেতারা ভবিষ্যতে নেতৃত্বের প্রতি সম্মান দেখান।

অ্যাপাচি বুককিপার হ'ল আমাদের প্রয়োজন রাইটিং-ফরোয়ার্ড লগ: এটি টেকসই এবং বিতরণযোগ্য। এটির জন্য ভাগ করা ডিস্ক বা রিমোট স্টোরেজের দরকার নেই, আইটেমগুলির মোট ক্রমের গ্যারান্টি এবং বেড়া সমর্থন। পরবর্তী পোস্টগুলিতে, আমি আপনাকে দেখাব যে কীভাবে অ্যাপাচি বুককিপার আমাদের প্রয়োজনীয়তা পূরণ করবে।

লেখক সম্পর্কে

এন্রিকো অলিভেলি ম্যাগনিউজ২৪.কম এবং ইমেলসুকসেস.কমের বিকাশকারী দলগুলির নেতৃত্বদানকারী ডায়ানিয়ায় প্রধান বিকাশকারী পরিচালক। তিনি অ্যাপাচি বুককিপার এবং আপাচি জুকিপারের একজন পিএমসি সদস্য এবং অ্যাপাচি মাভেনের প্রতিশ্রুতিবদ্ধ। তিনি ওপেন সোর্স প্রকল্পগুলি হার্ডডিবি এবং ব্লজিংক্যাচের স্রষ্টাও।

এই পোস্টটি পছন্দ? দয়া করে সুপারিশ করুন এবং / অথবা ভাগ করুন।

আরও জানতে চান? Https://streamnative.io/blog দেখুন। মিডিয়ামে আমাদের এখানে অনুসরণ করুন এবং আমাদের গিটহাবটি দেখুন।