تقنية التخزين المؤقت العالمية
ذاكرة التخزين المؤقت للبيانات: تشير ذاكرة التخزين المؤقت للبيانات المذكورة هنا إلى ذاكرة التخزين المؤقت لاستعلام قاعدة البيانات، في كل مرة يتم فيها الوصول إلى الصفحة، ستكتشف أولاً ما إذا كانت البيانات المخزنة مؤقتًا المقابلة موجودة، وإذا لم تكن موجودة، فاتصل بقاعدة البيانات، واحصل على البيانات، وقم بإجراء تسلسل لها نتائج الاستعلام، احفظها في ملف، وسيتم الحصول على نتائج الاستعلام نفسها مباشرة من جدول أو ملف ذاكرة التخزين المؤقت في المستقبل.
المثال الأكثر استخدامًا هو وظيفة البحث في Discuz، التي تقوم بتخزين معرف النتيجة مؤقتًا في جدول وتبحث في جدول ذاكرة التخزين المؤقت أولاً عند البحث عن نفس الكلمة الرئيسية في المرة القادمة.
كطريقة شائعة، عند ربط جداول متعددة، يتم إنشاء محتويات الجدول المرفق في مصفوفة وحفظها في حقل الجدول الرئيسي، عند الضرورة، يتم تحليل المصفوفة وميزة ذلك هي أن جدول واحد فقط يمكنه ذلك يمكن قراءتها، ولكن العيب هو أن مزامنة البيانات ستستغرق العديد من الخطوات، وقاعدة البيانات هي دائمًا عنق الزجاجة، حيث إن تداول القرص الصلب من أجل السرعة هو النقطة الأساسية في هذا.
ذاكرة التخزين المؤقت للصفحة:
في كل مرة يتم فيها الوصول إلى الصفحة، ستكتشف أولاً ما إذا كان ملف الصفحة المخزنة مؤقتًا المقابل موجودًا، وإذا لم يكن موجودًا، فسيتم الاتصال بقاعدة البيانات والحصول على البيانات وعرض الصفحة وإنشاء ملف صفحة مخزنة مؤقتًا في نفس الوقت. بحيث يتم تشغيل ملف الصفحة في المرة التالية التي تزور فيها . (عادةً ما تحتوي محركات القوالب وبعض فئات ذاكرة التخزين المؤقت الشائعة على الإنترنت على هذه الوظيفة)
وقت تشغيل ذاكرة التخزين المؤقت:
تحقق مما إذا كان الملف موجودًا وأن الطابع الزمني أقل من وقت انتهاء الصلاحية المحدد إذا كان الطابع الزمني لتعديل الملف أكبر من الطابع الزمني الحالي مطروحًا منه الطابع الزمني لانتهاء الصلاحية، فاستخدم ذاكرة التخزين المؤقت، وإلا قم بتحديث ذاكرة التخزين المؤقت.
يؤدي المحتوى إلى التخزين المؤقت:
فرض تحديث ذاكرة التخزين المؤقت عند إدراج البيانات أو تحديثها.
ذاكرة التخزين المؤقت الثابتة:
تشير ذاكرة التخزين المؤقت المذكورة هنا إلى ملفات نصية ثابتة ومباشرة مثل HTML أو XML، وإعادة إنشائها عند وجود تحديثات، وهي مناسبة للصفحات التي لا تتغير كثيرًا، لذا لن أتحدث عنها هنا.
المحتوى أعلاه هو حل على مستوى التعليمات البرمجية، وأنا كسول جدًا لتغيير المحتوى، وهو نفسه تقريبًا ويمكن استخدامه بعدة طرق - حل التخزين المؤقت الجانبي، وليس على مستوى التعليمات البرمجية، ويتطلب تعاون أطراف متعددة لتحقيقه
ذاكرة التخزين المؤقت:
Memcached هو نظام تخزين مؤقت لكائنات الذاكرة الموزعة عالي الأداء يستخدم لتقليل تحميل قاعدة البيانات وتحسين سرعة الوصول في التطبيقات الديناميكية.
فيما يلي مثال على Memcached:
<?php
$memcache = ذاكرة التخزين المؤقت الجديدة؛
$memcache->connect('localhost', 11211) أو يموت ("تعذر الاتصال");
$version = $memcache->getVersion();
صدى "إصدار الخادم: ".$version."n";
$tmp_object = new stdClass;
$tmp_object->str_attr = 'اختبار';
$tmp_object->int_attr = 123;
$memcache->set('key', $tmp_object, false, 10) أو die ("فشل حفظ البيانات على الخادم");
صدى "تخزين البيانات في ذاكرة التخزين المؤقت (ستنتهي صلاحية البيانات خلال 10 ثوانٍ)n";
$get_result = $memcache->get('key');
صدى "بيانات من ذاكرة التخزين المؤقت:n";
var_dump($get_result);
?>
مثال لقراءة المكتبة:
<?php
$sql = 'اختر * من المستخدمين';
$key = md5($sql); // معرف كائن memcached
إذا (!($datas = $mc->get($key))) {
// إذا لم يتم الحصول على البيانات المخزنة مؤقتًا في memcached، فاستخدم استعلام قاعدة البيانات للحصول على مجموعة السجلات.
echo "n".str_pad('اقرأ البيانات من MySQL.', 60, '_')."n";
$conn = mysql_connect('localhost', 'test', 'test');
mysql_select_db('اختبار');
نتيجة $ = mysql_query($sql);
بينما ($row = mysql_fetch_object($result))
$datas[] = $row;
// احفظ بيانات مجموعة النتائج التي تم الحصول عليها من قاعدة البيانات في memcached لاستخدامها أثناء الوصول التالي.
$mc->add($key, $datas);
} آخر {
echo "n".str_pad('اقرأ البيانات من memcached.', 60, '_')."n";
}
var_dump($datas);
?>
المخزن المؤقت PHP:
هناك eaccelerator، وapc، وphpa، وxcache، ولن أتحدث عن هذه الأشياء وانظر بنفسك.
ذاكرة التخزين المؤقت لـ MYSQL:
يعتبر هذا أيضًا مستوى غير كودي. تستخدم قواعد البيانات الكلاسيكية هذه الطريقة. انظر إلى وقت التشغيل أدناه. سأقوم بنشر قسم مثل 0.09xxx استنادًا إلى الجزء المعدل من my.ini استنادًا إلى جدول 2G MYISAM يمكن استخدامها حوالي 0.05S، ويقال أنه تم تغييره لمدة عام تقريبا.
[عميل]
…
default-character-set=gbk
default-storage-engine=MYISAM
max_connections=600
max_connect_errors=500
back_log=200
Interactive_timeout=7200
query_cache_size=64M
…
table_cache=512
…
myisam_max_sort_file_size=100G
myisam_max_extra_sort_file_size=100G
myisam_sort_buffer_size=128M
key_buffer_size=1024M
read_buffer_size=512M
…
thread_concurrency=8
عكس التخزين المؤقت على شبكة الإنترنت على أساس الوكيل:
مثل Nginx وSQUID وmod_proxy (ينقسم Apache2 وما فوق إلى mod_proxy وmod_cache)
مثال نجينكس
<nginx.conf>
# مستخدم لا أحد؛
عامل_العمليات 4;
error_log logs/error.log Crit؛
سجلات معرف الهوية/nginx.pid;
عامل_rlimit_nofile 10240;
الأحداث {
استخدم epoll؛
عامل_اتصالات 51200؛
}
http {
تشمل mime.types؛
تطبيق default_type/تيار الثماني؛
إرسال الملف على؛
keepalive_timeout 65;
tcp_nodelay on;
# تجمع الخادم
المنبع بسبفرونتسفر {
الخادم 10.10.10.224:80 الوزن=1;
الخادم 10.10.10.221:80 الوزن=1;
}
المنبع بسبيمجسفر {
الخادم 10.10.10.201:80 الوزن=1;
}
المنبع bspstylesvr {
الخادم 10.10.10.202:80 الوزن=1;
}
المنبع بسبهيلبسفر {
الخادم 10.10.10.204:80 الوزن=1;
}
المنبع بسبوسيسفر {
الخادم 10.10.10.203:80 الوزن=1;
}
المنبع ببادمينسفر {
الخادم 10.10.10.222:80 الوزن=1;
}
المنبع bspbuyersvr {
الخادم 10.10.10.223:80 الوزن=1;
}
المنبع بسبسيلرزفر {
الخادم 10.10.10.225:80 الوزن=1;
}
المنبع بسبلوجينسفر {
الخادم 10.10.10.220:443 الوزن=1;
}
المنبع bspregistersvr {
الخادم 10.10.10.220:80 الوزن=1;
}
log_format test_com '$remote_addr – $remote_user [$time_local] “$request” '
'$status $body_bytes_sent "$http_referer" "$http_user_agent" ';
#——————————————————————
#img.test.com
الخادم {
استمع 10.10.10.230:80؛
اسم الخادم img.test.com;
موقع/{
proxy_pass http://bspimgsvr ;
تشمل proxy_setting.conf؛
}
access_log logs/img.log test_com;
}
#style.test.com
الخادم {
استمع 10.10.10.230:80؛
اسم الخادم style.test.com;
موقع/{
proxy_pass http://bspstylesvr ;
تشمل proxy_setting.conf؛
}
access_log logs/style.log test_com;
}
#مساعدة.test.com
الخادم {
استمع 10.10.10.230:80؛
اسم الخادم help.test.com;
موقع/{
proxy_pass http://bsphelpsvr ;
تشمل proxy_setting.conf؛
}
access_log logs/help.log test_com;
}
#admin.test.com
الخادم {
استمع 10.10.10.230:80؛
اسم الخادم admin.test.com;
موقع/{
proxy_pass http://bspadminsvr ;
تشمل proxy_setting.conf؛
}
access_log logs/admin.log test_com;
}
#buyer.test.com
الخادم {
استمع 10.10.10.230:80؛
اسم الخادم المشتري.test.com;
موقع/{
proxy_pass http://bspbuyersvr ;
تشمل proxy_setting.conf؛
}
access_log logs/buyer.log test_com;
}
#seller.test.com
الخادم {
استمع 10.10.10.230:80؛
اسم الخادم البائع.test.com;
موقع/{
proxy_pass http://bspellervr ;
تشمل proxy_setting.conf؛
}
access_log logs/seller.log test_com;
}
#wsi.test.com
الخادم {
استمع 10.10.10.230:80؛
اسم الخادم wsi.test.com;
موقع/{
proxy_pass http://bspwsisvr ;
تشمل proxy_setting.conf؛
}
access_log logs/wsi.log test_com;
}
#www.test.com
الخادم {
استمع 10.10.10.230:80؛
اسم الخادم www.test.com *.test.com;
الموقع ~ ^/NginxStatus/ {
stub_status على؛
Access_log off;
}
موقع/{
proxy_pass http://bspfrontsvr ;
تشمل proxy_setting.conf؛
}
access_log logs/www.log test_com;
error_page 500 502 503 504 /50x.html;
الموقع = /50x.html {
roothtml;
}
}
#تسجيل الدخول.test.com
الخادم {
استمع 10.10.10.230:443؛
اسم الخادم تسجيل الدخول.test.com;
تشغيل طبقة المقابس الآمنة؛
ssl_certificate cert.pem;
ssl_certificate_key cert.key;
ssl_session_timeout 5 م؛
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
موقع/{
proxy_pass https://bsploginsvr ;
تشمل proxy_setting.conf؛
}
access_log logs/login.log test_com;
}
#login.test.com للتسجيل
الخادم {
استمع 10.10.10.230:80؛
اسم الخادم تسجيل الدخول.test.com;
موقع/{
proxy_pass http://bsregistersvr ;
تشمل proxy_setting.conf؛
}
access_log logs/register.log test_com;
}
}
<conf/proxy_setting.conf>
proxy_redirect معطل؛
proxy_set_header المضيف $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
Client_max_body_size 10 م؛
client_body_buffer_size 128 كيلو؛
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4K;
proxy_buffers 4 32 كيلو ؛
proxy_busy_buffers_size 64 كيلو؛
proxy_temp_file_write_size 64 كيلو بايت؛
مثال على mod_proxy:
<المضيف الافتراضي *>
اسم الخادم www.zxsv.com
مسؤول الخادم [email protected]
# إعداد الوكيل العكسي
بروكسي باس / http://www.zxsv.com:8080/
ProxyPassReverse/ http://www.zxsv.com:8080 /
# جذر ذاكرة التخزين المؤقت
جذر الكاش "/فار/www/proxy"
# الحد الأقصى للتخزين المؤقت
حجم الكاش 50000000
#ساعة: كل 4 ساعات
الفاصل الزمني لذاكرة التخزين المؤقت 4
# الحد الأقصى لوقت انتهاء صلاحية الصفحة: ساعة
كاش ماكس اكسبيري 240
# وقت انتهاء الصلاحية = (الآن – آخر_تعديل) * CacheLastModifiedFactor
عامل التخزين المؤقت الأخير 0.1
# علامة انتهاء الصلاحية الافتراضية: ساعة
انتهاء صلاحية ذاكرة التخزين المؤقت 1
# اكتمال القوة بعد نسبة المحتوى المسترجع: 60-90%
CacheForceCompletion80
CustomLog /usr/local/Apache/logs/dev_access_log مدمج
</المضيف الافتراضي>
لن أشرح مثال SQUID. هناك الكثير من المقالات حول هذا الموضوع على الإنترنت. يمكنك البحث عنه بنفسك.
استطلاع DNS:
BIND هو برنامج خادم DNS مفتوح المصدر، وهذا أمر مهم يجب ذكره. ما عليك سوى البحث عنه بنفسك وسيعلم الجميع أنه موجود.
أعلم أن بعض مواقع الويب الكبيرة مثل chinacache تفعل ذلك ببساطة، فهي متعددة الخوادم، ويتم تخزين نفس الصفحة أو الملف مؤقتًا على خوادم مختلفة ويتم تحليلها تلقائيًا إلى الخادم ذي الصلة وفقًا للشمال والجنوب.