مرحبا بالجميع
اسمي ديمتري جوليف. أنا المؤسس والمدير الفني لمجموعة فيليوف. سأتحدث اليوم عن الخدمة التي منحت جائزة "مشروع ديف" من DeveloperWeek . في هذه المناسبة ، تمت دعوتنا للحديث عن المشروع من مشهد DevExec World ، فيما يلي إصدار نصي لخطابي .

كما يمكنك أن تخمن من الشعار ، نحن نركز على تطوير الويب وجافا سكريبت. الهدف من هذه الخدمة هو تقليل تكلفة خدمة واجهات برمجة التطبيقات ومواقع الويب وتطبيقات الويب المتقدمة (PWA) وحلول الويب على خوادم Linux.
تبدأ معظم مشاريع الويب باسم المجال. يحتوي اسم المجال على سجلات Whois و DNS ، ومنذ عصر HTTP / 2 الآن ، يجب تشفير الاتصال بين الخادم ومتصفح المستخدم ويكون SSL مطلوبًا لهذا ، أو بشكل أكثر صحة ، شهادة TLS.
نراقب باستمرار سلامة بيانات اسم المجال (Whois ، DNS ، SSL / TLS) ونراقب تاريخ انتهاء الصلاحية للشهادة والمجال. يمكن تسليم إخطارات جميع التغييرات في البيانات وتواريخ انتهاء الصلاحية القادمة للمجالات والشهادات عبر الرسائل القصيرة أو رسائل البريد الإلكتروني.
نحن نعتقد أن هذه الخدمة هي وسيلة رائعة:
- كشف بسرعة الوصول غير المصرح به والتغييرات.
- القضاء على الأخطاء عند إعداد اسم المجال ، واستبدال الشهادة وتحديث سجلات DNS.

لوحة تحكم اسم المجال ( أعلاه ) ، مثال على إخطارات التغييرات في DNS وشهادة SSL / TLS و Whois ( أدناه ):

يمكن تخصيص الإشعارات من قبل أعضاء فريقك وفقًا لمسؤوليتهم:

أطلقنا على هذه الخدمة " حماية اسم النطاق الأساسية " وجعلناها مجانية إلى الأبد لجميع المستخدمين في جميع خطط التعريفات. نعتقد أن هذا سيوفر العديد من المستخدمين من مواقف مثل:
- إعادة توجيه حركة المرور ؛
- MitM
- استبدال الشهادة ؛
- اختطاف DNS ؛
- سرقة اسم النطاق وغيرها من المواقف غير السارة للغاية.
نحن نحل مشكلة مالك اسم النطاق عندما يتعذر التحكم في السجلات ، حيث يجب أن يتم ذلك كثيرًا ، بما في ذلك في الليل - إنها ببساطة مهمة مستحيلة للشخص.
هل يمكنني الوثوق في الخدمات التي تم فيها شراء اسم النطاق؟ في معظم الحالات ، لا تحتوي خدمات DNS على إخطارات بالتغييرات التي تم إجراؤها على السجلات ، ويمكن أن يقع الإخطار الوحيد من المسجلين بشأن انتهاء صلاحية اسم النطاق في البريد العشوائي ويذهب دون أن يلاحظه أحد. يقوم ناشر وموزع نادر لشهادات SSL / TLS بإرسال إخطارات حول الحاجة إلى إعادة إصدار الشهادة ، لذلك توصلنا إلى استنتاج مفاده أن السجلات والشهادات تحتاج إلى التحقق كثيرًا وبشكل تلقائي. في البداية ، كانت خدمة داخلية متاحة الآن للجميع .

ما قبل التقديم (ما قبل التقديم)
منتج الخدمة الأكثر شعبية هو التقديم المسبق . إذا كنت محظوظًا بما يكفي لكتابة تطبيقات الويب في مكتبة Angular أو React أو Vue أو Blaze أو أي مكتبة "عميل" أخرى ، فقد تلاحظ مدى اختلاف استجابة الخادم عن الصفحات التي يتم إنشاء شفرة HTML الخاصة بها على الخادم. تحتوي تطبيقات الويب المستندة إلى مكتبات "العميل" على الحد الأدنى لترميز HTML الضروري ، بدون بيانات وقوالب.

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

كما ترون في هذه الشريحة ، تتمتع PWAs بالعديد من المزايا ناقص واحد كبير - النقص المطلق في تحسين محركات البحث (SEO).
على الرغم من أن تكوين صفحات HTML على الخادم ليس شرطا مسبقا للعمل في متصفح المستخدم ، فإن ما يسمى العناكب والبوتات (الزواحف والعناكب ، والروبوتات) لا تنفذ جافا سكريبت للصفحة التي تمت زيارتها. لكي يظهر موقعك في نتائج البحث (Google و Bing و Yandex وما إلى ذلك) والمراسلات الفورية والشبكات الاجتماعية (Skype و Facebook و Twitter و iMessage و vk.com وما إلى ذلك) وفي معظم التطبيقات والخدمات ، حيث يمكنك إرسال أو نشر رابط - تحتاج إلى العثور على طريقة لنقل كود HTML الذي تم إنشاؤه الناتج عن تنفيذ جافا سكريبت "العميل".

