
في 28 أغسطس ، أعلنت مؤسسة CNCF (الحوسبة السحابية الأصلية) ، خلف Kubernetes و Prometheus ومشاريع أخرى مفتوحة المصدر للتطبيقات السحابية الحديثة ،
عن اعتماد منتج جديد في sandbox -
TiKV .
ولدت قاعدة بيانات المعاملات الموزعة ذات القيمة الرئيسية هذه كإضافة إلى
TiDB ، وهو نظام إدارة قاعدة بيانات موزع يوفر قدرات OLTP و OLAP ويوفر التوافق مع بروتوكول MySQL ... ولكن دعونا نتحدث عنها واحدة تلو الأخرى.
TiDB كوالد
لنبدأ بمشروع TiDB "الرئيسي" الذي أنشأته شركة PingCAP Inc. الصينية

تم إصدار الإصدار العام الأول من DBMS - 1.0 -
قبل أقل من عام. وتتمثل ميزاته الرئيسية في "الهجينة" التي تجمع بين معالجة البيانات للمعاملات والتحليل (المعالجة الهجينة للمعاملات / التحليلات ، HTAP) ، بالإضافة إلى التوافق المذكور بالفعل مع بروتوكول MySQL. تظهر صورة أكثر اكتمالاً لـ TiDB عند ذكر ميزات أخرى - شائعة بالفعل في DBMS الجديدة - مثل قابلية التوسع الأفقية ، والتوافر العالي والتوافق الصارم مع ACID.
الهيكل العام ل TiDB على النحو التالي:

نظرًا لأن TiDB يوفر قابلية التوسع NoSQL وضمانات ACID ، فقد تم تصنيفها على أنها
NewSQL . لا يخفي المؤلفون حقيقة أنهم ابتكروا المنتج تحت إلهام ممثلين آخرين لـ NewSQL:
Google Spanner و
F1 . ومع ذلك ، أصر المطورون الصينيون على "أفضل ممارساتهم وحلولهم عند اختيار التكنولوجيا". على وجه الخصوص ، اختاروا خوارزمية لحل مشكلات توافق
Raft (بدلاً من
Paxos ، والتي يتم استخدامها في Spanner) ، وتخزين
RocksDB (بدلاً من نظام الملفات الموزع) ، و Go (و Rust) كلغة برمجة.
يمكن العثور على العديد من التفاصيل حول جهاز TiDB في تقرير "
كيف نبني TiDB " من المؤسس المشارك والرئيس التنفيذي لشركة PingCAP - Max Liu - وسنعود إلى بعضها قريبًا من TiKV. يتم
توزيع كود مصدر TiDB تحت رخصة Apache المجانية v2. من بين
المستخدمين الرئيسيين ، Lenovo ، Meizu ، بنك بكين ، البنك الصناعي والتجاري الصيني ، إلخ.
ما هو TiKV وما هو الدور الذي يلعبه TiDB (وليس فقط) في العالم؟
بنية وميزات TiKV
دعونا نعود إلى العمارة العامة لـ TiDB ، في عرض مختلف قليلاً:

يمكنك أن ترى أن TiDB نفسه يوفر تطبيق SQL والتوافق مع MySQL * ، بينما يتم تعيين بقية العمل إلى مجموعة TiKV. ما هذا "بقية العمل"؟ هنا رسم تخطيطي أكثر تفصيلاً:

* في صورتين عن طبقة التوافق مع MySQL في TiDB.يحدث تحويل الجداول إلى قيمة المفتاح بحيث من الاستعلامات:
INSERT INTO user VALUES (1, "bob", "huang@pingcap.com"); INSERT INTO user VALUES (2, "tom", "tom@pingcap.com");
... اتضح:

الفهارس في TiDB هي أزواج عادية ، تشير قيمها إلى خط بيانات:

تفسيرات لمخطط TiKV:
- KV API - مجموعة من واجهات البرنامج لكتابة / قراءة البيانات ؛
- المعالج المشترك - إطار عمل المعالج المشترك لدعم الحوسبة الموزعة (مقارنة بنفس المعادلة لـ HBase) ؛
- المعاملات - نموذج معاملة مشابه لـ Google Percolator (بروتوكول الالتزام في مرحلتين ؛ يستخدم مخصص الطابع الزمني ؛ انظر أيضًا المقارنة مع Spanner ) ؛
- MVCC (MultiVersion Concurrency Control) للقراءة بدون أقفال ومعاملات ACID (يتم وضع علامة على البيانات بإصدارات ؛ أي تغييرات تم إجراؤها في المعاملة الحالية لن تكون مرئية للمعاملات الأخرى حتى وقت الالتزام) ؛
- Raft KV - خوارزمية Raft المذكورة مسبقًا والمستخدمة في القياس الأفقي واتساق البيانات ؛ يتم تنفيذه في الصدأ من etcd (تم التحقق منه من خلال الاستغلال الواسع النطاق) ؛ بالمناسبة ، أعلن مؤلفو TiKV "قابلية التوسع البسيطة لأكثر من 100 تيرابايت من البيانات" ؛
- RocksDB - تخزين محلي من نوع القيمة الرئيسية ، وهو أيضًا راسخ بالفعل في المشاريع الكبيرة في الإنتاج (Facebook) ؛
- برنامج تشغيل الموضع - "دماغ" المجموعة ، الذي تم إنشاؤه وفقًا لمفهوم Google Spanner والمسؤول عن تخزين البيانات الوصفية حول المناطق ، ودعم العدد المطلوب من النسخ المتماثلة ، وحتى توزيع الحمل (باستخدام Raft).

