سؤال

مقدمة

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

سؤالي

ما هي أفضل طريقة لتتبع مدى اعتماد نظام بأكمله على نظام آخر؟

يمكن أن تقترح الإجابة إما طريقة للقيام بما سبق، أو حزمة برامج، أو تقنيات توثيق.

في حالتي الخاصة، كثير يعني أكثر من 20 تطبيقًا للويب وسطح المكتب وأكثر من عشرة خوادم.

هل كانت مفيدة؟

المحلول

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

نصائح أخرى

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

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

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

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

يبدو أنك مؤهل لاستخدام الإصدار المجاني من Community Edition of Foundation، والذي يمكنك استخدامه على ما يصل إلى 30 خادمًا - فقط تحميل ذلك والتحقق من ذلك.ثم اسمحوا لنا أن نعرف ما هو رأيك من فضلك!

تنصل:أدير مجموعة التطوير في تايدواي.المنتج رائع جدًا في IMO، على الرغم من أنني لم أكتب أيًا منه بنفسي مباشرة :)

قم بإيقاف تشغيل كل جهاز واحدًا تلو الآخر وانظر ما الذي سيتعطل..؛ص

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

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

هذا سؤال جيد -- يبدو أننا نواجه هذا السؤال في كل مرة.

ما حاولنا القيام به خلال العام الماضي أو نحو ذلك هو أن نكون "قاسيين" في أمرين:

  1. الأتمتة - إذا قمت بأتمتة العملية والإنشاء/النشر بشكل متكرر، فستميل عملية الأتمتة إلى تصحيح الأمور في معظم الأوقات (إعدادات التكوين، وما إلى ذلك)

  2. wiki، wiki، wiki - نحاول أن نكون متشددين في الحفاظ على تحديث الفريق ومشروع wiki.

من الغريب أن نرى ردود أخرى.

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

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

لذا فإن الإجابة تعتمد على ما تعتبره "كثيرًا".

هناك نوعان من المشاكل:

أ) بالنسبة لأولئك الذين يريدون معرفة كيفية تحديد التبعيات لكل مكون

ب.) بالنسبة لأولئك الذين يرغبون في تتبع التبعيات المتبادلة وأولوياتهم في نظام المكونات.(كما هو الحال في أي مكون يتم تثبيته في بيئة الاختبار أولاً وما إلى ذلك ...)

إذا كان ما لديك عبارة عن سلسلة من المكونات، تعرف تبعيات كل منها، وتريد ترتيب تبعيات لقائمة المكونات بأكملها، فقد تجد وحدة Perl تسمى Algorithm::Dependency::Ordered لتكون ذات قيمة معينة .هناك وحدات أخرى ذات صلة يمكنها العمل مع سجلات قواعد البيانات للمكونات وما إلى ذلك، أو حتى سجلات الملفات البسيطة.لكن تنبيه:لقد واجهت مشاكل في الحصول على هذا العمل.

وبدلاً من ذلك، قد تكون أداة الرسوم البيانية ذات قيمة.

هذه وظيفة مجموعة "إدارة التكوين".للبدء، سيتعين عليك التحدث إلى "الخبراء" في شركتك وإنشاء خريطة/رسم بياني للتطبيقات.استخدم graphviz/dot لإنشاء رسم تخطيطي، لن يكون جميلًا، ولكنه سيعطيك تمثيلًا مرئيًا للتبعيات.

هنا مثال:

digraph g {
 rankdir=LR;
 app1->app2->db1;
 app1->app3;
}

أتمنى أن يساعدك هذا،

يعد تعيين تبعية النظام أمرًا واحدًا.إن الإعدادات البيئية الحقيقية، والمعرفات الفريدة، وكلمات المرور، وإعدادات الانتحال، وأسماء قواعد البيانات، والبيانات الأخرى التي تتغير من التطوير إلى سؤال وجواب إلى uat إلى الإنتاج هي التحدي الحقيقي.

من يخزن/يتذكرهم جميعًا؟

لا يعرف المطور خادم (خوادم) الإنتاج الذي سيتواجد عليه تطبيقه.إنه يوثق فقط اسم قاعدة بيانات التطوير الخاصة به، uid's، pwd's ويصف جداول قاعدة البيانات الخاصة به، وسلاسل conn، وما إلى ذلك.

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

مرة أخرى عندما هاجر إلى ضمان الجودة وUAT، من؟

على من تقع مسؤولية إبلاغ مجموعة الهجرة التالية بما يجب تغييره؟

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

وبعيدًا عن المسؤولية، أعتقد أنه مستودع مركزي لهذه المعلومات.

أي.نظام يقوم بتخزين جميع إعدادات التكوين لجميع المشاريع/التطبيقات، وبناءً على "دورك" يمكنك/لا تستطيع رؤية القيم الفعلية.

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

كرر لـ UAT وفي النهاية همز.

عندما يقوم شخص ما ببناء نظام الهجرة هذا، أعلمني بذلك، لأن ذلك سيساعد الكثير من الأشخاص.

ربما سأبنيه بنفسي..من يريد التعاقد معي؟

لقد كنت جديدًا في الوظيفة، وقد تم اقتراح أن أقوم بتحديد تبعيات النظام كمهمة أولى.اتضح أن ما كان يقصده مديري هو التحدث إلى الناس - وبهذه الطريقة سأعرف من هو.اعتقدت أن مديري أراد مني أن أكتب برنامج كمبيوتر للقيام بذلك.وهكذا فعلت.كان افتراضي أنه إذا كان البرنامج عميلاً لبرنامج آخر (خدمة أو خادم)، إذن netstat -pant و netstat -panu ثم grep for ESTABLISHED سيعطيك ذلك.يمكنك التعرف على الخدمات عن طريق التقاط مخرجات الاستماع.

وهذا ليس سوى حل جزئي.نعم، فهو يخبرك بالتطبيقات التي تتحدث مع أي تطبيقات، ولكن هناك تبعيات أخرى.لذلك، على سبيل المثال، تستخدم بعض التطبيقات DNS للعثور على خوادمها، بينما يتم ترميز البعض الآخر بشكل ثابت أو في ملفات التكوين.أي شيء يستخدم TCP أو UDP يعتمد على IP.في معظم الأماكن، يعتمد IP على ARP وإما Ethernet أو WiFi.أي شيء يعتمد على خدمة موجودة على شبكة LAN أخرى يعتمد على جهاز توجيه واحد على الأقل.

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

يصبح الأمر أكثر إثارة للاهتمام لأن الخدمات (البرامج) تعتمد على الخوادم (الأجهزة).وتعتمد الخوادم بدورها على الطاقة وتكييف الهواء.

لذلك، عندما خرج تفكيري عن نطاق السيطرة، أصبحت الأمور أكثر تعقيدًا، وفكرت في إنشاء لغة خاصة بالمجال (DSL) لالتقاط كل هذه التبعيات.اعتقدت، على سبيل المثال، أن server_1 وserver_3 وserver_5 موجودون في مرحلة الطاقة 1؛server_2 وserver_4 وserver_6 موجودون في مرحلة الطاقة 2.يفشل كل من Server_1 وServer_3 وserver_5 في نفس الوقت تقريبًا:ربما فشلت المرحلة 1.ما زلت لم أحسب ذلك تماما.من الواضح أنه يمكن تمثيل الموقف من خلال رسم بياني موجه، ولم أقم بإعداد التفاصيل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top