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

نحن "عجلات | سقف | السوق "هي أكبر شركة تكنولوجيا معلومات مقرها في كازاخستان. كل يوم ، تساعد منتجاتنا ستة ملايين من الكازاخستانيين على شراء وبيع السيارات والشقق والأسرة والآلاف من الأشياء الأخرى. Kolesa.kz هي أكبر مورد للسيارات وتطبيقاتها ، وقد احتلت المركز الأول في تصنيف الهاتف المحمول لكازاخستان منذ عدة سنوات.
ما هو مشروع "قرض السيارة"؟
في الوقت الحاضر ، فإن قاعدة السيارات المستعملة هي 103،400 سيارة ، أكثر من 60٪ منها متوفرة على الائتمان!
كيف تبدو في الصور1. اختر السيارة التي نريد الحصول عليها عن طريق الائتمان

الشكل 1. نتائج البحث عن السيارات المتاحة على الائتمان
الشكل 2. شاشة صفحة الإعلان
3. حدد الفترة والدفعة الأولى وانقر للحصول على الموافقة

الشكل 3. حاسبة ائتمان للإعلان

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

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

الشكل 7. مثال على شاشة الموافقة على قرض السيارة
بعد حصول الشخص على الموافقة على طلبه ، يقوم المدير من البنك باستدعائه مرة أخرى في غضون 10 دقائق ويبلغه بالإجراءات التي يحتاج إلى اتخاذها بعد ذلك للحصول على قرض. مريحة ، أليس كذلك؟ دعونا نرى كيف تم تنفيذ كل ذلك.
هل تتذكر كيف بدأ كل شيء ...
كل شيء كان لأول مرة ومرة أخرى! إذا كان لدينا في وقت سابق نموذج ملاحظات بشكل نموذج ائتماني ، فإن فكرتنا الجديدة كانت شيئًا جديدًا تمامًا وغير مفهوم. بسبب لم يكن لدينا نظائر ، كانت أمامنا مهمة مثيرة للغاية - التخطيط والتصميم والتوزيع والتنفيذ. بادئ ذي بدء ، قسمنا العملية الكاملة لتكاملنا المشترك إلى كتلتين ، تم إجراؤهما بالتوازي ، وهما:
الشبكات
في ذلك الوقت ، بينما كان المطورون يختارون أدوات للتنفيذ ، كانوا يصممون نظامهم وينتظرون التوثيق على نظام الشريك ، كان العمل في قسم البنية التحتية على قدم وساق! كان لدي شريكي البنك اثنان: 2 cisi يقفان بجانب بعضهما البعض في DC واحد ، وكابل يربط tsiska ، ونفق VPN ، وشهادات أمان و priblude للعمل معهم من جميع الألوان والأحجام ... كانت الخطة على النحو التالي ، نقوم بإعادة توجيه قناة VPN المشفرة بين الخوادم ، وبناء تكامل مباشر بين خدماتنا. من الناحية التخطيطية ، يمكن تمثيل ذلك على النحو التالي:

