عن المشروع

hashicorp/raft هي مكتبة Go تنفذ خوارزمية إجماع Raft، مما يوفر أساسًا لبناء آلات الحالة المكررة في الأنظمة الموزعة. تدير المكتبة سجلًا مكررًا وتتكامل مع تجريد آلة الحالة المحدودة (FSM) للحفاظ على حالة متسقة عبر عقد متعددة. تشمل القدرات الرئيسية: - **انتخاب القائد**: تنتقل العقد بين حالات التابع والمرشح والقائد. يرقّي التابعون أنفسهم إلى مرشحين إذا لم يتم استلام أي إدخالات خلال فترة مهلة، ثم يطلبون أصواتًا من الأقران. يصبح المرشح الذي يحصل على نصاب من الأصوات قائدًا. - **تكرار السجل**: يضيف القائد إدخالات سجل جديدة (كتل ثنائية غير شفافة) إلى التخزين الدائم ويكررها إلى نصاب من التابعين. بمجرد الالتزام، تُطبق الإدخالات على FSM. - **اللقطات التلقائية**: لمنع نمو السجل غير المحدود، يلتقط Raft تلقائيًا لقطة لحالة FSM الحالية ويضغط السجل، مع إزالة الإدخالات التي تم تطبيقها بالفعل. - **إدارة الأقران الديناميكية**: تدعم المكتبة إضافة وإزالة العقد من المجموعة طالما يتوفر نصاب. - **خلفيات التخزين**: الخلفية الأساسية MDBStore موجودة في مستودع منفصل (raft-mdb)، وتتوفر خلفية Go نقية باستخدام BoltDB (raft-boltdb). يمكن لكل منهما العمل كتطبيقات LogStore و StableStore. - **إصدار المقاييس**: يدعم المقاييس عبر armon/go-metrics (الافتراضي) أو hashicorp/go-metrics (عبر علامة البناء)، مع مسار ترحيل من مكتبة armon المهجورة. تتطلب المكتبة Go 1.16+ ومرخصة بموجب MPL 2.0. وهي مبنية على ورقة Raft 'البحث عن خوارزمية إجماع مفهومة' وهي قابلة للمقارنة في الأداء مع Paxos، مع زمن التزام السجل المحدود بإدخال/إخراج القرص ورحلات الشبكة ذهابًا وإيابًا إلى نصف المجموعة. أحجام المجموعات الموصى بها هي 3 أو 5 عقد، والتي تتحمل فشل عقدة واحدة أو عقدتين على التوالي مع تعظيم التوافر. تستخدم منتجات HashiCorp مثل Consul و Nomad هذه المكتبة للتنسيق الموزع.