কম্পিউটার টিউটোরিয়াল

সঠিক Amazon Aurora এন্ডপয়েন্ট বেছে নিন: একটি প্র্যাক্টিক্যাল গাইড

আপনি যদি কখনো Aurora Read Replicas ব্যবহার করেছেন, তবে আপনি লক্ষ্য করতে পারেন যে বেশ কিছু ভিন্ন এন্ডপয়েন্ট উপলব্ধ। Cluster Endpoint, Reader Endpoint, এবং Instance Endpoints... এই সব অপশনের সাথে, আপনি কীভাবে জানবেন কোনটি কখন ব্যবহার করতে হবে? যেকোনো নন-ট্রivial সিস্টেমের মত, উত্তর হলো... এটা নির্ভর করে। এই ব্লগপোস্টে, আমরা বিভিন্ন এন্ডপয়েন্ট, তাদের ইউজ-কেস, এবং সেই ডিজাইন সিদ্ধান্তের সাথে আসা ট্রেড-অফগুলো দেখব।

প্রথমে, Amazon Aurora-এ উপলব্ধ বিভিন্ন এন্ডপয়েন্টগুলো ছুঁইয়া দেখি।

  • Cluster Endpoint – Cluster Endpoint আপনার অ্যাপ্লিকেশনকে সেই DB ক্লাস্টারের বর্তমান প্রাইমারি DB ইনস্ট্যান্সের সাথে কানেক্ট করে। আপনার অ্যাপ্লিকেশন এই ইনস্ট্যান্সে পড়তে এবং লিখতে উভয়ই করতে পারে।

  • Reader Endpoint – Reader Endpoint উপলব্ধ Read Replicas-এর পুল জুড়ে কানেকশন লোড-ব্যালেন্স করে। রিড কোয়ারি এখানে অফলোড করুন, আপনার প্রাইমারি DB ইনস্ট্যান্সের লোড কমাতে।

  • Instance Endpoints – একটি Instance Endpoint ক্লাস্টারের একটি নির্দিষ্ট ইনস্ট্যান্সের সাথে কানেক্ট করে। ক্লায়েন্টদের কোয়ারি অ্যালোকেশনের ওপর ফাইন-গ্রেইন্ড কন্ট্রোল থাকে, Amazon Aurora কানেকশন ডিস্ট্রিবিউশন হ্যান্ডল করার পরিবর্তে।

আমি জানি আপনি কী চিন্তা করছেন... আমি শুধু Cluster Endpoint-এ কানেক্ট করব রাইটের জন্য, Reader Endpoint-এ সব রিডের জন্য, এবং আমি কেনো একটি নির্দিষ্ট ইনস্ট্যান্সে কানেক্ট করব - এটি বিল্ট-ইন ফল্ট টলারেন্স বাইপাস করে এবং ত্রাসদী আহ্বান করে, সেটি না? 앞서ো আলোচনা করা হয়েছে, আপনার অ্যাপ্লিকেশন এবং Aurora-এর সাথে এর ইন্টারঅ্যাকশন একটি কমপ্লেক্স (অথবা কমপক্ষে নন-ট্রivial) সিস্টেম তৈরি করে। কমপ্লেক্স সিস্টেমের সাথে, one-size-fits-all হলো একটি নিয়ম নয় যা আপনি 믿을 수 있다... যদি না আপনি রাতের মাঝপথে কল পেতে পছন্দ করেন।

চলুন কিছু সিনেরিওর মাধ্যমে যাই এবং দেখি কখন এবং কোথায় বিভিন্ন এন্ডপয়েন্ট ব্যবহার করতে হয়।

तात্ক্ষণিক কনসিস্টেন্সি

কিছু অ্যাপ্লিকেশন ডেটা তাত্ক্ষণিকভাবে কনসিস্টেন্ট থাকাকে এক্সপেক্ট করে। যখন এই অ্যাপ্লিকেশনগুলো ডেটা লিখে, তারা অবিলম্বে ডেটা পড়ে স্ট্রিক্ট কমপ্লায়েন্সে অনেক ডিজাইন প্যাটার্নের সাথে যা বলে, "মডেলের ওপর নির্ভর করুন, আপনার লোকাল ডেটার ওপর নয়"। Amazon Aurora ACID-compliant; একটি সফল রাইট কমিটের পর অবিলম্বে Cluster Endpoint- থেকে একটি রিড প্রত্যাশিত ডেটা রিট্রিভ করবে (একটি অন্য ট্রানজ্যাকশন ডেটা মডিফাই না করলে পরবর্তী রিডের আগে)।

