في مشاريع مثل “المنيو الرقمي” لجامعة كركوك، التحدي الحقيقي ليس في عرض صور الطعام، بل في التزامن (Concurrency). في وقت الاستراحة، يقوم آلاف الطلاب بمسح كود QR في نفس الدقيقة. لو اعتمدنا على جلب البيانات من “قاعدة البيانات” (Database) في كل مرة، سينهار السرفر تحت هذا الضغط الهائل (ما يشبه هجوم DDoS غير مقصود).
الحل الذي طبقناه في Giturn لضمان سرعة استجابة لا تتجاوز 100 ميلي ثانية هو استخدام تقنية Redis Caching.
في هذا المخطط، نوضح الفرق بين الطلب المباشر والطلب عبر الكاش:
الجزء الأول: المشكلة في الكود التقليدي
(اكتب هذا قبل الكود الأول) في الكود العادي، يقوم التطبيق بالذهاب لقاعدة البيانات في كل مرة يفتح فيها طالب المنيو، للبحث عن الأصناف والأسعار. هذا مكلف جداً لموارد السرفر.
(انسخ هذا الكود في بلوك PHP – واكتب فوقه: “الكود التقليدي (البطيء)”):
PHP
// تخيل أن 5000 طالب يطلبون هذا الكود في نفس اللحظة!
public function getMenu($restaurantId) {
// 1. استعلام معقد من قاعدة البيانات
$categories = Category::where('restaurant_id', $restaurantId)
->with('products') // جلب المنتجات
->get();
return response()->json($categories);
}
الجزء الثاني: الحل باستخدام Caching
(اكتب هذا الشرح قبل الكود الثاني) لحل المشكلة، قمنا ببرمجة طبقة وسيطة (Caching Layer). النظام يتحقق أولاً: “هل المنيو محفوظ في الذاكرة السريعة (Cache)؟”. إذا نعم، يتم إرساله فوراً دون إزعاج قاعدة البيانات. إذا لا، يتم جلبه وحفظه لمدة معينة (مثلاً 60 دقيقة).
(انسخ هذا الكود في بلوك PHP – واكتب فوقه: “كود Giturn المحسن (السريع)”):
PHP
use Illuminate\Support\Facades\Cache;
public function getMenu($restaurantId) {
// مفتاح فريد لكل مطعم
$cacheKey = "menu_restaurant_{$restaurantId}";
// 1. استخدام Cache::remember
// يقوم النظام بحفظ المنيو لمدة 60 دقيقة (3600 ثانية)
$menu = Cache::remember($cacheKey, 3600, function () use ($restaurantId) {
// هذا الكود ينفذ مرة واحدة فقط كل ساعة!
return Category::where('restaurant_id', $restaurantId)
->with(['products' => function($query) {
$query->where('is_available', true); // فقط المنتجات المتاحة
}])
->get();
});
return response()->json($menu);
}
الجزء الثالث: التحديث الذكي (Cache Invalidation)
(نقطة تقنية مهمة جداً) قد يسأل سائل: “ماذا لو غير المطعم سعر وجبة؟ هل ننتظر ساعة ليتغير؟”. الجواب هو لا. قمنا ببرمجة “Observer” يقوم بحذف الكاش القديم تلقائياً بمجرد أن يضغط مدير المطعم على زر “تعديل”.
(انسخ هذا الكود في بلوك PHP):
PHP
// عند تحديث أي منتج، نقوم بمسح الكاش القديم فوراً
public function updated(Product $product) {
$restaurantId = $product->restaurant_id;
Cache::forget("menu_restaurant_{$restaurantId}");
}
(الخاتمة)
بفضل هذه الهندسة البرمجية، أصبح منيو مطعم الدمشقي و Friends Cafe يفتح بسرعة البرق حتى في أوقات الذروة المزدحمة بالجامعة. السرعة تعني تجربة مستخدم أفضل، وبالتالي مبيعات أكثر لعملائنا.
هل لديك مشروع يتوقع زيارات عالية وتخاف من بطء السرفر؟
[استشر فريق Giturn لتهيئة البنية التحتية لمشروعك].
اترك تعليقاً