অ্যান্টিপ্যাটার্ন: জাভাস্ক্রিপ্ট নীতি ব্যবহার করে থার্ড-পার্টি সার্ভারে ডেটা লগ করা

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

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

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

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

LogData_JS:

<!-- /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() হল মূল কারণ, যা লগিং প্রসেস সম্পূর্ণ না হওয়া পর্যন্ত কলারের অপারেশন সাসপেন্ড করে দেয়। এই কলটি বাদ দিয়ে এটিকে অ্যাসিঙ্ক্রোনাস করে তোলাই হল সঠিক প্যাটার্ন।

প্রভাব

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

পেশাদার পদ্ধতি

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

আরও পড়ুন