منتدى استراحات زايد

منتدى استراحات زايد (http://vb.ma7room.com/index.php)
-   منتدى أخبار المواقع والمنتديات العربية والأجنبية (http://vb.ma7room.com/forumdisplay.php?f=183)
-   -   إستخدام open_file_cache في NGINX لتقليل إستهلاك IO وزيادة السرعة (http://vb.ma7room.com/showthread.php?t=1307691)

محروم.كوم 08-29-2013 04:40 AM

إستخدام open_file_cache في NGINX لتقليل إستهلاك IO وزيادة السرعة
 
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته

http://albazy.com/wp-content/uploads/2012/09/NGINX.jpg


في لينكس تستخدم الذاكرة المؤقتة RAM ليس فقط لمعالجة المهام الحالية بل هناك ايضاً Cache يقوم بتخزين المعلومات من الهارديسك, وذلك لسرعة الرجوع لها أو إعادة طلبها. هذا الشيء الهدف منه تقليل الضغط على الهارديسك والحفاظ قدر الامكان على معدل IO صغير, كون الهارديسك ابطئ بكثير من الرام في القراءة والكتابة وتتم العملية هذه بشكل تلقائي تديرها الكرنل الخاصة بالنظام, ولهذا السبب ايضاً دائماً عند استخدام الامر free -m نجد ان الرام المستهلك تقريباً 95% وفعلياً هو ليس كذالك. لكن ما دخل هذا بخاصية open_file_cache في NGINX

إنجنكس يوفر خاصية بنفس الفكرة وهي open_file_cache حيث يتم تخزين الملفات التي تطلب كثيراً (في الحقيقة هذا يعتمد على الاعدادات) في الرام وعند طلبها يتم تسليمها للعميل (مثلاً المتصفح) بوقت اسرع وايضاً بإستهلاك موارد سيرفر أقل. تخيل لديك 2000 طلب/ث على ملف image.png (اوك هنا فعلياً دور الرام والسستم راح يشتغل تلقائياً) لكن مع الخاصية هذه انا استطيع التحكم بها بسهولة وحسب الرغبة مع تحديد صيغ الملفات التي يتم تخزينها في الرام.


متطلبات


وجود NGINX بالسيرفر يعمل كـ web server وليس proxy server (في الحقيقة ممكن تفعيلها ان كان انجنكس يعمل proxy على نفس سيرفر الويب او سيرفر اخر الامر فقط يتطلب المزيد من الاعدادات تختلف حسب الحالة)
السماح بفتح ملفات لا تقل عن 20 الف (شيك عبر ulimit وارفعها ان كانت قليلة لليوزر الذي يشغل NGINX)
وجود رام متاح يكفي (شيك عبر free -m ونقص من الاستهلاك كلً من cache, buffer)


طريقة الاستخدام

أفضل استخدام لها هو لملفات Static, ولكن يمكن استخدامها مع proxy_cache او fastcgi_cache خاصة اذا كنت تستخدم الاخيرين وتحفظ البيانات على الهارديسك بدل من Shared Memory. وهنا سوف اشرح طريقة الاستخدام ملفات ستاتك فقط باستخدام دايركتيف location

ان كنت تستخدم location معين لملفات الستاتك فالامر شبه جاهز معك وان لم تكن تستخدم يمكن اضافة location التالي في دايركتيف server او الـ virtual host




رمز PHP:

location
~* ^.+\.(jpg|jpeg|gif|png|ico|css|js|txt|swf|zip|tgz|gz|rar|pdf)$ {
root /path/to/static_files_dir;
}


هنا نحن وضعنا الصيغ مثل css,js,png (يمكنك تغيير الملفات حسب حاجتك) في location معين مع تحديد المسار (غير المسار حسب ماعندك) وبهذا اصبح لدينا الان تحكم اكبر فيها مثل عدم تسجيل الاخطاء لها او ايقاف access log لها ..الخ. الشيء الاخر الذي سوف نقوم به الان هو ضبط خصائص open_file_cache في location هذا ليصبح كالتالي

رمز PHP:

location
~* ^.+\.(jpg|jpeg|gif|png|ico|css|js|txt|swf|zip|tgz|gz|rar|pdf)$ {
root /path/to/static_files_dir;
open_file_cache max=3000 inactive=110s;
open_file_cache_min_uses 1;
open_file_cache_valid 120s;
open_file_cache_errors off;
}


هنا حددنا اقصى عدد ملفات يبقى مفتوح في الرام هو 3000 الف ملف, اذا تم استخدام الملف مرة واحدة فقط فانه يبقى في الرام وبهذا باستخدام 1, وصالحة الملف 120s اي ثانية وبعدها يصبح منتهي الصلاحية ويغلق, ايضاً يبقى في حالة الخمول او الانتظار لمدة اقصاها 110s, واوقفنا تسجيل الاخطاء عبر off.


نصائح وملاحظات

لا تجعل عدد الملفات كبير اكبر من ulimit او قريب منه.
لا تجعل وقت الانتظار اكثر من وقت الصلاحية حيث بكل الاحوال الملف سوف يغلق اذا وصل لوقت انتهاء الصلاحية.
ايضاً لا تجعل وقت الصلاحية كبير ولا يتجاوز الدقيقتين برايي.
عدد مرات الطلب وبعدها يتم تكيش الملف انا وضعتها 1 وهذا جيد اذا كان عليك ضغط كبير غير هذا 2 ~ 5 مناسب حسب الحاجه.
في حال وصول عدد الملفات المفتوحة إلى 3000 او حسب الرقم في max فان NGINX تلقائياً سوف يبدأ يغلق اقدم الملفات ليفتح ملفات جديدة بناء على الطلبات.

الفوائد

تقليل الضغط على IO (هذا اهم واكبر فائدة تقليل معدل IO يعني سيرفر مستقر اكثر ومتجاوب دائماً, اسألني انا)
زيادة سرعة في عملية معالجة الملفات وارسالها للمتصفح (حقيقة ان الامر لن يشعر به الزائر كثيراً لان بشكل عام لا شيء اسرع من NGINX بالتعامل مع الملفات الثابته وان كانت الاعدادات الاساسية!)


السلبيات

استخدام وقت Valid عالي بالتالي في حال تعديل الملف او حذفة سوف يستمر كما هو للزوار لحين يصبح timeout
لا تكون ذات فاعلية كبيرة اذا كان لديك رام قليل وفعلياً الرام مستهلك بنسبة كبيرة جداً (استهلاك فعلي وليس ككاش) فهذا قد يتسبب بتخزين ببدا عملية SWAP
ما سبق من سلبيات لا اعتبرها سلبيات سببها NGINX فالاولى سوء اعداد والثانية فقر موارد :)


الساعة الآن 03:11 PM

Powered by vBulletin® Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO 3.5.2 TranZ By Almuhajir


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227