تمت إعادة كتابة Postgres بلغة Rust... ونجحت في اجتياز جميع الاختبارات بشكل مذهل

BBetter Stack
컴퓨터/소프트웨어창업/스타트업AI/미래기술

스크립트

00:00:00قام شخص بإعادة بناء Postgres باستخدام لغة Rust، وبطريقة ما نجح الإصدار الذي تم إطلاقه الآن في اجتياز جميع استعلامات الانحدار البالغ عددها 46,000 في Postgres.
00:00:08إنه يعمل مع PSQL العادي. ويمكنه حتى تشغيل دليل بيانات Postgres 18.3 موجود.
00:00:14هذا يبدو كبديل جاهز للإنتاج. لكنه ليس كذلك.
00:00:17لكن الإصدار الأكثر إثارة من هذا المشروع لم يتم إطلاقه بعد.
00:00:21إذًا ما الذي ننظر إليه بالضبط هنا؟ هل هذا هو مستقبل Postgres أم مجرد تجربة ذكاء اصطناعي؟
00:00:30الآن، لفهم سبب أهمية هذا الأمر، عليك أن تفهم المشكلة.
00:00:36لنكن واقعيين، Postgres هي واحدة من أفضل قواعد البيانات التي تم بناؤها على الإطلاق.
00:00:40لكنها تحمل أيضًا ما يقرب من أربعة عقود من الهندسة المعمارية وحوالي مليون سطر من لغة C.
00:00:46يحصل كل اتصال عميل على عملية خلفية خاصة به.
00:00:49هذا العزل مفيد، لكنه يعني أيضًا مزيدًا من العبء على الذاكرة، ومزيدًا من الضغط لاستخدام تجميع الاتصالات،
00:00:56ومزيدًا من الصعوبة في مشاركة الحالة عبر العمل المتوازي.
00:01:00تتخذ PGRust مسارًا مختلفًا.
00:01:02حافظ على سلوك Postgres، وحافظ على تجربة العميل، وحافظ على تنسيقات القرص، ولكن استبدل المحرك الأساسي بلغة Rust.
00:01:09هذه ليست إضافة لـ Postgres.
00:01:11إنها ليست ميزة تمت إضافتها في الأعلى.
00:01:13هذا منفصل تمامًا، تنفيذ يحاول التصرف تمامًا مثل Postgres.
00:01:18نرى الكثير من عمليات إعادة الكتابة بلغة Rust الآن، تمامًا مثل تلك التي قمنا بتغطيتها في ذلك اليوم بشأن قيام Bunn بإعادة كتابة قاعدة الكود الخاصة بها بالكامل باستخدام Rust.
00:01:25سأضعها في مكان ما هنا.
00:01:27والآن، كل هذا يبدو جيدًا، لكن هل تشعر حقًا أنها Postgres الحقيقية؟
00:01:31أقل اختبارًا بشكل صحيح.
00:01:32إذا كنت تستمتع بأدوات البرمجة التي تسرع سير عملك، فتأكد من الاشتراك.
00:01:36لدينا مقاطع فيديو تصدر طوال الوقت.
00:01:38الآن، سأبدأ بصورة Docker الرسمية، ثم سأتصل بعميل PSQL عادي تمامًا.
00:01:43لا شيء مخصص.
00:01:44الآن، لقد دخلت.
00:01:46أولاً، دعنا نتحقق من الإصدار.
00:01:48كما ترى، فهي تبلغ عن نفسها باسم PGRust مع أحدث إصدار.
00:01:53الآن، يمكنني إنشاء جدول، وإدراج بعض البيانات، وإلقاء نظرة على خطة الاستعلام.
00:01:59سأقوم فقط بتشغيل هذا هنا في محطتي الطرفية.
00:02:01من الخارج، هذا لا يمكن تمييزه تمامًا عن Postgres.
00:02:05نفس العميل، نفس SQL، نفس المخرجات.
00:02:08يمكنك حتى رؤية أن مخطط الاستعلام اختار فحص الفهرس وقدم لنا إحصائيات تنفيذ حقيقية.
00:02:14الآن، لجعل هذا أكثر إثارة للاهتمام قليلاً، دعنا ندرج 100,000 صف ونقوم بتشغيل استعلام آخر.
00:02:20هذه مجرد 100 ألف صف من البيانات التي تم إنشاؤها.
00:02:23سنقوم بإسقاطها هنا.
00:02:25الآن، ما الهدف من كل هذا؟
00:02:27حسنًا، سؤال جيد.
00:02:28حسنًا، في هذا الإصدار المبكر الحالي، لن نرى تحسينات كبيرة في السرعة مقارنة بـ Postgres العادي.
00:02:35تأتي ادعاءات الأداء الأكبر من إصدار تطوير غير مُصدَر يتحول إلى نموذج خيط لكل اتصال.
00:02:43كل هذا يثبت، مع ذلك، أن هذا ليس مجرد تنفيذ جزئي.
00:02:47لقد اجتاز مجموعة اختبار الانحدار الرسمية الكاملة لـ Postgres، أكثر من 46,000 استعلام.
00:02:53إنه يتحدث ببروتوكول السلك الحقيقي، ولديه مخطط استعلام يعمل في محرك التخزين.
00:02:59هذا خادم قاعدة بيانات حقيقي.
00:03:01إنه مكتوب فقط بلغة Rust.
00:03:03لذا، مع تقدم هذا الأمر، يمكننا رؤية بعض تحسينات الأداء الجادة من حيث السرعة.
00:03:08إذًا، الآن السؤال هو، لماذا لا ننشئ إضافة Postgres أخرى فقط؟
00:03:12لأن الإضافات توضع فوق نواة Postgres الأصلية.
00:03:16يمكن للفرع تغيير تلك النواة، لكنه بعد ذلك يرث نفس البنية والمهمة الدائمة المتمثلة في مواكبة Postgres المنبع.
00:03:25لديك قواعد بيانات مثل CockroachDB وYugaByte، لكنها قواعد بيانات موزعة مستقلة.
00:03:31التوافق الدقيق ليس هدفهم الرئيسي.
00:03:35تحاول PG Rust شيئًا آخر.
00:03:37إنها تستخدم سلوك Postgres الفعلي كمواصفات.
00:03:41يستهدف الإصدار الحالي Postgres 18.3.
00:03:44إنه يجتاز مجموعة الانحدار الافتراضية واختبارات العزل، وهو متوافق بما يكفي للإقلاع من دليل بيانات Postgres 18.3 موجود.
00:03:53تحدث التجربة الأكبر هنا في إصدار منفصل غير منشور، ويقال إن هذا الإصدار يستبدل نموذج عملية لكل اتصال في Postgres بنموذج خيط لكل اتصال.
00:04:05مع نموذج Postgres العادي، يحصل كل اتصال على عمليته الخاصة.
00:04:09مع النموذج الجديد، يحصل كل اتصال على خيط داخل نفس العملية.
00:04:14يمكن أن يقلل ذلك من العبء لكل اتصال ويجعل من السهل على أجزاء مختلفة من قاعدة البيانات مشاركة المعلومات فعليًا.
00:04:21لكن مع كل هذا، سيكون هناك مقايضة، أليس كذلك؟
00:04:24تخلق العمليات المنفصلة أيضًا جدرانًا مفيدة بين الاتصالات.
00:04:28إذا فشلت عملية واحدة، يمكن أن يساعد ذلك الفصل في احتواء الضرر.
00:04:32مع الخيوط، قد تؤثر إضافة واحدة غير آمنة أو خطأ في الذاكرة على المزيد من الخادم.
00:04:38لذا فإن الخيط لكل اتصال ليس أفضل تلقائيًا.
00:04:41إنه يفتح أبوابًا جديدة فقط، لكنه قد يزيل أيضًا بعض قضبان الأمان.
00:04:45ثم هناك الجزء الثاني الرئيسي من القصة، الذكاء الاصطناعي.
00:04:49استخدم مايكل ماليس وجيسون سيبيل وكلاء الترميز بكثافة لتسريع إعادة الكتابة.
00:04:54يتبع الإصدار المنشور عن قصد هيكل Postgres الأصلي في العديد من الأماكن.
00:04:59الإصدار غير المنشور هو حيث يحاولون إجراء تغييرات معمارية أكبر.
00:05:03إذًا التجربة الحقيقية ليست ببساطة، هل يمكن لـ Rust جعل Postgres أسرع؟
00:05:08إنها أشبه بـ، هل يمكن للذكاء الاصطناعي جعل إعادة كتابة بهذا الحجم ميسورة التكلفة بما يكفي لكي يتمكن المطورون من إعادة التفكير فعليًا في الهندسة المعمارية تحت الأشياء؟
00:05:16لأن الذكاء الاصطناعي تم استخدامه بكثافة هنا.
00:05:19الآن، هل يغير هذا الأشياء؟
00:05:20حسنًا، ربما.
00:05:21إنه أيضًا المكان الذي نحتاج فيه إلى الإبطاء قليلاً.
00:05:25الإصدار الذي تم إصداره غير مُحسن بشكل كبير.
00:05:28تأتي ادعاءات الأداء الرئيسية من إصدار الخيط لكل اتصال غير المنشور، والذي لا يمكننا اختباره تمامًا في الوقت الحالي.
00:05:36يدعي المطورون أداءً أفضل بنسبة 50% تقريبًا في أعباء العمل للمعاملات.
00:05:40كما أنهم يدعون حوالي 300 مرة من أداء Postgres في أعباء العمل التحليلية.
00:05:45تلك الأرقام ضخمة، لكن الكود الذي يقف وراء تلك النتائج غير متاح حاليًا لأي نوع من الفحص أو القياس.
00:05:53لذا، من هنا، لا يزال هناك الكثير من التكهنات.
00:05:57يبدو أن هناك انقسامًا جيدًا بنسبة 50-50 هنا، على الأقل عند القراءة عبر الإنترنت، مع أسئلة تبدو نوعًا ما مثل هذه.
00:06:03هذه مجرد القضايا هنا على GitHub.
00:06:05ثم تحصل حتى على قضية واحدة مثل هذه، أليس كذلك؟
00:06:08وهو سؤال معقول تمامًا.
00:06:10أثناء قراءتك لهذه القضية، يبدو المطورون مصممين على إنجاح هذا العمل بالفعل.
00:06:15لذا، ليس لدينا إحصائيات حقيقية حتى الآن.
00:06:17هذا لا يعني تلقائيًا أن الأرقام خاطئة، رغم ذلك.
00:06:20هذا يعني فقط أننا يجب أن نتعامل معها كادعاءات واعدة، وليس كحقائق ثابتة.
00:06:24وبصراحة، قد لا يكون المضاعف الدقيق هو الجزء الأكثر أهمية.
00:06:28لا نحتاج إلى تغيير مشروع Postgres بأكمله قبل معرفة ما إذا كانت الفكرة تعمل بالفعل أم لا.
00:06:34قد تكون هذه الحرية أكثر قيمة من أي معيار قياس واحد يمكننا الحصول عليه.
00:06:38الآن، كان رد الفعل من المطورين مع كل عمليات إعادة الكتابة هذه بلغة Rust، حتى على PG Rust هذا، هائلاً.
00:06:44تجاوزت مناقشة Hacker News الرئيسية مئات النقاط والتعليقات، ولكن مرة أخرى، الاستجابة منقسمة.
00:06:50كلا الجانبين يقدمان نقاطًا جيدة.
00:06:52أولاً، اجتياز كل استعلام انحدار هو إنجاز جاد.
00:06:56تدعي الكثير من المشاريع أنها متوافقة مع Postgres.
00:06:59يمكن أن تعني تلك العبارة أي شيء تقريبًا.
00:07:01لدى PG Rust هدف قابل للقياس.
00:07:04اختبارات Postgres الحقيقية هي الحكم على هذا.
00:07:07وتشير سرعة إعادة الكتابة هذه إلى أن وكلاء الترميز قد يغيرون تمامًا تكلفة تجارب البنية التحتية الكبيرة.
00:07:13الأفكار التي بدت ذات يوم مكلفة للغاية للمحاولة أصبحت الآن ممكنة بشكل أكبر على ما يبدو.
00:07:19الآن، بالنسبة للجانب الآخر من الأشياء، اجتياز اختبارات الانحدار ليس هو نفسه كسب ثقة الإنتاج.
00:07:24لا تحل تلك الاختبارات محل سنوات من اختبارات استعادة الأعطال والنسخ المتماثل، أو قواعد البيانات التي تعمل لأشهر دون توقف.
00:07:31يمكن للمشروع اجتياز كل اختبار معروف ولا يزال يفشل في موقف لم يفكر أحد حتى في اختباره.
00:07:37توليد مئات الآلاف من أسطر الكود هو تحدٍ واحد.
00:07:42التوافق مع الإضافات هو فجوة رئيسية أخرى.
00:07:45الآن، هل يجب عليك استبدال مجموعة Postgres الإنتاجية الخاصة بك بـ PG Rust؟
00:07:49لا، قطعاً لا.
00:07:51المشروع نفسه ليس جاهزًا للإنتاج.
00:07:53تم التصريح بذلك.
00:07:54إنه غير مُحسن بالكامل.
00:07:56في مجالات التوافق الرئيسية، بما في ذلك نظام الإضافات البيئي، لا يزالون غير مكتملين.
00:08:02لكن هل يجب عليك تجربته؟
00:08:03بالتأكيد.
00:08:03إذا كنت تعمل مع قواعد البيانات، أو Rust، أو تنفيذ الاستعلام، أو اختبار التوافق، أو تطوير الذكاء الاصطناعي، فلماذا لا تجرب ذلك؟
00:08:10قم بتشغيل صورة Docker، واختبر مكتبة العميل الخاصة بك مقابلها، واقرأ المصدر، وانظر ماذا يحدث.
00:08:16لذا، اترك حكمك في التعليقات.
00:08:18إلى أين يتجه هذا المشروع؟
00:08:20هل سنبدأ في إعادة كتابة المزيد بلغة Rust؟
00:08:21سنكتشف ذلك.
00:08:23إذا كنت تستمتع بنصائح وحيل البرمجة مثل هذه، فتأكد من الاشتراك في قناة BetterStack.
00:08:26سنراك في فيديو آخر.

