0Pricing
SQL Academy · درس

النسخ المتماثلة للقراءة وتوجيه الاتصالات

وجّه حركة القراءة فقط إلى النسخ المتماثلة باستخدام PgBouncer أو برنامج تشغيل ذكي، وتقبّل مقايضة حداثة البيانات

النسخ المتماثلة للقراءة وتوجيه الاتصالات درس مجاني في SQL Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في SQL Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة SQL Academy 4 دروس في المجموع.

لماذا نستخدم النسخ المتماثلة للقراءة؟

يمكن لأحمال العمل التي تركز على القراءة تفريغ استعلامات SELECT إلى النسخ المتماثلة:

  • يتولى الخادم الأساسي عمليات الكتابة
  • تتولى النسخ المتماثلة معظم عمليات القراءة
  • توسيع القراءة أفقيًا من دون تقسيم قاعدة البيانات إلى شظايا

ملاحظة حول الاتساق النهائي

تتأخر النسخ المتماثلة عن الخادم الأساسي. فقد لا يرى المستخدم الذي أجرى طلبًا للتو هذا الطلب على النسخة المتماثلة بعد. ويمكنك حينها:

  • توجيه القراءات التي تلي الكتابة إلى الخادم الأساسي
  • الانتظار حتى تلحق النسخة المتماثلة بالمصدر
  • تخزين الحالة بعد الكتابة مؤقتًا في التطبيق

استراتيجيات التوجيه

  1. التوجيه على مستوى التطبيق — يختار رمز التطبيق الخادم الأساسي أو النسخة المتماثلة
  2. التوجيه على مستوى برنامج التشغيل — يتيح JDBC وpgjdbc وpgxpool تجميع الاتصالات مع مراعاة الخادم الأساسي والنسخة المتماثلة
  3. التوجيه على مستوى الوكيل — باستخدام pgpool أو pgbouncer أو HAProxy مع اكتشاف عمليات القراءة والكتابة

توجيه التطبيق

مجموعتا اتصال، واحدة لكل دور:

const primary = new Pool({ host: 'primary', ... });
const replica = new Pool({ host: 'replica', ... });

// reads go to replica:
await replica.query('SELECT ...');

// writes (and read-your-writes) go to primary:
await primary.query('INSERT ...');

PgPool-II

وكيل يحلل SQL ويوجّه SELECT إلى النسخ المتماثلة وعمليات الكتابة إلى النسخة الأساسية. ويدعم موازنة التحميل وتجميع الاتصالات:

# pgpool.conf
backend_hostname0 = 'primary'
backend_hostname1 = 'replica1'
load_balance_mode = on

HAProxy مع فحوصات pg_isready

لا يفهم HAProxy لغة SQL، لكنه يستطيع التوجيه حسب المنفذ — واجهة أمامية واحدة لعمليات الكتابة (إلى النسخة الأساسية)، وأخرى لعمليات القراءة (إلى النسخ المتماثلة مع فحوصات السلامة):

frontend writes
  bind *:5432
  default_backend primary_pool

frontend reads
  bind *:5433
  default_backend replicas_pool
  balance roundrobin

نقاط نهاية AWS RDS

يوفّر RDS نقطة نهاية واحدة للكاتب ونقطة نهاية للقارئ توازن التحميل بين جميع النسخ المتماثلة — وهو الحل الأبسط في السحابة.

اعتبارات تأخر النسخ المتماثل

راقب التأخر وتجنّب توجيه الطلبات إلى النسخ المتماثلة المتأخرة بدرجة كبيرة:

-- On primary:
SELECT client_addr, replay_lag FROM pg_stat_replication;

-- HAProxy / pgpool can use a custom health check that fails if replay_lag > threshold.

نمط الجلسة الثابتة

لتمكين قراءة ما كتبه المستخدم فورًا: ثبّت جلسة المستخدم على النسخة الأساسية لمدة N ثانية بعد عملية كتابة. أو سجّل LSN الخاص بالكتابة وانتظر إعادة تشغيله على النسخة المتماثلة قبل تقديم البيانات.

الانتظار المستند إلى LSN

بعد عملية كتابة، التقط LSN؛ وقبل القراءة من النسخة المتماثلة، انتظر حتى تعيد النسخة تشغيل البيانات حتى ذلك الـ LSN:

-- After write on primary:
SELECT pg_current_wal_lsn();        -- save this

-- Before read on replica:
SELECT pg_last_wal_replay_lsn() >= $saved_lsn;
-- spin or wait until true

التخزين المؤقت كنسخة متماثلة

أحيانًا يكون Redis أو Memcache بمثابة نسخة متماثلة لتوسيع نطاق القراءة — فهو أسرع بكثير من مثيل Postgres آخر بالنسبة إلى المفاتيح كثيرة الاستخدام.

متى لا تستخدم النسخ المتماثلة

إذا كان حمل العمل كثيف الكتابة، فغالبًا لا تضيف النسخ المتماثلة سوى التكلفة من دون تسريع. وإذا كانت القراءات سريعة أصلًا على النسخة الأساسية، فقد لا تحتاج إليها.

التعافي من الكوارث مقابل توسيع نطاق القراءة

النسخ المتماثلة المخصّصة للتبديل التلقائي عند حدوث عطل تختلف عن النسخ المتماثلة المخصّصة لتوسيع نطاق القراءة. وغالبًا ما تحتاج إلى النوعين معًا.

مراجعة

توسّع النسخ المتماثلة للقراءة نطاق القراءات، لكنها تحمل تأخرًا.

  • التوجيه من التطبيق أو برنامج التشغيل أو الوكيل
  • تأخر النسخ المتماثل = الاتساق النهائي
  • تثبيت الجلسة على النسخة الأساسية أو الانتظار حتى LSN لقراءة الكتابات فورًا
  • راقب التأخر، وارجع إلى النسخة الأساسية إذا أصبح كبيرًا جدًا

تحقق سريع

ينشر مستخدم تعليقًا ثم يحدّث الصفحة فورًا. تقرأ الصفحة من نسخة متماثلة ولا تعرض التعليق. ما المشكلة، وما أحد الحلول الممكنة؟

الأسئلة الشائعة

هل درس «النسخ المتماثلة للقراءة وتوجيه الاتصالات» مجاني؟

نعم — نص درس «النسخ المتماثلة للقراءة وتوجيه الاتصالات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة SQL Academy، انتقل إلى CoddyKit PRO. تتضمن دورة SQL Academy 4 دروس في المجموع.

ماذا ستتعلم في «النسخ المتماثلة للقراءة وتوجيه الاتصالات»؟

وجّه حركة القراءة فقط إلى النسخ المتماثلة باستخدام PgBouncer أو برنامج تشغيل ذكي، وتقبّل مقايضة حداثة البيانات تتمرن على SQL Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ SQL Academy؟

لا تُشترط خبرة سابقة. SQL Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «النسخ المتماثلة للقراءة وتوجيه الاتصالات»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس SQL Academy هذا؟

نعم. كل درس في SQL Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. النسخ المتماثل المتدفق وWAL
  2. النسخ المتماثل المنطقي للتقسيم
  3. التجاوز التلقائي وانتخاب القائد (Patroni وStolon)
  4. النسخ المتماثلة للقراءة وتوجيه الاتصالات
← العودة إلى SQL Academy