الگوی بد: ثبت داده‌ها در سرورهای طرف سوم بااستفاده از خط‌مشی جاوا اسکریپت

درحال مشاهده اسناد 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() است که عملیات تماس‌گیرنده را تا تکمیل فرایند گزارش‌گیری معلق می‌کند. الگوی معتبر این است که با حذف این تماس، آن را ناهم‌زمان کنید.

تأثیر

  • اجرای کد گزارش‌گیری ازطریق خط‌مشی جاوا اسکریپت به تأخیر درخواست میانای برنامه‌سازی کاربردی اضافه می‌کند.
  • درخواست‌های هم‌زمان می‌تواند به منابع «پردازشگر پیام» فشار وارد کند و درنتیجه بر پردازش سایر درخواست‌ها تأثیر منفی بگذارد.

روال مطلوب

  • از خط‌مشی MessageLogging برای انتقال/ثبت داده‌ها در سرورهای «گزارش» یا سرویس‌های مدیریت گزارش طرف سوم مثل Sumo Logic،‏ Splunk،‏ Loggly، و غیره استفاده کنید.
  • بزرگ‌ترین مزیت خط‌مشی «گزارش‌گیری پیام» این است که می‌توان آن را در «جریان کارخواه پس‌از ارسال» تعریف کرد، که پس‌از ارسال پاسخ به برنامه کارخواه درخواست‌کننده اجرا می‌شود.
  • تعریف این خط‌مشی در جریان «پس‌از مشتری» به جدا کردن فعالیت گزارش‌گیری و پردازش درخواست/پاسخ کمک می‌کند و درنتیجه از تأخیر جلوگیری می‌کند.
  • اگر الزام خاصی وجود دارد یا دلیلی برای انجام گزارش‌گیری ازطریق جاوا اسکریپت وجود دارد (نه گزینه جریان مشتری Post که در بالا ذکر شد)، باید به‌صورت ناهمزمان انجام شود. به‌عبارت دیگر، اگر از شیء httpClient استفاده می‌کنید، باید مطمئن شوید که جاوا اسکریپت waitForComplete را پیاده‌سازی نمی‌کند

مطالعه بیشتر