إذا قمنا بتعميم الترابط بين المكونات الرئيسية ، نحصل على ما يلي:
- تحتوي كل عقدة TiKV على مستودع واحد أو أكثر (RocksDB).
- يحتوي كل مستودع على العديد من المناطق .
- المنطقة هي "وحدة أساسية لحركة بيانات القيمة الرئيسية" ، يتم نسخها (باستخدام Raft) إلى العديد من العقد. تشكل مجموعات النسخ المتماثلة هذه مجموعات طوافة .
- أخيرًا ، فإن برنامج تشغيل الموضع الذي يدير هذه المجموعة ، كما ترى ، هو في حد ذاته مجموعة.
تركيب واختبار TiKV
تتم كتابة قاعدة شفرة TiKV في الأساس في Rust ، ولكن لديها أيضًا العديد من مكونات الجهات الخارجية بلغات أخرى (RocksDB في C ++ و gRPC في Go).
يتم توزيعه بموجب نفس ترخيص Apache المجاني الإصدار 2.
كما ذكر في بداية المقال ، ظهر TiKV في البداية كعنصر مهم من TiDB ، ولكن اليوم يمكن تشغيله داخل نظام إدارة قواعد البيانات هذا وبشكل منفصل. (ولكن في أي حال ، يتطلب تشغيلها
برنامج تحديد موضع مكتوب في Go ويتم توزيعه كمكون منفصل).
يتطلب أقصر
تعليمات لبدء TiKV مع TiDB DBMS Git و Docker (17.03+) و Docker Compose (1.6.0+) و MySQL Client وينتهي بما يلي:
git clone https://github.com/pingcap/tidb-docker-compose.git cd tidb-docker-compose && docker-compose pull docker-compose up -d
ستكون نتيجة هذه الأوامر نشر مجموعة TiDB ، والتي تتكون افتراضيًا من المكونات التالية:
- 1 نسخة من TiDB الفعلي ؛
- 3 نسخ من TiKV ؛
- 3 حالات سائق التنسيب ؛
- بروميثيوس وجرافانا (للرصد والرسوم البيانية) ؛
- نسختان (رئيسي + تابع) من TiSpark (طبقة لإطلاق Apache Spark فوق TiDB / TiKV لأداء طلبات OLAP المعقدة) ؛
- 1 مثيل من TiDB-Vision (لتصور سائق التنسيب) .
مزيد من العمل مع DBMS الموسع:
- اتصال عبر عميل MySQL:
mysql -h 127.0.0.1 -P 4000 -u root
؛ - واجهة ويب Grafana لعرض حالة الكتلة -
http://localhost:3000
تحت admin / admin ؛ - واجهة ويب TiDB-Vision للحصول على معلومات حول موازنة التحميل في نظام المجموعة وترحيل البيانات عبر العقد -
http://localhost:8010
؛ - واجهة الويب Spark -
http://localhost:8080
(الوصول إلى TiSpark - من خلال spark://127.0.0.1:7077
).
إذا كنت تريد مجموعة
TiDB غير قياسية تمامًا (على سبيل المثال ، قم بتغيير حجمها ، صور Docker المستخدمة ، والمنافذ ، وما إلى ذلك) ، ثم بعد استنساخ
مستودع tidb-docker-compose ، يمكنك تحرير التكوين لـ Docker Compose:
$ cd tidb-docker-compose $ vi compose/values.yaml $ helm template compose > generated-docker-compose.yaml $ docker-compose -f generated-docker-compose.yaml pull $ docker-compose -f generated-docker-compose.yaml up -d
لمزيد من التخصيص ، راجع "
تخصيص مجموعة TiDB " للحصول على معلومات حول مصدر تكوينات TiDB و TiKV و Placement Driver وغير ذلك من التفاصيل.
من أجل
النشر المريح
لـ TiDB في مجموعة Kubernetes ، تم تحضير عامل يحمل نفس الاسم -
مشغل TiDB . إنه موجود في مخططات Helm ، لذلك يمكن تقليل التثبيت إلى الأوامر التالية (مرر من
العرض التقديمي في TiDB DevConf 2018):

بالمناسبة ، يتحدث نفس العرض التقديمي عن وجهات نظر مطوري TiDB حول مراقبة DBMS هذا. وصف النص ، للأسف ، باللغة الصينية ، ولكن يمكن الحصول على فكرة عامة من هذه الشرائح:


بالعودة إلى الموضوع مباشرة TiKV - نشر هذا المشروع أدلة الإطلاق الخاصة به لأغراض الاختبار:
وبالنسبة
لنشر TiKV في الإنتاج ، هناك تطورات جاهزة مع Ansible - مرة أخرى ،
مع TiDB وبدونه .
أخيرًا ، يتم تقديم واجهات للعمل مع TiKV:
تتضمن
خطط المطورين أيضًا إنشاء عميل على Rust.
الملخص
بعد أن نشأت كمكون لمشروع مفتوح المصدر أكبر لشركة صينية ، تمكنت TiKV بالفعل من اكتساب شهرة في دوائر واسعة إلى حد ما. لا تظهر
إحصائيات GitHub أكثر من 3600 نجمة فحسب ، بل أيضًا ما يقرب من 500 شوك ، وما يقرب من 100 مساهم (على الرغم من أن عشرين منهم فقط قاموا بأكثر من 10 التزامات).
إن ربط TiKV بعدد
مشاريع CNCF وحقيقة أن هذا هو المشروع الأول من هذا النوع يشير بوضوح أيضًا إلى الاعتراف بالمنتج من قبل مجتمع السحابة الأصلي ... ويجب أن يعطي زخمًا لتطوير أكثر نشاطًا لقاعدة الشفرة من قبل الغرباء (أي خارج الشركة الأم و DBMS الخاص بها ) من قبل المتخصصين.
ملاحظة
اقرأ أيضا في مدونتنا: