0Pricing
AWS Solutions Architect · درس

مجموعات النسخ المتماثل في ElastiCache Redis ووضع العنقود

أنشئ مجموعة نسخ متماثل في Redis لتوسعة القراءة، ومكّن وضع العنقود لتقسيم البيانات عبر مجموعات عُقد متعددة

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

نظرة عامة على مجموعات النسخ المتماثل في Redis

مجموعة النسخ المتماثل في ElastiCache هي تجميع منطقي لعقدة Redis أساسية واحدة وما يصل إلى 5 نسخ متماثلة للقراءة. تتولى العقدة الأساسية جميع عمليات الكتابة، بينما تتلقى النسخ المتماثلة النسخ غير المتزامن من العقدة الأساسية وتخدم حركة القراءة. وتتيح مجموعات النسخ المتماثل إمكانيتين أساسيتين: توسيع نطاق القراءة (توزيع طلبات القراءة على عدة نسخ متماثلة) والتوافر العالي مع التجاوز التلقائي للفشل (ترقية نسخة متماثلة إلى عقدة أساسية إذا تعطلت العقدة الأساسية). وتشترك جميع العقد في مجموعة النسخ المتماثل في مجموعة البيانات نفسها.

# Create a replication group with 1 primary and 2 read replicas
aws elasticache create-replication-group \
  --replication-group-id web-cache \
  --replication-group-description 'Web application cache' \
  --num-cache-clusters 3 \
  --cache-node-type cache.r7g.large \
  --engine redis \
  --engine-version '7.0' \
  --automatic-failover-enabled \
  --multi-az-enabled \
  --cache-subnet-group-name my-multi-az-subnet-group

نقطة النهاية الأساسية مقابل نقطة نهاية القارئ

توفر ElastiCache نقطتي نهاية DNS لمجموعة النسخ المتماثل: تشير نقطة النهاية الأساسية دائمًا إلى العقدة الأساسية الحالية (ويُحدّث ذلك تلقائيًا أثناء التجاوز للفشل) — استخدموها لجميع عمليات الكتابة. أما نقطة نهاية القارئ فتوزّع طلبات القراءة بالتساوي على جميع النسخ المتماثلة المتاحة — استخدموها لعمليات القراءة لتوزيع الحمل. ينبغي لتطبيقكم الاحتفاظ بمجموعتي اتصالات: واحدة لنقطة النهاية الأساسية لعمليات الكتابة، وأخرى لنقطة نهاية القارئ لعمليات القراءة. وهذا هو نمط الاتصال الموصى به لمجموعات نسخ Redis المتماثلة في ElastiCache.

# Get primary and reader endpoints
aws elasticache describe-replication-groups \
  --replication-group-id web-cache \
  --query 'ReplicationGroups[].{
    Primary:NodeGroups[].PrimaryEndpoint.Address,
    Reader:ReaderEndpoint.Address
  }'

# Application connection pattern:
# write_client = redis.Redis(host='primary-endpoint', port=6379)
# read_client = redis.Redis(host='reader-endpoint', port=6379)

عملية التجاوز التلقائي للفشل

عند تعطل العقدة الأساسية (وتكتشف ElastiCache ذلك خلال ثوانٍ عبر فحوصات السلامة)، يختار التجاوز التلقائي للفشل إحدى النسخ المتماثلة للقراءة لترقيتها إلى عقدة أساسية. وتتضمن عملية الترقية ما يلي: (1) ترقية النسخة المتماثلة المحددة إلى عقدة أساسية، (2) تحديث سجل DNS لنقطة النهاية الأساسية للإشارة إلى العقدة الأساسية الجديدة (مدة TTL نحو ثانية واحدة)، (3) استبدال العقدة الأساسية القديمة بنسخة متماثلة جديدة. ويستغرق التجاوز للفشل عادةً من 30 إلى 60 ثانية. وتعيد التطبيقات التي تستخدم DNS لنقطة النهاية الأساسية الاتصال تلقائيًا بعد انتشار DNS — ولا حاجة إلى عناوين IP مضمّنة بشكل ثابت.

# Test failover manually (triggers primary failover)
aws elasticache test-failover \
  --replication-group-id web-cache \
  --node-group-id 0001

# Monitor failover events
aws elasticache describe-events \
  --source-identifier web-cache \
  --source-type replication-group \
  --duration 60 \
  --query 'Events[].{Time:Date,Message:Message}'

توزيع النسخ المتماثلة عبر Multi-AZ

لتحقيق أقصى قدر من المرونة، وزّعوا النسخ المتماثلة عبر عدة مناطق توافر. عند تمكين Multi-AZ في مجموعة النسخ المتماثل، تضع ElastiCache العقدة الأساسية والنسخ المتماثلة تلقائيًا في مناطق توافر مختلفة. وإذا أصبحت منطقة توافر كاملة غير متصلة، يرفع التجاوز للفشل نسخة متماثلة من منطقة توافر لا تزال عاملة. ويمكنكم أيضًا تحديد مناطق التوافر المفضلة لكل عقدة صراحةً عند إنشاء مجموعة النسخ المتماثل باستخدام الخيار --preferred-cache-cluster-a-zs.

# Create replication group with explicit AZ placement
aws elasticache create-replication-group \
  --replication-group-id ha-redis \
  --replication-group-description 'Multi-AZ Redis' \
  --num-cache-clusters 3 \
  --cache-node-type cache.r7g.xlarge \
  --engine redis \
  --automatic-failover-enabled \
  --multi-az-enabled \
  --preferred-cache-cluster-a-zs us-east-1a us-east-1b us-east-1c \
  --cache-subnet-group-name multi-az-subnets

ما هو وضع Redis Cluster؟

يقسم Redis Cluster Mode Enabled (CME) مجموعة البيانات عبر عدة مجموعات عُقد (أجزاء)، تحتوي كل منها على عقدة أساسية وما يصل إلى 5 نسخ متماثلة. وهذا هو حل Redis للتقسيم الأفقي. ويتيح وضع المجموعة تجاوز سعة ذاكرة العقدة الواحدة — إذ يمكنكم إنشاء ما يصل إلى 500 مجموعة عُقد، بسعة 500 جيجابايت لكل منها، ما يسمح لمجموعة Redis واحدة باحتواء ما يصل إلى 500 × 500 جيجابايت = 250 تيرابايت من البيانات. كما يضاعف وضع المجموعة معدل نقل الكتابة، لأن كل مجموعة عُقد تعالج عمليات الكتابة لنطاق المفاتيح الخاص بها بشكل مستقل.

# Create a Redis Cluster Mode Enabled replication group
# with 3 shards, each with 1 primary and 2 replicas
aws elasticache create-replication-group \
  --replication-group-id clustered-redis \
  --replication-group-description 'Cluster mode: 3 shards x 3 nodes' \
  --num-node-groups 3 \
  --replicas-per-node-group 2 \
  --cache-node-type cache.r7g.large \
  --engine redis \
  --automatic-failover-enabled \
  --multi-az-enabled \
  --cache-subnet-group-name multi-az-subnets

خانات التجزئة وتوزيع المفاتيح

يقسم وضع Redis Cluster مساحة المفاتيح إلى 16,384 خانة تجزئة. وتمتلك كل مجموعة عُقد نطاقًا متصلًا من خانات التجزئة. وعند كتابة مفتاح، يحسب Redis القيمة CRC16(key) % 16384 لتحديد خانة التجزئة، وبالتالي مجموعة العُقد المسؤولة. ويجب على تطبيقكم استخدام عميل Redis يدرك المجموعات (مثل redis-py-cluster أو Jedis في وضع المجموعة) يعرف خريطة الخانات ويوجّه كل أمر إلى العقدة الصحيحة. وسيعيد العملاء القياسيون أخطاء إعادة التوجيه MOVED إذا أرسلوا مفتاحًا إلى الجزء غير الصحيح.

# Python cluster-aware client example
# pip install redis[hiredis]

# from redis.cluster import RedisCluster
# cluster_client = RedisCluster(
#   host='clustered-redis.abc123.clustercfg.use1.cache.amazonaws.com',
#   port=6379,
#   decode_responses=True
# )

# The client automatically resolves slot-to-node mapping
# cluster_client.set('user:1', 'Alice')   # routes to correct shard
# cluster_client.get('user:1')            # routes to correct shard

وضع المجموعة مقابل الوضع غير العنقودي