핵심 요약

يمثل مشروع PGRust محاولة جادة لإعادة بناء محرك Postgres باستخدام لغة Rust، حيث نجح في اجتياز 46,000 اختبار انحدار مع وعود بزيادات هائلة في الأداء عبر تحويل نموذج العمليات إلى خيوط معالجة.

하이라이트

  • تجاوز مشروع PGRust مجموعة اختبارات الانحدار الخاصة بـ Postgres، والتي تتضمن أكثر من 46,000 استعلام.

  • يعتمد الإصدار الحالي من PGRust على سلوك Postgres الفعلي ويتمتع بالتوافق اللازم للإقلاع من دليل بيانات Postgres 18.3 موجود.

  • يدعي مطورو نسخة تجريبية غير منشورة تعتمد على نموذج خيط لكل اتصال أداء أفضل بنسبة 50% في أعباء العمل للمعاملات و300 ضعف في الأداء التحليلي.

  • يؤدي استبدال نموذج العملية لكل اتصال بنموذج الخيط لكل اتصال إلى تقليل العبء على الذاكرة وتسهيل مشاركة الحالة بين العمليات المتوازية.

  • ساهم وكلاء الترميز المعتمدون على الذكاء الاصطناعي بشكل مكثف في تسريع عملية إعادة كتابة قاعدة الكود الضخمة لـ Postgres بلغة Rust.

