Antipattern: تسجيل البيانات في خوادم خارجية باستخدام سياسة JavaScript

يتم الآن عرض مستندات Apigee Edge.
انتقِل إلى مستندات Apigee X.
المعلومات

تسجيل الدخول هو إحدى الطرق الفعّالة لتصحيح الأخطاء. يمكن تسجيل كل المعلومات المتعلقة بطلب واجهة برمجة التطبيقات، مثل العناوين ومَعلمات النماذج ومَعلمات طلب البحث والمتغيرات الديناميكية وما إلى ذلك، للرجوع إليها لاحقًا. يمكن تسجيل المعلومات محليًا في معالِجات الرسائل (Apigee Edge for Private Cloud فقط) أو إلى خوادم تابعة لجهات خارجية مثل Sumo Logic أو Splunk أو Loggly.

مضادة للأنماط

في الرمز أدناه، يتم استخدام الكائن httpClient في سياسة JavaScript لتسجيل البيانات في خادم Summo 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()، والتي تؤدي إلى تعليق عمليات المتصل إلى أن تكتمل عملية التسجيل. ويتمثل النمط الصحيح في جعل هذا غير متزامن عن طريق استبعاد هذا الاتصال.

التأثير

  • يؤدي تنفيذ رمز التسجيل عبر سياسة JavaScript إلى زيادة وقت استجابة طلب واجهة برمجة التطبيقات.
  • يمكن أن تؤدي الطلبات المتزامنة إلى إجهاد الموارد في معالج الرسائل، وبالتالي، ما يؤثر سلبًا في معالجة الطلبات الأخرى.

أفضل الممارسات

  • استخدِم سياسةMessageLogging لنقل/تسجيل البيانات إلى خوادم Log أو خدمات إدارة السجلّات التابعة لجهات خارجية، مثل Sumo Logic وSplunk وLoggly، وغيرها.
  • وتتمثّل أكبر ميزة لسياسة "تسجيل الرسائل" في إمكانية تحديدها في "مسار العميل" الذي يتم تنفيذه بعد إرسال الردّ إلى تطبيق العميل الذي قدّم الطلب.
  • إنّ تحديد هذه السياسة في مسار عملية ما بعد العميل يساعد في فصل نشاط التسجيل ومعالجة الطلبات/الاستجابة، وبالتالي تجنُّب حالات الاستجابة.
  • إذا كان هناك شرط محدّد أو سبب لتسجيل الدخول عبر JavaScript (وليس خيار "تدفق العميل" المذكور أعلاه)، يجب إجراء ذلك بشكل غير متزامن. بعبارة أخرى، إذا كنت تستخدم الكائن httpClient، عليك التأكد من أنّ JavaScript لا تنفّذ waitForComplete.

محتوى إضافي للقراءة