بالنسبة إلى اختبار SAA-C03، اختاروا الوضع غير العنقودي عندما: تناسب بياناتكم عقدة واحدة (أقل من نحو 400 جيجابايت بعد احتساب الهامش الاحتياطي)، أو تحتاجون إلى إعداد بسيط يتضمن عقدة أساسية ونسخًا متماثلة، أو يستخدم تطبيقكم عمليات معقدة متعددة المفاتيح (إذ تتطلب المعاملات التي تمتد عبر عدة مفاتيح وجود جميع المفاتيح في الخانة نفسها). واختاروا وضع المجموعة عندما: تتجاوز مجموعة البيانات ذاكرة عقدة واحدة، أو تحتاجون إلى توسيع معدل نقل الكتابة أفقيًا، أو تتوقعون نموًا مستقبليًا يتطلب إعادة تقسيم أثناء التشغيل. ويدعم وضع المجموعة إضافة أجزاء من دون توقف (إعادة التقسيم أثناء التشغيل).

# Scale out a cluster-mode Redis by adding shards
aws elasticache modify-replication-group-shard-configuration \
  --replication-group-id clustered-redis \
  --node-group-count 5 \
  --apply-immediately \
  --resharding-configuration \
    NodeGroupId=0004,PreferredAvailabilityZones=us-east-1a,us-east-1b,us-east-1c \
    NodeGroupId=0005,PreferredAvailabilityZones=us-east-1a,us-east-1b,us-east-1c

# No downtime — slots are migrated incrementally

Global Datastore للنسخ المتماثل بين المناطق

يوسّع ElastiCache Global Datastore نسخ Redis المتماثل عبر عدة مناطق من AWS. تحدد منطقة واحدة لتكون العنقود الأساسي، ثم تضيف عناقيد ثانوية في مناطق أخرى. تُرسل عمليات الكتابة إلى العنقود الأساسي، بينما تتلقى العناقيد الثانوية النسخ المتماثل بشكل غير متزامن، مع تأخر نموذجي يقل عن ثانية واحدة. ويمكن للعناقيد الثانوية خدمة عمليات القراءة المحلية بزمن استجابة منخفض جدًا. يتيح Global Datastore إنشاء تطبيقات عالمية يقرأ فيها المستخدمون من قارات مختلفة البيانات من أقرب منطقة، كما يتيح التعافي من الكوارث بين المناطق، إذ يمكنك ترقية عنقود ثانوي ليصبح أساسيًا إذا تعطلت المنطقة الأساسية.

# Create a Global Datastore (adds a secondary region to an existing cluster)
aws elasticache create-global-replication-group \
  --global-replication-group-id-suffix my-global-cache \
  --primary-replication-group-id prod-redis

# Add a secondary cluster in another region
aws elasticache create-replication-group \
  --replication-group-id prod-redis-eu \
  --replication-group-description 'EU secondary' \
  --global-replication-group-id ldgnf-my-global-cache \
  --region eu-west-1

Redis Pub/Sub على نطاق واسع

في مجموعة نسخ متماثلة من Redis غير المُجمّعة، تُوزَّع رسائل pub/sub على جميع النسخ — إذ يتلقى أي مشترك على أي عقدة الرسائل المنشورة على قناة. أما في Cluster Mode، فيقتصر pub/sub على إشعارات مساحة المفاتيح، ولا يعمل pub/sub المعتمد على القنوات إلا داخل shard واحد، ما لم تستخدم Redis 7+ مع تقسيم Pub/Sub (SSUBSCRIBE / SPUBLISH لتفعيل pub/sub المتوافق مع الـshard). يُعد هذا قيدًا مهمًا عند تصميم pub/sub على نطاق واسع باستخدام وضع التجميع.

# Keyspace notification (fires when a key expires)
# Enable in parameter group: notify-keyspace-events Ex

# Subscriber in Python:
# pubsub = redis_client.pubsub()
# pubsub.psubscribe('__keyevent@0__:expired')
# for message in pubsub.listen():
#     if message['type'] == 'pmessage':
#         expired_key = message['data']
#         print(f'Key expired: {expired_key}')

مراقبة تأخر النسخ المتماثل