타임라인

إعادة بناء Postgres باستخدام Rust

  • نجح تنفيذ PGRust في اجتياز 46,000 استعلام انحدار خاص بـ Postgres.
  • يدعم النظام التعامل مع أدوات PSQL القياسية ويقرأ أدلة بيانات Postgres 18.3 مباشرة.
  • يهدف المشروع إلى استبدال المحرك الأساسي بلغة Rust مع الحفاظ على سلوك وتنسيقات Postgres الأصلية.

يعمل PGRust كبديل منفصل تماماً يحاول محاكاة Postgres بدقة بدلاً من كونه مجرد إضافة برمجية. هذا التصميم يسمح بالحفاظ على تجربة المستخدم مع إجراء تغييرات جوهرية في المحرك الداخلي المكتوب بـ Rust.

التحقق من التوافق والأداء

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

أثبتت الاختبارات قدرة النظام على التعامل مع 100 ألف صف من البيانات وعرض إحصائيات تنفيذ دقيقة. يظل الهدف من هذا الإصدار المبكر هو إثبات التوافق مع معايير Postgres قبل الانتقال لمرحلة التحسينات المعمارية الكبرى.

التغييرات المعمارية والمخاطر

  • يستبدل نموذج الخيط لكل اتصال في الإصدار غير المنشور نموذج العملية لكل اتصال المتبع في Postgres.
  • يقلل نموذج الخيوط من العبء على الذاكرة ويسهل مشاركة المعلومات بين الاتصالات.
  • تؤدي الخيوط إلى إزالة جدران الحماية التي توفرها العمليات المنفصلة، مما يزيد من احتمالية تأثر الخادم بالكامل في حال حدوث خطأ في الذاكرة.

تتطلب المعمارية الجديدة مقايضة بين الكفاءة والأمان. بينما توفر العمليات المنفصلة عزلاً يمنع انهيار النظام عند فشل إحدى العمليات، تفتح الخيوط أبواباً للأداء العالي لكنها تضعف قضبان الأمان الهيكلية.

دور الذكاء الاصطناعي ووضع المشروع الحالي

  • استُخدمت وكلاء الترميز لتسريع عملية إعادة كتابة ملايين الأسطر من لغة C إلى Rust.
  • تدعي الإصدارات غير المنشورة أداءً أسرع بـ 50% في المعاملات و300 ضعف في التحليلات، وهي أرقام لم تخضع للفحص بعد.
  • لا يزال النظام غير جاهز للإنتاج ويفتقر إلى التوافق مع نظام الإضافات البيئي لـ Postgres.

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

커뮤니티 글

모든 글 보기