إذا كنت تواجه الآن السؤال "كيفية توفير مُحسّنات محرّكات البحث للتطبيق استنادًا إلى حل JavaScript من جانب العميل؟" ، فهناك طريقتان: تنفيذ / دمج " تقديم جانب الخادم / SSR " من خلال استثمار المزيد من الوقت والموارد في التطوير أو استخدام خدمة ما قبل التقديم لجهة خارجية.

كيف يعمل؟ بصفتنا وكيلًا ، نقوم بتصفية الطلبات الواردة من الروبوتات وإعادة توجيهها إلى محرك العرض المسبق ، حيث سيتم طلب الصفحة وتنفيذ جافا سكريبت الخاص بها حيث سيتم تنفيذها في متصفح المستخدم.

نتائج تطبيق الويب مع التقديم المسبق:

معاينة الروابط في رسول

معاينة الروابط على الشبكات الاجتماعية

المعاينة والوصف والبيانات الوصفية وروابط أقسام الموقع في نتائج محرك البحث

نحن أول من قدم دعم ECMAScript 6/7.
يمكنك معرفة المزيد حول التقديم المسبق على prerendering.com

الرصد
المنتج الثاني الأكثر شعبية في الخدمة هو مراقبة تطبيقات الويب وواجهات برمجة التطبيقات وخوادم Linux عبر بروتوكول SNMP.
تعد خدمة المراقبة من طرف ثالث حلاً ممتازًا ، حيث إنك أنت وفريقك لا يحتاجون إلى تثبيت الموارد وتحديثها وصيانتها واستثمارها والوقت في تطوير المراقبة و "إكمالها".

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

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

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

تعرف على المزيد حول خدمة المراقبة على snmp-monitoring.com .

تحليلات الويب
ثالث منتجات الخدمة الأكثر شعبية هو تحليلات الويب . بمجرد أن نعمل على تطبيق يحتوي على الكثير من الرسوم المتحركة ، استغرق المصممون لدينا الكثير من الوقت لجعل الرسوم المتحركة سلسة. كان كل شيء على ما يرام وأكملنا المهمة ، مع توفير رسوم متحركة مقبولة على جميع الأجهزة والمتصفحات الشائعة. في وقت لاحق ، قام العميل بتعيين مهمة صغيرة - لإضافة رمز التحليلات. كان هذا أحد الحلول الشائعة التي جمعت الكثير من البيانات حول المستخدم ، بما في ذلك موضع المؤشر وانتقال الصفحة لتجميع خريطة حرارة للصفحة. نظرًا لأن JavaScript به بيئة تنفيذ ذات ترابط واحد (لا يتم حساب عمال الويب وعمال الخدمة) ، وأخذت التحليلات جزءًا كبيرًا من موارد وحدة المعالجة المركزية لتتبع جميع إجراءات المستخدم ، فقد أدى ذلك إلى تدمير جميع أعمالنا الهادفة إلى الرسوم المتحركة السلسة على الميزانية وأجهزة الجوال. لذا توصلنا إلى الفكرة والتطبيق الأول لتحليلات الويب سهلة الفهم والوقت الحقيقي والسرية والمتوافقة مع الناتج المحلي الإجمالي مع مصدر مفتوح 100 ٪ وإجراء بسيط غير تتبع للمستخدم النهائي.

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

تتوفر قائمة كاملة بالمنتجات المتاحة ومعلومات أكثر تفصيلاً على الموقع ostr.io. تتلقى جميع الحسابات الجديدة عرضًا لمرة واحدة من "القروض" (فئة مجانية ) ، مما يجعل من الممكن تنفيذ خدمات التكامل والاختبار مجانًا.

البنية التحتية
الجزء الأكثر إثارة للاهتمام هو البنية التحتية للخدمة. حاليًا ، هناك 17 خادمًا مطلوبة لتلبية احتياجات الخدمة. يتم تطبيق جميع المنتجات والوحدات الخاصة بهم كخدمات ميكروية ويتم استضافة كل خدمة ميكروية على خادم فعلي. جميع الخوادم هي نسخ متطابقة من بعضها البعض. قبل كل عملية نشر وتغيير على خادم الاختبار ، يتم فرز الإجراء بالكامل في خطوات ويتم تنفيذه في برنامج نصي bash ، ثم يتم إرسال البرنامج النصي إلى GitHub ، حيث سيتم استلامه وتشغيله بواسطة خوادم أخرى. يحتوي كل خادم على نسخة من رمز التطبيق ، والخدمات المصغرة ، و Nginx ، و MongoDB ( بفضل النسخ المتماثلة ) ، وهذا المخطط يسمح لنا بمقاومة الهجمات والبقاء على قيد الحياة في الاختبارات غير الناجحة ويمنح الوقت لحل المشكلة. ستكون الخدمة متاحة للمستخدمين حتى في حالة حدوث انخفاض إلى 93 ٪ من البنية التحتية ، وهذا بالطبع قد يؤثر على سرعة الاستجابة ، لكنه يسمح لها أن تكون داخل SLA.
لتوزيع التحميل بالتساوي على جميع الخوادم ، نستخدم مستويي موازنة DNS دائمين ( في حالتنا ، CloudFlare ) والخوادم الخاصة بنا ، والتي تم تثبيت HAProxy عليها .

