এই সাইটের বিষয়বস্তু কৃত্রিম বুদ্ধিমত্তা (AI) বা মেশিন অনুবাদ প্রযুক্তি ব্যবহার করে অনুবাদ করা হয়েছে এবং ত্রুটি থাকতে পারে।

Skip to content

বড় পরিসরের প্ল্যাটফর্মের নির্ভরযোগ্যতা প্রদান

যে কোনো স্কেলযোগ্য বিতরণকৃত প্ল্যাটফর্ম পরিচালনা করতে নির্ভরযোগ্যতার প্রতি প্রতিশ্রুতি আবশ্যক, যাতে গ্রাহকরা যখনই যা প্রয়োজন তা পেতে পারে। নির্ভরতাগুলো বেশ জটিল হতে পারে, বিশেষ করে Roblox-এর মতো একটি বিশাল প্ল্যাটফর্মের ক্ষেত্রে। নির্ভরযোগ্য সেবা তৈরি করার অর্থ হলো, নির্ভরতার জটিলতা ও অবস্থা যাই হোক না কেন, কোনো সেবা বাধাগ্রস্ত হবে না (অর্থাৎ উচ্চ উপলব্ধতা), বাগমুক্তভাবে কাজ করবে (অর্থাৎ উচ্চ গুণমান) এবং ত্রুটিবিহীনভাবে চলবে (অর্থাৎ ত্রুটি সহনশীলতা)।

বিশ্বাসযোগ্যতা কেন গুরুত্বপূর্ণ

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

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

CAP উপপাদ্য অনুযায়ী, যেকোনো বিতরণকৃত সিস্টেম এই তিনটি দিকের মধ্যে মাত্র দুটি নিশ্চিত করতে পারে, তাই আমাদের কমপ্লায়েন্স সার্ভিসগুলো উচ্চ উপলব্ধতা এবং পার্টিশন-সহনশীলতা বজায় রাখতে কিছুটা সামঞ্জস্য ত্যাগ করে। তবুও, আমাদের সার্ভিসগুলো খুব সামান্যই ত্যাগ করেছে এবং নীচে বর্ণিত যুক্তিসঙ্গত স্থাপত্যগত পরিবর্তনের মাধ্যমে ভালো সামঞ্জস্য অর্জনের উপায় খুঁজে পেয়েছে।

উচ্চতর নির্ভরযোগ্যতা অর্জনের প্রক্রিয়াটি পুনরাবৃত্তিমূলক, যেখানে কঠোর পরিমাপ ধারাবাহিক কাজের সাথে সঙ্গতিপূর্ণভাবে চলে যাতে ঘটনা ঘটার আগেই ত্রুটি প্রতিরোধ, অনুসন্ধান, সনাক্তকরণ এবং মেরামত করা যায়। আমাদের দল নিম্নলিখিত অনুশীলনগুলিতে দৃঢ় মূল্য খুঁজে পেয়েছে:

  • সঠিক পরিমাপ - গ্রাহকদের কাছে গুণগত মান কীভাবে সরবরাহ করা হয় এবং নির্ভরযোগ্যতা আমাদের কাছে কীভাবে গুণগত মান পৌঁছে দেয়, সে সম্পর্কে সম্পূর্ণ পর্যবেক্ষণযোগ্যতা তৈরি করুন।
  • প্রোঅ্যাকটিভ পূর্বাভাস - স্থাপত্য পর্যালোচনা এবং নির্ভরতা ঝুঁকি মূল্যায়নের মতো কার্যক্রম পরিচালনা করা।
  • সংশোধনকে অগ্রাধিকার দেওয়া - আমাদের পরিষেবা এবং এর সাথে সংযুক্ত নির্ভরশীল পরিষেবাগুলির ঘটনার প্রতিবেদন সমাধানের প্রতি আরও বেশি মনোযোগ দেওয়া।

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

সঠিক পরিমাপের শক্তি

মেট্রিক্সে আরও গভীরে যাওয়ার আগে সার্ভিস লেভেল পরিমাপ সম্পর্কে একটি সংক্ষিপ্ত ব্যাখ্যা করা প্রয়োজন।

  • SLO (Service Level Objective) হল সেই নির্ভরযোগ্যতার লক্ষ্য যা আমাদের দল অর্জন করতে চায় (যেমন 99.999%)।
  • SLI (Service Level Indicator) হল নির্দিষ্ট সময়সীমার জন্য অর্জিত নির্ভরযোগ্যতা (যেমন গত ফেব্রুয়ারিতে 99.975%)।
  • SLA (Service Level Agreement) হল সেই নির্ভরযোগ্যতা যা নির্দিষ্ট সময়সীমার মধ্যে আমাদের গ্রাহকদের কাছে প্রদান ও প্রত্যাশা করা হয় (যেমন: সপ্তাহে 99.99%)।

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

