আপনি Apigee Edge-এর ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন .info- তে যান।
ক্যাশিং হলো ভবিষ্যতে ব্যবহারের জন্য ক্যাশ নামক একটি স্টোরেজ এলাকায় ডেটা সাময়িকভাবে সংরক্ষণ করার একটি প্রক্রিয়া। ডেটা ক্যাশিং উল্লেখযোগ্য পারফরম্যান্স সুবিধা প্রদান করে, কারণ এটি:
- ডেটা দ্রুত পুনরুদ্ধার করতে সাহায্য করে।
- বারবার ডেটা পুনরুৎপাদন এড়ানোর মাধ্যমে প্রক্রিয়াকরণের সময় হ্রাস করে।
- এপিআই অনুরোধগুলিকে ব্যাকএন্ড সার্ভারে পৌঁছানো থেকে বিরত রাখে এবং এর ফলে ব্যাকএন্ড সার্ভারগুলির উপর চাপ হ্রাস করে।
- সিস্টেম/অ্যাপ্লিকেশন রিসোর্সের আরও ভালো ব্যবহার নিশ্চিত করে।
- এপিআই-এর প্রতিক্রিয়া সময় উন্নত করে
যখন আমাদের এমন কোনো ডেটা ঘন ঘন অ্যাক্সেস করতে হয় যা খুব একটা পরিবর্তিত হয় না, তখন সেই ডেটা সংরক্ষণ করার জন্য আমরা ক্যাশে ব্যবহার করার জোরালো পরামর্শ দিই।
Apigee Edge ডেটাকে স্থায়ীভাবে সংরক্ষণ এবং দ্রুত পুনরুদ্ধারের জন্য রানটাইমে ক্যাশে সংরক্ষণ করার সুবিধা প্রদান করে। এই ক্যাশিং ফিচারটি PopulateCache পলিসি , LookupCache পলিসি , InvalidateCache পলিসি এবং ResponseCache পলিসি- এর মাধ্যমে উপলব্ধ করা হয়।
এই অংশে, চলুন রেসপন্স ক্যাশ পলিসি নিয়ে আলোচনা করা যাক। Apigee Edge প্ল্যাটফর্মের রেসপন্স ক্যাশ পলিসি আপনাকে ব্যাকএন্ড সার্ভার থেকে আসা রেসপন্সগুলো ক্যাশ করার সুযোগ দেয়। যদি ক্লায়েন্ট অ্যাপ্লিকেশনগুলো একই ব্যাকএন্ড রিসোর্সে বারবার অনুরোধ পাঠায় এবং রিসোর্সটি পর্যায়ক্রমে আপডেট হয়, তাহলে আমরা এই পলিসি ব্যবহার করে সেই রেসপন্সগুলো ক্যাশ করতে পারি। রেসপন্স ক্যাশ পলিসি ক্যাশ করা রেসপন্সগুলো ফেরত দিতে সাহায্য করে এবং ফলস্বরূপ অপ্রয়োজনীয়ভাবে ব্যাকএন্ড সার্ভারে অনুরোধ ফরওয়ার্ড করা এড়িয়ে চলে।
প্রতিক্রিয়া ক্যাশে নীতি:
- ব্যাকএন্ডে পৌঁছানো অনুরোধের সংখ্যা হ্রাস করে।
- নেটওয়ার্ক ব্যান্ডউইথ হ্রাস করে
- এপিআই-এর কর্মক্ষমতা এবং প্রতিক্রিয়ার সময় উন্নত করে
অ্যান্টিপ্যাটার্ন
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>
রেসপন্স ক্যাশ পলিসি তার ডিফল্ট কনফিগারেশনে ত্রুটিপূর্ণ রেসপন্স ক্যাশ করে রাখে। তবে, এর প্রতিকূল প্রভাবগুলো সম্পর্কে ভালোভাবে চিন্তা না করে ত্রুটিপূর্ণ রেসপন্স ক্যাশ করা সমীচীন নয়, কারণ:
- দৃশ্যকল্প ১ : একটি অস্থায়ী ও অনির্দিষ্ট সময়ের জন্য ব্যর্থতা ঘটে এবং সমস্যাটি সমাধান হয়ে যাওয়ার পরেও ক্যাশিংয়ের কারণে আমরা ত্রুটিপূর্ণ প্রতিক্রিয়া পাঠাতে পারি।
অথবা
- দৃশ্যকল্প ২ : একটি নির্দিষ্ট সময় ধরে ব্যর্থতা পরিলক্ষিত হবে, এরপর সমস্যাটি সমাধান হয়ে গেলে রেসপন্স ক্যাশিং এড়ানোর জন্য আমাদের কোডটি পরিবর্তন করতে হবে।
চলুন এই দুটি পরিস্থিতি আরও বিশদভাবে ব্যাখ্যা করা যাক।
দৃশ্যকল্প ১: অস্থায়ী ব্যাকএন্ড/রিসোর্স ব্যর্থতা
ধরে নিন যে ব্যাকএন্ড সার্ভারের ব্যর্থতার কারণ নিম্নলিখিত কারণগুলির মধ্যে একটি:
- একটি অস্থায়ী নেটওয়ার্ক ত্রুটি
- ব্যাকএন্ড সার্ভারটি অত্যন্ত ব্যস্ত থাকায় সাময়িকভাবে অনুরোধগুলিতে সাড়া দিতে পারছে না।
- অনুরোধকৃত ব্যাকএন্ড রিসোর্সটি সাময়িকভাবে সরিয়ে নেওয়া বা অনুপলব্ধ থাকতে পারে।
- কিছু সময়ের জন্য বেশি প্রসেসিং সময় লাগার কারণে ব্যাকএন্ড সার্ভারটি ধীরগতিতে সাড়া দিচ্ছে, ইত্যাদি।
এই সমস্ত ক্ষেত্রে, ব্যর্থতাগুলো একটি অনির্দিষ্ট সময় ধরে ঘটতে পারে এবং তারপরে আমরা সফল প্রতিক্রিয়া পেতে শুরু করতে পারি। যদি আমরা ত্রুটিপূর্ণ প্রতিক্রিয়াগুলো ক্যাশ করে রাখি, তাহলে ব্যাকএন্ড সার্ভারের সমস্যাটি সমাধান হয়ে গেলেও আমরা ব্যবহারকারীদের কাছে ত্রুটিপূর্ণ প্রতিক্রিয়া পাঠানো চালিয়ে যেতে পারি।
দৃশ্যকল্প ২: দীর্ঘস্থায়ী বা স্থির ব্যাকএন্ড/রিসোর্স ব্যর্থতা
ধরে নিন, আমরা জানি যে ব্যাকএন্ডের ব্যর্থতাটি একটি নির্দিষ্ট সময়ের জন্য স্থায়ী। উদাহরণস্বরূপ, আপনি অবগত আছেন যে হয়:
- একটি নির্দিষ্ট ব্যাকএন্ড রিসোর্স ১ ঘন্টার জন্য অনুপলব্ধ থাকবে।
অথবা
- হঠাৎ সাইট বিকল হওয়া, স্কেলিং সমস্যা, রক্ষণাবেক্ষণ, আপগ্রেড ইত্যাদির কারণে ব্যাকএন্ড সার্ভারটি ২৪ ঘণ্টার জন্য সরিয়ে নেওয়া হয়েছে বা অনুপলব্ধ রয়েছে।
এই তথ্যের সাহায্যে, আমরা রেসপন্স ক্যাশ পলিসিতে ক্যাশ এক্সপায়ারেশন টাইম যথাযথভাবে সেট করতে পারি, যাতে আমরা এরর রেসপন্সগুলোকে দীর্ঘ সময়ের জন্য ক্যাশ করে না রাখি। তবে, ব্যাকএন্ড সার্ভার/রিসোর্সটি পুনরায় উপলব্ধ হলে, এরর রেসপন্স ক্যাশ করা এড়াতে আমাদের পলিসিটি পরিবর্তন করতে হবে। এর কারণ হলো, যদি ব্যাকএন্ড সার্ভারে কোনো অস্থায়ী/এককালীন ব্যর্থতা ঘটে, তাহলে আমরা রেসপন্সটি ক্যাশ করে ফেলব এবং এর ফলে উপরে সিনারিও ১-এ বর্ণিত সমস্যাটি দেখা দেবে।
প্রভাব
- ব্যাকএন্ড সার্ভারে সমস্যার সমাধান হয়ে যাওয়ার পরেও ত্রুটিপূর্ণ প্রতিক্রিয়া পাঠানো হতে পারে, কারণ ত্রুটিপূর্ণ প্রতিক্রিয়া ক্যাশ করে রাখা হয়।
- ব্যবহারকারীরা কোনো সমস্যার কারণ খুঁজে বের করতে গিয়ে অনেক চেষ্টা করতে পারেন, অথচ তারা জানেনই না যে এই সমস্যাটি ব্যাকএন্ড সার্ভার থেকে আসা ত্রুটিপূর্ণ প্রতিক্রিয়াগুলো ক্যাশ করে রাখার কারণে হয়ে থাকে।
সর্বোত্তম অনুশীলন
- এরর রেসপন্সগুলো রেসপন্স ক্যাশে সংরক্ষণ করবেন না। নিচের কোড স্নিপেটে দেখানো অনুযায়ী, এরর রেসপন্স ক্যাশে হওয়া আটকাতে ResponseCache পলিসিতে
<ExcludeErrorResponse>এলিমেন্টটিtrueতে সেট করা আছে কিনা তা নিশ্চিত করুন। এই কনফিগারেশনের মাধ্যমে শুধুমাত্র ডিফল্ট সাকসেস কোড ২০০ থেকে ২০৫-এর রেসপন্সগুলোই ক্যাশে করা হবে (যদি না সাকসেস কোডগুলো পরিবর্তন করা হয়)।<!-- /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 রেসপন্স ক্যাশ করার সুপারিশ করে না।