العمل مع خدمة قواعد البيانات الرقمية المدارة للمحيط في .NET Core



في حين أن المنصات السحابية الأخرى لديها منذ فترة طويلة حلول قواعد البيانات الخاصة بها ، لم تقدم Digital Ocean أي شيء في هذا الجزء حتى اليوم. ولكن في 14 فبراير ، يوم العشاق ، قررت الشركة تقديم هدية لعملائها وأطلقت خدمة قواعد البيانات المدارة في وضع التوفر المحدود.

نظرًا لأن Digital Ocean هي الآن منصة شعبية إلى حد ما لاستضافة المشروعات الصغيرة على .NET Core ، لم أستطع تجاهل هذا الحدث.

كيفية عمل الخدمة وما هي الفروق الدقيقة عند الاتصال بقاعدة البيانات عند استخدام .NET Core في I سوف أصف في هذا المنشور.



اليوم ، تتوفر قواعد بيانات الإصدار 10 و 11. من PostrgeSQL ، فيما يلي MySQL و Redis.

وفقًا لـ Digital Ocean ، تعمل خدمة قاعدة البيانات المدارة على حل المشكلات الشائعة التي تواجه العديد من الشركات والمطورين عند إنشاء كتلة من نقطة الصفر:

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

اليوم ، سيكلفك إنشاء القاعدة الأكثر ضغطًا 15 دولارًا. يمكن أن يكلف التكوين الأغلى أكثر من ألفي دولار شهريًا .

حمامات اتصال


عندما يتصل العميل مباشرة بقاعدة بيانات PostgreSQL ، ينشئ الخادم عملية لمعالجة هذا الاتصال. يتطلب كل اتصال فردي حوالي 10 ميغابايت من ذاكرة الوصول العشوائي ويستخدم هذه الذاكرة حتى يتم إغلاقه. بالإضافة إلى ذلك ، يتم إصلاح إجمالي عدد الاتصالات ، وعند استخدام جميع الاتصالات ، لن يتمكن العملاء الجدد من الاتصال.

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

عند استخدام تجمع الاتصال ، لا تحتاج التطبيقات إلى إدارة الاتصال الفعلي. سيحتاجون فقط إلى الاتصال بحمام السباحة وقطع الاتصال بعد الانتهاء من المهمة.

خلق تجمع


إنشاء تجمع اتصال بسيط للغاية - تحتاج إلى فتح كتلة والانتقال إلى علامة التبويب "تجمعات الاتصال". تدعم DigitalOcean ثلاثة أنواع من التجميع:



الصفقة

يسمح هذا الوضع لكل عميل باستخدام التجمع في وقت واحد لمعاملة واحدة. إذا تم إرسال المزيد من المعاملات أكثر من المتوفرة في التجمع ، يتم وضع المعاملات الإضافية في قائمة الانتظار ومعالجتها بعد إتاحة الاتصالات. يكون وضع المعاملة مناسبًا عندما يكون لديك عدد كبير من العملاء الذين يستخدمون اتصالات الخمول. سيحتفظ هؤلاء العملاء باتصالهم بالمجمع دون إنشاء اتصال بـ PostgreSQL.

الجلسة

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

بيان

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

بعد إنشاء التجمع ، تحتاج إلى استخدام معلمات التجمع للاتصال بقاعدة البيانات. يمكنك رؤيتهم من خلال النقر على رابط تفاصيل الاتصال:



تجمع اتصال




في مشاريعي ، أستخدم Npgsql ، لذلك سوف تتضمن الأمثلة الإضافية استخدام برنامج التشغيل هذا.

ستبدو سلسلة الاتصال كما يلي:

User ID=xxx;Password=xxxx;Host=xxx.db.ondigitalocean.com;Port=xxx;Database=pool_name;Pooling=false;SslMode=Require;Server Compatibility Mode=Redshift; 


ما يجب الانتباه إليه:

  • لن تحتوي المعلمة Database على اسم قاعدة البيانات ، ولكن اسم التجمع الذي سيتم من خلاله الاتصال بقاعدة البيانات.
  • سيتم تعيين التجميع إلى false. سيتم إدارة تجمع الاتصال بواسطة PgBouncer ، وليس برنامج التشغيل.
  • يجب تعيين المعلمة SslMode على "طلب" ، حيث ستكون هناك حاجة إلى شهادة لفتح الاتصال.
  • يجب تهيئة المعلمة وضع توافق الخادم إلى قيمة Redshift . سيؤدي ذلك إلى تجنب عدد من المشكلات عند استخدام برنامج التشغيل npgsql خلال PgBouncer.

ستبدو طريقة إعداد الاتصال بالشكل التالي:

 protected async Task<IDbConnection> CreateConnection() { var connection = new NpgsqlConnection(_connectionString) { ProvideClientCertificatesCallback = certificates => { certificates.Add(new X509Certificate2(_cert)); }, UserCertificateValidationCallback = CertificateValidation() }; await connection.OpenAsync(); return connection; } private RemoteCertificateValidationCallback CertificateValidation() => (sender, certificate, chain, errors) => { if (errors == SslPolicyErrors.None) return true; if ((errors & SslPolicyErrors.RemoteCertificateChainErrors) != 0) { var allErrorsIsUntrustedRoot = chain? .ChainStatus .All(o => o.Status == X509ChainStatusFlags.UntrustedRoot); return allErrorsIsUntrustedRoot ?? true; } return true; }; 

هنا يجدر الانتباه إلى نقطتين.

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

لا تنسَ أن الخدمة متوفرة حاليًا في وضع LIMITED AVAILABILITY ، مما يعني أنه لا يزال من الممكن توسيع جزء من الوظائف وقد تنشأ مشاكل أثناء العمل مع الخدمات التي لم يتمكن فريق DO من إصلاحها بعد.

المراجع


Source: https://habr.com/ru/post/ar440464/


All Articles