এই SLI বা সাফল্যের অনুপাত গ্রাহকদের দৃষ্টিকোণ থেকে (অর্থাৎ ক্লায়েন্টদের) সংগ্রহ করা হয়। উদ্দেশ্য হল আমাদের গ্রাহকদের কাছে প্রদত্ত প্রকৃত এন্ড-টু-এন্ড অভিজ্ঞতা পরিমাপ করা, যাতে আমরা নিশ্চিত হতে পারি যে SLA পূরণ হয়েছে। না করলে একটি মিথ্যা নির্ভরযোগ্যতার অনুভূতি তৈরি হবে, যা ক্লায়েন্টদের সাথে সংযোগ স্থাপনের সকল অবকাঠামোগত উদ্বেগকে উপেক্ষা করে। গ্রাহক SLI-এর মতোই, আমরা সম্ভাব্য কোনো ঝুঁকি ট্র্যাক করতে ডিপেন্ডেন্সি SLI সংগ্রহ করি। বাস্তবে, সমস্ত নির্ভরশীলতা SLA-গুলো সার্ভিস SLA-র সাথে সামঞ্জস্যপূর্ণ হওয়া উচিত এবং এদের সাথে সরাসরি নির্ভরশীলতা রয়েছে। একটির ব্যর্থতা মানেই সবগুলোর ব্যর্থতা। আমরা সার্ভিস (অর্থাৎ সার্ভার) থেকেও মেট্রিক্স ট্র্যাক ও রিপোর্ট করি, তবে এটি উচ্চ নির্ভরযোগ্যতার জন্য প্রকৃত উৎস নয়।

SLI-র পাশাপাশি, প্রতিটি বিল্ড গুণগত মেট্রিক সংগ্রহ করে যা আমাদের CI ওয়ার্কফ্লো দ্বারা রিপোর্ট করা হয়। এই অনুশীলনটি গুণগত গেট (যেমন, কোড কভারেজ) কঠোরভাবে প্রয়োগ করতে এবং কোডিং স্ট্যান্ডার্ডের সম্মতি ও স্ট্যাটিক কোড বিশ্লেষণের মতো অন্যান্য অর্থবহ মেট্রিক রিপোর্ট করতে সাহায্য করে। এই বিষয়টি পূর্বে অন্য একটি নিবন্ধে, 'পারফরম্যান্স দ্বারা চালিত মাইক্রোসার্ভিস তৈরি' (Building Microservices Driven by Performance) শিরোনামে আলোচনা করা হয়েছে। গুণমানের প্রতি যত্নশীল মনোযোগ নির্ভরযোগ্যতার ক্ষেত্রে গুরুত্বপূর্ণ, কারণ আমরা যত বেশি চমৎকার স্কোর অর্জনে বিনিয়োগ করব, ততই আমরা নিশ্চিত হতে পারব যে প্রতিকূল পরিস্থিতিতে সিস্টেম ব্যর্থ হবে না।

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

ব্যর্থতা প্রত্যাশা করুন

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

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

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

ডিপেনডেন্সি ঝুঁকি মূল্যায়ন (Dependency Risk Assessment) হল নির্ভরতার সম্ভাব্য সমস্যা চিহ্নিত করার একটি গুরুত্বপূর্ণ হাতিয়ার। এর মানে আমরা কম SLI (Service Level Index) সহ নির্ভরতাগুলো চিহ্নিত করি এবং SLA (Service Level Agreement) সামঞ্জস্যের জন্য অনুরোধ করি। ইন্টিগ্রেশন ধাপের সময় এই নির্ভরতাগুলোর বিশেষ মনোযোগ প্রয়োজন, তাই আমরা নতুন নির্ভরতাগুলো আমাদের পরিকল্পনার জন্য যথেষ্ট পরিপক্ক কিনা তা যাচাই করতে বেঞ্চমার্কিং এবং পরীক্ষায় অতিরিক্ত সময় ব্যয় করি। এর একটি ভালো উদাহরণ হল Roblox Storage-as-a-Service-এর প্রাথমিক গ্রহণ। এই সার্ভিসের সাথে ইন্টিগ্রেশনের জন্য বাগ টিকিট দায়ের করা এবং ফলাফল ও প্রতিক্রিয়া জানাতে নিয়মিত সিঙ্ক মিটিং করা প্রয়োজন হয়েছিল। এই সমস্ত কাজের জন্য "reliability" ট্যাগ ব্যবহার করা হয় যাতে আমরা দ্রুত এর উৎস এবং অগ্রাধিক্যগুলো চিহ্নিত করতে পারি। নতুন ডিপেন্ডেন্সিটি আমাদের জন্য প্রস্তুত আছে কি না সে বিষয়ে আত্মবিশ্বাসী হওয়া পর্যন্ত প্রায়ই বৈশিষ্ট্য নির্ধারণ (characterization) করা হয়েছিল। এই অতিরিক্ত কাজটি আমাদেরকে ঐ সাধারণ লক্ষ্য অর্জনের জন্য একসঙ্গে কাজ করার সময় প্রত্যাশিত নির্ভরযোগ্যতার স্তরে ডিপেন্ডেন্সিটিকে উন্নীত করতে সাহায্য করেছে।

অরাজকতায় কাঠামো আনুন

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

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

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

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

উচ্চতর নির্ভরযোগ্যতার পথে যাত্রা সহজ নয়, তবে যদি আপনি এমন একটি বিশ্বাসযোগ্য প্ল্যাটফর্ম তৈরি করতে চান যা মানুষকে একত্রিত হওয়ার নতুন রূপ দেয়, তবে এটি অপরিহার্য।

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