অ্যান্টিপ্যাটার্ন: ক্যাশে ত্রুটি প্রতিক্রিয়া

আপনি Apigee Edge ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন দেখুন।

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

  • ডেটা দ্রুত পুনরুদ্ধারের অনুমতি দেয়
  • বারবার ডেটার পুনর্জন্ম এড়ানোর মাধ্যমে প্রক্রিয়াকরণের সময় হ্রাস করে
  • API অনুরোধগুলিকে ব্যাকএন্ড সার্ভারে আঘাত করা থেকে বাধা দেয় এবং এর ফলে ব্যাকএন্ড সার্ভারে ওভারহেড হ্রাস করে
  • সিস্টেম/অ্যাপ্লিকেশন সংস্থানগুলির আরও ভাল ব্যবহারের অনুমতি দেয়
  • API এর প্রতিক্রিয়া সময় উন্নত করে

যখনই আমাদের ঘন ঘন কিছু ডেটা অ্যাক্সেস করতে হয় যা খুব ঘন ঘন পরিবর্তিত হয় না, আমরা এই ডেটা সংরক্ষণ করার জন্য একটি ক্যাশে ব্যবহার করার পরামর্শ দিই।

Apigee Edge অধ্যবসায় এবং দ্রুত পুনরুদ্ধারের জন্য রানটাইমে একটি ক্যাশে ডেটা সংরক্ষণ করার ক্ষমতা প্রদান করে। ক্যাশিং বৈশিষ্ট্যটি PopulateCache নীতি , LookupCache নীতি , InvalidateCache নীতি , এবং ResponseCache নীতির মাধ্যমে উপলব্ধ করা হয়েছে।

এই বিভাগে, এর প্রতিক্রিয়া ক্যাশে নীতি দেখুন। Apigee Edge প্ল্যাটফর্মে প্রতিক্রিয়া ক্যাশে নীতি আপনাকে ব্যাকএন্ড সার্ভার থেকে প্রতিক্রিয়া ক্যাশে করার অনুমতি দেয়। যদি ক্লায়েন্ট অ্যাপ্লিকেশনগুলি একই ব্যাকএন্ড রিসোর্সে বারবার অনুরোধ করে এবং রিসোর্সটি পর্যায়ক্রমে আপডেট করা হয়, তাহলে আমরা এই নীতি ব্যবহার করে এই প্রতিক্রিয়াগুলি ক্যাশে করতে পারি। রেসপন্স ক্যাশে পলিসি ক্যাশে করা রেসপন্স ফিরিয়ে দিতে সাহায্য করে এবং এর ফলে ব্যাকএন্ড সার্ভারে রিকোয়েস্ট ফরোয়ার্ড করা এড়িয়ে যায়।

প্রতিক্রিয়া ক্যাশে নীতি:

  • ব্যাকএন্ডে পৌঁছানোর অনুরোধের সংখ্যা হ্রাস করে
  • নেটওয়ার্ক ব্যান্ডউইথ কমায়
  • API কর্মক্ষমতা এবং প্রতিক্রিয়া সময় উন্নত করে

অ্যান্টিপ্যাটার্ন

ResponseCache নীতি আপনাকে ডিফল্টরূপে যেকোনো সম্ভাব্য স্ট্যাটাস কোড সহ HTTP প্রতিক্রিয়া ক্যাশে করতে দেয়। এর মানে হল যে সাফল্য এবং ত্রুটি প্রতিক্রিয়া উভয়ই ক্যাশে করা যেতে পারে।

এখানে ডিফল্ট কনফিগারেশন সহ একটি নমুনা প্রতিক্রিয়া ক্যাশে নীতি রয়েছে:

<!-- /antipatterns/examples/1-1.xml -->
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ResponseCache async="false" continueOnError="false" enabled="true" name="TargetServerResponseCache">
  <DisplayName>TargetServer ResponseCache</DisplayName>
  <CacheKey>
    <Key Fragment ref="request.uri" /></CacheKey>
    <Scope>Exclusive</Scope>
    <ExpirySettings>
      <TimeoutInSec ref="flow.variable.here">600</TimeoutInSec>
    </ExpirySettings>
  <CacheResource>targetCache</CacheResource>
</ResponseCache>

প্রতিক্রিয়া ক্যাশে নীতি তার ডিফল্ট কনফিগারেশনে ত্রুটি প্রতিক্রিয়া ক্যাশ করে। যাইহোক, প্রতিকূল প্রভাব সম্পর্কে যথেষ্ট চিন্তাভাবনা না করে ত্রুটির প্রতিক্রিয়া ক্যাশে করা যুক্তিযুক্ত নয় কারণ:

  • দৃশ্যকল্প 1 : ব্যর্থতা একটি অস্থায়ী, অজানা সময়ের জন্য ঘটতে পারে এবং সমস্যাটি ঠিক হয়ে যাওয়ার পরেও ক্যাশিংয়ের কারণে আমরা ত্রুটির প্রতিক্রিয়াগুলি পাঠানো চালিয়ে যেতে পারি

    বা

  • দৃশ্যকল্প 2 : ব্যর্থতাগুলি একটি নির্দিষ্ট সময়ের জন্য পর্যবেক্ষণ করা হবে, তারপর সমস্যাটি ঠিক হয়ে গেলে আমাদের ক্যাশে প্রতিক্রিয়া এড়াতে কোডটি পরিবর্তন করতে হবে

