فتح ندوة عبر الإنترنت "تطوير أنظمة محملة للغاية في PHP"

مساء الخير تحسبا لبدء دورة "Backend PHP Developer" ، عقدنا تقليديا درسا مفتوحا. تحدثوا عن أنظمة محملة للغاية ، والتدرج ، والهندسة المعمارية. درسنا بالتفصيل HighLoad ، وكذلك النهج والتكتيكات الرئيسية في تطوير أنظمة محملة للغاية.

تم تحديد الأهداف التالية:

  • مناقشة ماهية بنية النظام وسبب الحاجة إليها ؛
  • مناقشة ما هو تحميل عالية ؛
  • النظر في التكتيكات المعمارية ؛
  • ناقش الدورة

محاضر - إيغور ساخانكوف ، مطور في Booking.com.


العمارة


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



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

تخيل الآن أنه قد طُلب منك إنشاء بيت للطيور أو بيت للكلاب. بالطبع ، معظمنا سيتعامل مع هذه المهمة. وإذا طلب منك صنع ناطحة سحاب؟

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

من الناحية الأكاديمية ، فإن بنية نظم المعلومات هي مفهوم يحدد نموذج مكونات الملكية الفكرية وهيكلها ووظائفها وترابطها.

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



وبالتالي ، فإن الهندسة المعمارية:

  • يساعد على توفير متطلبات النظام غير الوظيفية
  • إنها وسيلة للتواصل بين أصحاب المصلحة ؛
  • يحسن التكاليف ، ويقلل من تكلفة النظم الكبيرة ؛
  • يسمح لك بإعادة استخدام الأنماط المعمارية ، مع مراعاة التجربة السابقة ، وعدم تكرار الأخطاء السابقة

حمولة عالية


مفهوم الحمل العالي في حد ذاته نسبي للغاية ، ولا يوجد تعريف ثابت. ومع ذلك ، من الآمن القول أن هذه اللحظة تأتي عندما تتوقف البنية الأساسية الحالية عن التعامل مع هذا العبء. وهذا يعني أن الوقت قد حان للقيام بالتدريج. يحدث ذلك:

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

التكتيكات المعمارية


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

المزايا:

  • ضعف اتصال العميل والخادم ؛
  • حالة المهمة معروفة.
  • التكوين على الطاير.
  • تحميل موازنة.

العيوب:

  • كيان إضافي في النظام ؛
  • معالجة مهمة أكثر تعقيدًا ؛
  • فقدان / تكرار الرسائل.

الآن دعنا نتحدث عن ما يمكنك القيام به مع المستودع . يشير التخزين إلى أي نظام تخزين ، مثل قواعد البيانات العلائقية. لذلك ، لدينا الخيارات التالية لحل مشاكل التخزين:

1. النسخ المتماثل.



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

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

CREATE TABLE my_table (id INT, amount DECIMAL(7,2), some_date DATE) ENGINE=INNODB PARTITION BY HASH( MONTH(some_date) ) PARTITIONS 6; 

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

 $users = new PDO("pgsql:db_name=my_db;host=192.168.1.1", "user", "password"); $photos = new PDO("pgsql:db_name=my_db;host=192.168.1.2", "user", "password"); $users->prepare('SELECT * FROM users ...'); $photos->prepare('SELECT * FROM photos ...'); 

يتم تنفيذ الطريقة بسهولة وقياس الحمل جيدًا. لكن له أيضًا عيوبًا موصوفة بمزيد من التفصيل في الفيديو.

4. أفقي تقاسم . هنا ، كل قشرة تقع على جهاز منفصل.



وصفة

ستساعدك النقاط التالية في إنشاء نظام قابل للتحجيم:

  • تبسيط على مستوى المتطلبات!
  • لا تعقد القرار
  • حاول أن تكون بلا جنسية ،
  • مخبأ
  • رصد + تنبيه ،
  • أن تكون مختصة.

أيها الزملاء ، لقد جاء سرد الرواية موجزة إلى حد ما ، لذلك من الأفضل مشاهدة الندوة الكاملة على الويب. أيضا ، لا تفوت اليوم المفتوح لدورة "Backend PHP Developer".

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


All Articles