সমস্যা হলো যখন রাইটগুলো Cluster Endpoint-এ পাঠানো হয় এবং রিডগুলো Reader Endpoint-এ করা হয়। এটি হয় ডেটা লিখার সময় এবং যখন এটি রিডারদের কাছে দৃশ্যমান হয় তার মধ্যে লেটেন্সির কারণে। রিপ্লিকেশন লেটেন্সি ১০০ মিলিসেকেন্ডের নিচে হলেও, এটি ইনস্ট্যান্টিয়াস নয়, যা একটি রেস কন্ডিশন তৈরি করে। আপনার যদি এমন একটি সিনেরিও থাকে যেখানে আপনাকে লিখার পর অবিলম্বে ডেটা পড়তে হয়, তবে Cluster Endpoint ব্যবহার করুন রিড এবং রাইট উভয়ের জন্য। এটা নোট করা উচিত, আপনি যদি অতিরিক্ত পারফরম্যান্স চান, তবে আপনাকে আপনার প্রাইমারি ইনস্ট্যান্সের আকার বাড়াতে হবে।

তবে, যদি إيفেন্টুয়াল কনসিস্টেন্সি গ্রহণযোগ্য হয় এবং আপনার অ্যাপ্লিকেশন এটিকে সাপোর্ট করে, তবে Reader Endpoint ব্যবহার করা আপনার প্রাইমারি ইনস্ট্যান্সের লোড কমাতে একটি দুর্দান্ত উপায়।

রিড অফলোড করা

যদি লিখার পর অবিলম্বে রিড করা ঠিক না হয়, তবে আলাদা একটি Reader Endpoint-র পয়েন্ট কী? অনেক ইউজ-কেস আছে যেখানে কিছুটা ইনকনসিস্টেন্ট ডেটা ইস্যু নয়। উদাহরণস্বরূপ: ডেইলি রিপোর্টিং। কালের ডেটা থেকে রিপোর্ট জেনারেট করার জন্য ব্যাচ জব চালালে, ১০০-মিলিসেকেন্ড রিপ্লিকেশন ল্যাগ নগণ্য। অন্যান্য সিনেরিওও কল্পনা করা সহজ, যেমন একটি ই-কমার্স সাইটে প্রোডাক্ট ডেসক্রিপশন... আপনি ইউজারের ব্রাউজারে stale ডেটা থাকার সম্ভাবনা বেশি, রিপ্লিকেশন ল্যাগের চেয়ে।

সাধারণভাবে, রিড-হেভি ওয়ার্কলোড যেগুলো তাত্ক্ষণিক কনসিস্টেন্সির ওপর নির্ভর করে না, সেগুলো Reader Endpoint ব্যবহার করার কথা বিবেচনা করা উচিত।

নন-ইউনিফর্ম ওয়ার্কলোড

একই কিছু সিচুয়েশন আছে যেখানে Instance Endpoints ব্যবহার করা অর্থবহ। ধরুন আপনার একটি অ্যাপ্লিকেশন আছে যার বেশ কিছু স্টেটলেস মাইক্রোসার্ভিস আছে একটি Elastic Load Balancer-এর পিছনে। এই সিচুয়েশনে, এটা রিজনেবল ধারণা করা যায় যে কোয়ারিগুলো ক্লায়েন্ট জুড়ে সমানভাবে বিতরণ হয়েছে, এবং তাই Read Replicas জুড়ে সমানভাবে বিতরণ হয়েছে - যখন Reader Endpoint ব্যবহার করা হচ্ছে।

কিন্তু ওয়ার্কলোড প্রতিটি ক্লায়েন্টের জন্য ইউনিফর্ম না হলে কী হবে? যদি একটি রিপোর্টিং সার্ভিস যোগ করা হয়, একটি Read Replica অন্যদের চেয়ে disproportionalitly হাই লোড পায়। যদি আগে উল্লিখিত মাইক্রোসার্ভিসগুলো এই Read Replica-ও ব্যবহার করে, তবে রিপোর্টিং সার্ভিস দ্বারা ব্যবহৃত ইনস্ট্যান্স কোয়ারি করার সময় খারাপ কোয়ারি পারফরম্যান্সের উচ্চ সম্ভাবনা থাকে। এই সমস্যা এড়াতে একটি পদ্ধতি হচ্ছে ক্লায়েন্ট সাইডে কানেকশন ডিস্ট্রিবিউশন ম্যানেজ করা, Amazon Aurora-কে এটি করার দায়িত্ব দেওয়ার পরিবর্তে। خوشবesked, এটি সহজে করা যায় Instance Endpoints ব্যবহার করে Reader Endpoint-এর পরিবর্তে। MariaDB Connector/J for Aurora for MySQL বা Fast Failover with Amazon Aurora PostgreSQL ব্যবহার করে, ড্রাইভারকে আপনি যে ইন্ডিভিজুয়াল ইনস্ট্যান্সগুলো Read Replicas হিসেবে ব্যবহার করতে চান সেগুলোর বিষয়ে অবগত করা যেতে পারে, مما ড্রাইভারকে কীভাবে কোয়ারি ইনডিভিজুয়াল ইনস্ট্যান্সে ডিস্ট্রিবিউট করা যায় সেটি সরাসরি ম্যানেজ করতে দেয়।