আরো বিস্তারিতভাবে এই দুটি দৃশ্যকল্প গ্রহণ করে এটি ব্যাখ্যা করা যাক।

দৃশ্যকল্প 1: অস্থায়ী ব্যাকএন্ড/রিসোর্স ব্যর্থতা

বিবেচনা করুন যে ব্যাকএন্ড সার্ভারে ব্যর্থতা নিম্নলিখিত কারণগুলির একটির কারণে:

  • একটি অস্থায়ী নেটওয়ার্ক সমস্যা
  • ব্যাকএন্ড সার্ভার অত্যন্ত ব্যস্ত এবং একটি অস্থায়ী সময়ের জন্য অনুরোধের উত্তর দিতে অক্ষম৷
  • অনুরোধ করা ব্যাকএন্ড সংস্থানটি অস্থায়ী সময়ের জন্য সরানো/অনুপলব্ধ হতে পারে
  • ব্যাকএন্ড সার্ভার একটি অস্থায়ী সময়ের জন্য উচ্চ প্রক্রিয়াকরণ সময়ের কারণে ধীর গতিতে সাড়া দিচ্ছে ইত্যাদি

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

দৃশ্যকল্প 2: প্রলম্বিত বা স্থির ব্যাকএন্ড/রিসোর্স ব্যর্থতা

বিবেচনা করুন যে আমরা জানি ব্যাকএন্ডে ব্যর্থতা একটি নির্দিষ্ট সময়ের জন্য। উদাহরণস্বরূপ, আপনি সচেতন যে হয়:

  • একটি নির্দিষ্ট ব্যাকএন্ড সংস্থান 1 ঘন্টার জন্য অনুপলব্ধ থাকবে৷

    বা

  • আকস্মিক সাইট ব্যর্থতা, স্কেলিং সমস্যা, রক্ষণাবেক্ষণ, আপগ্রেড ইত্যাদির কারণে ব্যাকএন্ড সার্ভারটি 24 ঘন্টার জন্য সরানো/অনুপলব্ধ।

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

প্রভাব

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

ভাল অভ্যাস

  • প্রতিক্রিয়া ক্যাশে ত্রুটি প্রতিক্রিয়া সংরক্ষণ করবেন না. নিশ্চিত করুন যে <ExcludeErrorResponse> উপাদানটি ResponseCache নীতিতে true হিসাবে সেট করা হয়েছে যাতে নীচের কোড স্নিপেটে দেখানো ত্রুটির প্রতিক্রিয়াগুলি ক্যাশে করা থেকে রোধ করা যায়। এই কনফিগারেশনের মাধ্যমে শুধুমাত্র ডিফল্ট সাফল্য কোড 200 থেকে 205 (যদি না সাফল্যের কোডগুলি পরিবর্তন করা হয়) ক্যাশে করা হবে।
    <!-- /antipatterns/examples/1-2.xml -->
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ResponseCache async="false" continueOnError="false" enabled="true" name="TargetServerResponseCache">
      <DisplayName>TargetServerResponseCache</DisplayName>
      <CacheKey>
        <KeyFragment ref="request.uri" />
      </CacheKey>
      <Scope>Exclusive</Scope>
      <ExpirySettings>
        <TimeoutinSec ref="flow.variable.here">600</TimeoutinSec>
      </ExpirySettings>
      <CacheResource>targetCache</CacheResource>
      <ExcludeErrorResponse>true</ExcludeErrorResponse>
    </ResponseCache>
    
  • আপনার যদি কিছু নির্দিষ্ট কারণে ত্রুটির প্রতিক্রিয়া ক্যাশে করার প্রয়োজন হয়, তাহলে আপনি সর্বোচ্চ/সঠিক সময়কাল নির্ধারণ করতে পারেন যার জন্য ব্যর্থতা পর্যবেক্ষণ করা হবে (যদি সম্ভব):
    • আপনি যে সময়ের জন্য ব্যর্থতা দেখা যায় তার চেয়ে বেশি সময় ত্রুটির প্রতিক্রিয়াগুলি ক্যাশে করবেন না তা নিশ্চিত করতে মেয়াদ শেষ হওয়ার সময় যথাযথভাবে সেট করুন।
    • <ExcludeErrorResponse> এলিমেন্ট ছাড়াই ত্রুটির প্রতিক্রিয়া ক্যাশে করতে ResponseCache নীতি ব্যবহার করুন।

    আপনি যদি নিশ্চিত হন যে ব্যাকএন্ড সার্ভার ব্যর্থতা একটি সংক্ষিপ্ত/অস্থায়ী সময়ের জন্য নয় তবেই এটি করুন।

  • Apigee ব্যাকএন্ড সার্ভার থেকে 5xx প্রতিক্রিয়া ক্যাশ করার সুপারিশ করে না।