مساء الخير تحسبا لبدء دورة
"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".