جوسك
كما ترون من الوصف أعلاه ، لدينا العديد من الأحداث المتكررة ، على سبيل المثال ، لمراقبة الخوادم وواجهات برمجة التطبيقات و Whois و DNS وغيرها من نقاط النهاية ، نحتاج إلى إرسال طلب إليها بانتظام ودون انقطاع. من أجل ضمان استمرارية المهام الدورية ، قمنا ببناء شبكتنا اللامركزية التي تضم العديد من الخوادم ، لذلك نحن نعرف دائمًا أن هناك خادمًا مجانيًا لأداء المهام. بمجرد أن تتجاوز الطلبات القدرات الحالية ، يمكننا بسهولة إضافة العدد الضروري من الخوادم الجديدة ، وذلك بفضل المخطط الموضح أعلاه ، لسهولة القياس الأفقي.
في المراحل الأولية ، تجاوزت قدرات خوادمنا بشكل كبير الاحتياجات الحالية ، ونتيجة لذلك ، وجدنا أنفسنا في موقف قام فيه خادومان أو أكثر من الخوادم المجانية بأداء نفس المهمة على التوازي. هدد هذا الأمر بمزيد من التطوير ، نظرًا لأن الخدمة يمكن أن ترسل العديد من الرسائل المتطابقة إلى مستخدم واحد أو ترسل العشرات من استعلامات DNS من عناوين IP الخاصة بنا ، والتي هددت بحظرها.
لحل هذه المشكلة بسرعة ، توصلنا إلى أداة إلغاء مزامنة المهام ، والتي تم توفيرها بنسبة 95٪ من ضمان تنفيذ المهمة المعينة في قائمة الانتظار مرة واحدة وفي وحدة زمنية واحدة. في وقت لاحق نشرنا رمز josk
كحزمة NPM واسمه josk
. إذا كنت مهتمًا بالبحث تحت الغطاء ، فهناك رابط لـ GitHub .

وقت البريد
دفعنا نفس السبب إلى إنشاء mail-time
تتيح لك إرسال رسائل من بنية أساسية متعددة الخوادم. الحزمة مكتوبة على أساس josk
، وتنظم الرسائل في قائمة انتظار وترسلها من بنية تحتية متعددة الخوادم. بالإضافة إلى البريد ، يسمح لك mail-time
بتقسيم الخدمات الصغيرة إلى:
- "العملاء" (
client
) ، الذين يضيفون رسائل فقط إلى قائمة الانتظار ؛ - "الخادم" (
server
) ، الذي ينشئ خدمة ميكروية مستقلة لأداء مهمتين فقط - إدارة قائمة انتظار الحروف وتوزيعها.
ليست هذه هي الميزة الفريدة الوحيدة للمكتبة ، للاطلاع على التفاصيل ووصفًا أكثر تفصيلًا لجميع الميزات ، اقرأ الوثائق .
لسوء الحظ ، في الوقت الحالي ، josk
كلتا الحزمتين ( josk
mail-time
) MongoDB كقاعدة بيانات (DB) josk
التزامن. نحن على استعداد لتطوير كلتا المكتبات وسنناقش بسعادة واعتماد العلاقات العامة لإضافة دعم لقواعد البيانات الأخرى. من جانبنا ، يبدو Redis مرشحًا رائعًا للتكامل.
شكرا جزيلا للجميع الذين قرأوا حتى النهاية. إذا كنت مهتمًا - طرح الأسئلة والكتابة في شبكة LAN ، وإذا كان هناك اهتمام من القراء ، فأنا مستعد للحديث عن تجربة المشاركة والتحدث في أحداث أخرى حول تطوير الويب و node.js و JavaScript.
كل شخص مهتم بمعرفة ostr.io ، استخدم الخدمة أو احصل على رمز ترويجي أو خصم أو إجابات على الأسئلة - اكتب لي على PM أو الشبكات الاجتماعية. يتكلم دعم ostr.io باللغة الإنجليزية فقط ، ولكنه يستجيب بسرعة كبيرة ، على سبيل المثال عبر برنامج FB messenger .