لنتحدث عن الرمز
أدناه سوف نتحدث عن كيف وما يتم ترتيبه من خلال خدمتنا. لذلك ، بعد أن تلقينا مستندًا يصف خدمة الشريك جاهزة للتكامل ، علمنا أنه ، على عكسنا ، يعمل البنك فقط مع طلبات SOAP ولا يريد أن يسمع عن أي خدمات RESTful. وبما أننا نستخدم SOAP في خدماتنا بشكل أقل قليلاً من أي وقت مضى ، كان لدينا الكثير من الاكتشافات الرائعة حول كيفية تعلم كيفية إعداد SOAP في منتجنا الجديد. لذلك ، نحن بحاجة إلى تعليم خدمتنا لتحليل طلبات SOAP وتحويل ردودنا إلى SOAP.
اختيار الإطار
بالنسبة للمبتدئين ، كان عليك اختيار لغة تنفيذ على الأقل ، كان هناك الكثير من الأفكار ، بدءًا من C و C # التي تنتهي بـ golang و erlang. قررنا اتباع مسار بسيط. سيحتاج النظام إلى الدعم ، ولكي لا نواجه عامل الحافلة مع نقص المتخصصين في السوق ، قررنا التركيز على أكثر التقنيات شيوعًا في شركتنا - PHP. الحمد لله أنه خارج النافذة لم يكن عام 2001 ، ولكن عام 2017 وهناك العديد من أطر عمل php بحيث يمكنهم تلبية احتياجات حتى المهندسين المتطورين للغاية. بعد المرور بمجموعة كاملة ، اخترنا واحدة من أبسط وأيد في نفس الوقت - يي 2.
لهذا القرار كان:
- من السهل إتقانها ، مجموعة كاملة من الأدب.
- من السهل إنشاء النماذج والمصادقين ؛
- يوجد سجل نشط وسيارة جاهزة للعمل مع جميع أنواع الأدوات ؛
- إنه سريع حقًا.
- بناءً على ذلك ، تم إنشاء واجهة برمجة تطبيقات ببساطة ، وهي ملائمة لكتابة أوامر وحدة التحكم.
ضد كان:
- تم بناء الإطار على طرق ثابتة - وهذا غير مريح للغاية ، بما في ذلك عند كتابة الاختبارات
- لم يكن من الواضح ما هي الأدوات الإضافية التي قد نحتاجها في المستقبل القريب بعد الإطلاق ، ونتيجة لذلك ، كان هناك خطر من عدم العثور على المكتبات اللازمة ...
اختيار التخزين
تم اختيار إطار العمل ، والآن حان الوقت لاختيار مستودع للتطبيقات. كانت هناك عدة خيارات ، MySQL ، mongoDB ، postgreSQL ... من ناحية ، التطبيق عبارة عن مستند ، على الأرجح يمكن أن يتغير هيكله ، من وقت لآخر تكمله حقول جديدة والتخلص من الحقول غير ذات الصلة. من ناحية أخرى ، سيفرض استخدام قواعد البيانات غير العلائقية حدودها. بعد وزن كل الإيجابيات والسلبيات ، قررنا الجلوس على كرسيين واستخدام MySQL للإطلاق ، وبعد الإطلاق ينتقل إلى مجموعة من mongoDB + ElasticSearch. ونتيجة لذلك ، تم رفع نسختين متماثلتين من MySQL كمخزن وتم تثبيتهما في التطبيق باستخدام ActiveRecord. في الوقت الذي بدأنا فيه الانتقال إلى mongoDB ، زادت كمية البيانات كثيرًا وأخذت معدل نمو كبير لدرجة أن هناك حاجة أخرى لتقسيم التطبيقات إلى مستودعات مشروطة. كأداة لفهرسة المستندات في الوقت الفعلي تقريبًا ، قررت ElasticSearch استخدام خدمة مكتوبة بلغة Golang - monstache.
بناء البنية التحتية
قررنا القيام بالبنية التحتية التالية: 10 خلفيات مع التطبيق من قبل معالج التطبيق ، 2 موازن ، 2 نسخ طبق الأصل MySQL ، 3 شظايا elasticsearch ، 3 نسخ طبق الأصل mongoDB و 2 نسخة طبق الأصل من خدمة monstache. 
العملية
بشكل عام ، يمكن تقسيم عملية قرض السيارة إلى قسمين:
- للبدء ، تحتاج إلى العثور على سيارة مناسبة ، متوفرة على الائتمان. على الأرجح سوف تسترشد بحالتها وشروط القرض.
- بعد اختيار سيارة ، تحتاج إلى الحصول على موافقة على القرض ، لذلك ستحتاج إلى ملء طلب
حول تنفيذ الجزء الثاني ، لقد وصفنا أعلاه تقريبًا ، دعنا نتحدث عن تنفيذ الجزء الأول. يتكون تنفيذ الجزء الأول من عدة أجزاء فرعية:
- عند البحث عن سيارة ، يجب أن يكون الشخص قادرًا على التركيز ، بالإضافة إلى المعلمات التقنية ، على توفر سيارة للشراء عن طريق الائتمان وعلى الحد الأدنى لمبلغ الدفع الشهري. للقيام بذلك ، نحتاج إلى معرفة وقت الإعلان عن أن السيارة متاحة على الائتمان وما هو الحد الأدنى للدفع مقابلها.
- بعد أن يختار الشخص سيارة ، نحتاج إلى تزويده بآلة حاسبة للقرض ، حيث يمكنه اختيار حجم الدفعة الأولى ومدة القرض ، وبالتالي اختيار مبلغ الدفع الشهري الأكثر راحة.
لهذا الغرض ، تم تطوير خدمة مايكرو خاصة في لغة الذهاب. كان جوهرها على النحو التالي: عندما يتم إرسال إعلان إلى الخدمات المصغرة ، يتم إرسال كائن يحتوي على جميع البيانات المتعلقة بالسيارة ، وتقوم الخدمة المصغرة ، استنادًا إلى القواعد المكتوبة بشكل منفصل لها ، بإرجاع الحد الأدنى للدفعة الشهرية للفهرسة في البحث ، وإرجاع الحد الأدنى للدفعة المقدمة والمواعيد النهائية المقبولة الإقراض ، وهي الأساس لبناء حاسبة القروض.

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

بسبب الحمل الكبير على خدمتنا ، فإن حاسبة القروض لديها درجتين من التخزين المؤقت: تتم الأولى على الواجهة الخلفية ، حيث يذهب العملاء في البداية إلى الآلة الحاسبة ، والثانية في الخدمة الصغيرة نفسها.
إذن ما هو الحد الأدنى؟
أطلقنا المشروع في 11 سبتمبر 2017. منذ تلك اللحظة وحتى الآن (4 ديسمبر 2018) ، تم تقديم 2،973،868 طلبًا. نحن في عملية مستمرة لتحسين خدمتنا وتبسيط رحلة المستخدم. نجعلها أسهل وأكثر استقرارًا! كان وقت تشغيل المشروع لكامل الفترة منذ الإطلاق 99.99٪.
نتيجة لذلك ، لدينا النتائج التالية:
- تم تقليل مسار المستخدم بشكل كبير
- قمنا بتوسيع حجم السيارات المتاحة للإقراض إلى 60 ٪ من القاعدة بأكملها
- حتى الآن ، زاد عدد الطلبات بأكثر من 7 مرات!
بدلا من الاستنتاج
تمكنا في 3 أشهر من بناء مشروع مدهش وفريد حقًا. كان هدفها الرئيسي هو منح عملائنا الفرصة لشراء السيارات المستعملة دون مغادرة منصتنا. في دقيقة واحدة فقط ، يمكن للمستخدم الحصول على قرار بشأن طلبه ، والاتصال بالبائع ، ووضع جميع المستندات اللازمة في نفس اليوم.
بناءً على عدد الطلبات للسنة والشهرين ، يمكننا أن نستنتج أننا قادرون على جعل الخدمة مريحة حقًا وفي الطلب.