অ্যান্টিপ্যাটার্ন: JavaScript নীতি ব্যবহার করে তৃতীয় পক্ষের সার্ভারে ডেটা লগ করুন

আপনি Apigee Edge-এর ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন
.info- তে যান।

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

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

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

লগডেটা_জেএস:

<!-- /antipatterns/examples/1-4.xml -->
<Javascript async="false" continueOnError="false" enabled="true" timelimit="2000" name="LogData_JS">
  <DisplayName>LogData_JS</DisplayName>
  <ResourceURL>jsc://LogData.js</ResourceURL>
</Javascript>

LogData.js:

<!-- /antipatterns/examples/1-5.xml -->
var sumoLogicURL = "...";
httpClient.send(sumoLogicURL);
waitForComplete();

এখানে মূল সমস্যাটি হলো waitForComplete() কলটি, যা লগিং প্রক্রিয়া সম্পূর্ণ না হওয়া পর্যন্ত কলারের অপারেশনগুলো স্থগিত রাখে। একটি বৈধ প্যাটার্ন হলো এই কলটি বাদ দিয়ে এটিকে অ্যাসিঙ্ক্রোনাস করে তোলা।

প্রভাব

  • জাভাস্ক্রিপ্ট পলিসির মাধ্যমে লগিং কোড এক্সিকিউট করলে এপিআই রিকোয়েস্টের লেটেন্সি বেড়ে যায়।
  • একই সাথে একাধিক অনুরোধ মেসেজ প্রসেসরের রিসোর্সের উপর চাপ সৃষ্টি করতে পারে এবং ফলস্বরূপ অন্যান্য অনুরোধের প্রক্রিয়াকরণকে নেতিবাচকভাবে প্রভাবিত করতে পারে।

সর্বোত্তম অনুশীলন

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

আরও পড়ুন