راقب مقياس ReplicationLag في CloudWatch على النسخ المتماثلة المخصصة للقراءة للتأكد من مواكبتها للنسخة الأساسية. يشير التأخر الذي يتجاوز بضع ثوانٍ إلى وجود عنق زجاجة في النسخة المتماثلة، مثل عقدة محمّلة أكثر من اللازم أو مشكلات في الشبكة أو عدد كبير من عمليات الكتابة التي لا تستطيع النسخة معالجتها. في سيناريوهات Global Datastore، راقب GlobalDatastoreReplicationLag. يعني ارتفاع تأخر النسخ المتماثل أن النسخ المخصصة للقراءة قد تُرجع بيانات قديمة، وهو أمر مهم للتطبيقات التي تتوقع الاتساق النهائي ضمن حدود زمنية ضيقة.

# Monitor replication lag for all replicas
aws cloudwatch get-metric-statistics \
  --namespace AWS/ElastiCache \
  --metric-name ReplicationLag \
  --dimensions Name=ReplicationGroupId,Value=web-cache \
  --statistic Maximum \
  --period 60 \
  --start-time $(date -u -d '1 hour ago' +%Y-%m-%dT%H:%M:%SZ) \
  --end-time $(date -u +%Y-%m-%dT%H:%M:%SZ)

# Alert if ReplicationLag > 10 seconds

توسعة مجموعات النسخ المتماثلة

يمكنك إجراء توسعة رأسية (تغيير نوع العقدة) أو توسعة أفقية (إضافة نسخ متماثلة أو إزالتها). يتطلب تغيير نوع العقدة استدعاء modify-replication-group، ويسبب انتقالًا موجزًا عند تطبيقه فورًا، إذ تُستبدل العقدة الأساسية بعقدة جديدة من النوع الجديد. أما إضافة النسخ المتماثلة فتتم أثناء التشغيل من دون توقف. وعند التوسعة من الوضع غير المُجمّع إلى وضع التجميع، يجب إنشاء مجموعة جديدة بوضع التجميع وترحيل البيانات إليها؛ فلا يوجد تحويل مباشر بين الوضعين المُجمّع وغير المُجمّع.

# Scale up node type with maintenance window
aws elasticache modify-replication-group \
  --replication-group-id web-cache \
  --cache-node-type cache.r7g.xlarge \
  --apply-immediately false

# Add a read replica
aws elasticache increase-replica-count \
  --replication-group-id web-cache \
  --new-replica-count 4 \
  --apply-immediately

تحقق سريع

اختبر مدى فهمك لمفاهيم AWS Solutions Architect (SAA-C03) الواردة في هذا الدرس.

مراجعة الدرس

تعلمت في هذا الدرس أن مجموعات النسخ المتماثلة توفر توسعة للقراءة عبر النسخ المتماثلة وتوافرًا عاليًا من خلال الانتقال التلقائي عند التعطل، باستخدام نقاط نهاية للنسخة الأساسية والقراءة؛ وأن Cluster Mode يقسم البيانات عبر ما يصل إلى 500 مجموعة عقد باستخدام 16,384 خانة تجزئة، لتوفير توسعة أفقية تتجاوز سعة ذاكرة عقدة واحدة؛ وأن Global Datastore ينسخ البيانات عبر المناطق لتوفير قراءات عالمية بزمن استجابة منخفض والتعافي من الكوارث بين المناطق. سنتناول بعد ذلك استراتيجيات التخزين المؤقت: التحميل الكسول والكتابة المتزامنة مع الذاكرة المؤقتة.

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

هل درس «مجموعات النسخ المتماثل في ElastiCache Redis ووضع العنقود» مجاني؟

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

ماذا ستتعلم في «مجموعات النسخ المتماثل في ElastiCache Redis ووضع العنقود»؟

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

هل أحتاج إلى خبرة سابقة لأبدأ AWS Solutions Architect؟

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

كم من الوقت يستغرق درس «مجموعات النسخ المتماثل في ElastiCache Redis ووضع العنقود»؟

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

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

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

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

  1. Redis في مقابل Memcached: اختيار المحرك المناسب
  2. مجموعات النسخ المتماثل في ElastiCache Redis ووضع العنقود
  3. استراتيجيات التخزين المؤقت: التحميل الكسول والكتابة الفورية
  4. تخزين الجلسات وأنماط لوحات الصدارة
← العودة إلى AWS Solutions Architect