DNS ক্যাশিং ম্যানেজ করুন

আপনার ওয়ার্কলোডের প্রকৃতি বুঝার পাশাপাশি, কীভাবে কানেকশন আলোকেট হয় Aurora-এর High Availability এবং Reader Endpoint লোড ব্যালেন্সিং প্রদান করতে সেটি বুঝা গুরুত্বপূর্ণ।

অটোমেটিক Cluster Endpoint ফেইলওভার এবং Reader Endpoint লোড ব্যালেন্সিং ম্যানেজমেন্ট DNS (Amazon Route 53) এর মাধ্যমে হ্যান্ডেল করা হয়, IP, TCP, বা ডেটাবেস ক্লায়েন্ট প্রোটোকল লেয়ারগুলোর মাধ্যমে না। DNS এর মাধ্যমে কানেকশন ডিস্ট্রিবিউশন হ্যান্ডেল করার মানে আপনার অ্যাপ্লিকেশনকে প্রতিটি নতুন কানেকশন রিকোয়ারেস্টের জন্য একটি DNS কোয়ারি করতে হবে। যেসব অ্যাপ্লিকেশন DNS ক্যাশিং ব্যবহার করে সেগুলো ক্যাশ টাইমআউট অ্যাজাস্ট করতে হবে Amazon Aurora-এর DNS রেকর্ড TTL-র সাথে মেলাতে। Aurora DNS রেকর্ড TTL-র চেয়ে বেশি देर DNS রেসপন্স ক্যাশ করলে কিছু এরর কন্ডিশন হবে। যদি একটি High-Availability (HA) ফেইলওভার ইভেন্ট ঘটে, অর্থাৎ একটি Read Replica প্রোমোট হয় প্রাইমারি হতে, একটি ক্যাশড DNS রেসপন্স মানে আপনার অ্যাপ্লিকেশন পুরনো, ব্যর্থ ইনস্ট্যান্সের সাথে রিকানেক্ট করার চেষ্টা করবে। Reader Endpoint-এর কেসে, DNS রেসপন্স ক্যাশ করার ফলে একাধিক কানেকশন একটি নির্দিষ্ট Read Replica-এ চলে যাবে বরং উপলব্ধ Read Replicas জুড়ে বিতরণ হওয়ার পরিবর্তে।

মুড়ো বাঁধা

যেমন আমরা দেখেছি, একটি নন-ট্রivial প্রোডাকশন ওয়ার্কলোডের জন্য কোনো one-size-fits-all সমাধান নেই। আপনার অ্যাপ্লিকেশন যদি তাত্ক্ষণিক কনসিস্টেন্সি চায়, তবে নিশ্চিত করুন যে রিড এবং রাইট উভয়ই Cluster Endpoint-এ পাঠানো হচ্ছে। যখন রিড কোয়ারি কিছুটা রিপ্লিকেশন ল্যাগ হ্যান্ডেল করতে পারে, রিড কোয়ারি Reader Endpoint-এ অফলোড করুন। আপনি যদি Read Replicas ব্যবহার করতে পারেন কিন্তু আপনার কোয়ারি সব ক্লায়েন্ট জুড়ে ইউনিফর্মলি বিতরণ না হয়, তবে Instance Endpoints ব্যবহার করুন এবং ক্লায়েন্ট সাইডে কানেকশন ডিস্ট্রিবিউশন ম্যানেজ করুন। শুধু ভুলবেন না, আপনার অ্যাপ্লিকেশন যদি DNS ক্যাশিং ব্যবহার করে ক্যাশ টাইমআউট DNS রেকর্ড TTL-র চেয়ে বেশি দীর্ঘ হয়, তবে এন্ডপয়েন্টগুলো Cluster Endpoint HA ফেইলওভার বা Reader Endpoint ব্যবহার করার সময় প্রত্যাশা অনুযায়ী behave করবে না।

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

ফিডব্যাক ট্যাব ব্যবহার করে যেকোনো মন্তব্য বা প্রশ্ন করুন।

  1. রিমোট Elasticsearch-এর জন্য লোকালি Kibana ইনস্টল করার ধাপে ধাপে গাইড

  2. MongoDB স্পেস ম্যানেজমেন্ট 습득: অ্যালোকেশন, ড্যাশবোর্ড, এবং স্কেলিং টিপস

  3. JSONStudio ObjectRocket ডেটাবেসে স্মุดলি কানেক্ট করুন

  4. উইন্ডোজ 'No More Endpoints Available' এরর দ্রুত সমাধান