مرحباً ، اسمي بافيل سافيليف ، أنا رئيس قسم أتمتة العمليات التجارية في لامودا. نحن نعمل مع مهام مختلفة للغاية ، ونحاول اختيار الأدوات الأكثر ملاءمة لكل منها. وفقًا لذلك ، نستخدم لغات مختلفة - في أنظمتنا ، يمكنك العثور على Java و Go و Kotlin قليلاً لنظام Android. في الوقت نفسه ، يتم إجراء جزء كبير من التطوير في PHP ؛ تتم كتابة أكثر من عشرين خدمة على أنه لا يعمل فقط مع الطلبات ، ولكن أيضًا العمليات التشغيلية لشبكة تسليم واسعة ومراكز الاتصال في ثلاثة بلدان واستوديو الصور الخاص بنا ، فضلاً عن توفير كل هذا في النموذج خدمات لشركائنا B2B. يتم دعم وتطوير هذه الخدمات بواسطة 5 فرق تطوير تابعة لقسمنا.

مع تطور الخدمات نفسها والبنية التحتية من حولها ، تظهر مهام مماثلة في كثير من الأحيان في هذه الأنظمة ، مثل تسجيل الدخول إلى CLS (نظام التسجيل المركزي المشترك) واختبار تخزين الملفات وجمع المقاييس لـ Prometheus وغيرها. نحاول توحيد الطرق لحل مثل هذه المشكلات واستخدام المكونات المشتركة للأنظمة المختلفة.
عندما يواجه أحد الفرق تكييف أو دمج خدمة / أداة جديدة قد تصبح مشتركة بين الجميع ، فإننا نبدأ تطوير المكتبة في هذا الفريق. وبعد ذلك ، يتم إعداد المكون النهائي لإعادة الاستخدام في المستقبل ووضعه في المجال العام.
لذلك ، تجري مثل هذه العملية بشكل منتظم معنا ، أنشأنا إرشادات تتيح لنا إجراء هذه العملية دون أي ألم - سأحاول الإبلاغ عن ذلك في أحد المؤتمرات القادمة.
أكثر من عشرين مكتبة من مكتبات PHP الخاصة بنا أصبحت متاحة للجمهور على GitHub. ونحن نخطط لمزيد من الانتشار. لماذا؟ حسنًا ، لقد استثمرنا الكثير من الموارد (وأريد أن أؤمن) كان أداءً جيدًا. ونأمل أن يستخدم مطورو البرامج الأخرى مكتباتنا ، ويساعدونهم على الانتهاء والتطور أكثر ، بدلاً من قضاء الوقت في كتابة نظائرهم من الصفر. في هذه المقالة ، أود التحدث بإيجاز عن سبع مكتبات مصممة لحل المهام الشائعة لمهام التجارة الإلكترونية - سأكون سعيدًا إذا كانت مفيدة لك ، وسأكون أكثر سعادة لتطويرها بشكل مشترك :)
1. التقييم المالي عبر الإنترنت: عميل لـ ATOL Online
مثل الشركات الروسية الأخرى ، نحن ملتزمون بالامتثال التام لمتطلبات FZ-54 ، واحدة منها هي الضبط المالي على الإنترنت. يتم دائمًا تقييم جميع الطلبات المدفوعة مسبقًا على
lamoda.ru : فهي تنشئ شيكات عبر الإنترنت يتم إرسالها إلى العملاء. تعمل خدمة التخصيص لدينا من خلال API مع نظام
ATOL Online ، والمكتبة الأولى في قائمتنا هي عميل متكامل لهذه الخدمة. بالإضافة إلى المكتبة نفسها ، قمنا أيضًا بنشر
حزمة ، يمكنك من خلالها توصيلها بسهولة بأي مشاريع تعتمد على Symfony Framework. يمكن تضمين المكتبة نفسها في أي إطار PHP آخر: Laravel ، Yii ، وما إلى ذلك - ما عليك سوى كتابة "غلاف" للمكتبة.
2. المدفوعات المدفوعة مسبقا: التفاعل مع Payture
لمعالجة الدفعات المدفوعة مسبقًا ، نتفاعل بنشاط مع خدمة Payture. هذه الخدمة لديها العديد من واجهات البرنامج. نستخدم
خيار Payture InPay وقد كتبنا
عميل API الخاص بنا من أجله. تتيح لك المكتبة التعامل مع محطات متعددة ، ويدعم تسجيل PSR-3 القياسي. من الممكن أيضًا استخدام عميل Guzzle الذي تم تكوينه مسبقًا - وهذا يجعل من السهل تنظيم الاختبار باستخدام
Guzzle Mock Handler .
توفر حزمة
المكتبة الخاصة بنا تكوينًا دلاليًا للأجهزة الطرفية وتتيح لك تكوين إعدادات العميل بسهولة (مهل فقط حتى الآن) لعمليات API المختلفة.
3. وسم المنتج: محلل كود GS1 Datamatrix
أحد أهم المشاريع لعام 2019 في شركتنا هو دعم وضع العلامات الحكومية على البضائع. كجزء من هذا المشروع ، سيتم تطبيق رموز فريدة خاصة على جميع منتجات فئات معينة - بتنسيق GS1 Datamatrix. ستسمح هذه الرموز لأي مشتر بالتحقق من صحة البضائع وأصلها وتاريخها. لكي تعمل الأنظمة الداخلية Lamoda مع هذه الرموز الشريطية ، قمنا بتطوير
مكتبة للتحليل الصحيح لرموز GS1.
في المستقبل القريب ، نخطط أيضًا لوضع رموز مصدر لعملائنا المطورين للتفاعل مع نظام معلومات الوسم والتتبع (IP MP).
4. إدارة Microservice: الوسيطة للحافلة فريق Tactician
لدينا أكثر من مئة خدمة ميكروية تقوم بالعديد من العمليات المنفصلة: فهي تتحقق من حالة المدفوعات أو الملفات الجديدة في المستودعات ، وترسل أوامر التحكم إلى الصرافين ، وتنزيل ومعالجة الصور من الخدمات الخارجية. يتم تنفيذ جميع هذه العمليات تقريبًا في الخلفية ، ونمط ناقل الأوامر ممتاز لإدارة هذه العمليات. لتنفيذ الحافلة في أنظمة PHP ، اخترنا حلاً جاهزًا - مكتبة
Tactician المفتوحة.
ومع ذلك ، نشأت مشكلة: غالبًا ما تتفاعل فرق الخلفية لدينا مع الخدمات الخارجية ، التي لها حد أقصى لعدد العمليات في ثوانٍ. وليس لدى Tactician القدرة على التحكم في عدد الأوامر القابلة للتنفيذ في نافذة زمنية محددة. لذلك ، قمنا بتطوير مكتبة إضافية -
الحد الأقصى لسعر التكتيك . من خلال مساعدتها ، يمكنك إضافة طبقة معالجة جديدة تتعقب عدد الأوامر المنفذة على الحافلة وفقًا لاستراتيجية تحديد السعر المحددة. الاستراتيجيات قابلة للتوصيل ، والإستراتيجيات من مكتبة
بريفيل متاحة من خارج
الصندوق .
يوجد أيضًا في المجال العام
باقة Symfony الخاصة بنا إلى المكتبة.
5. جمع وتقديم المقاييس لبروميثيوس
تُنشئ خدماتنا المصغرة مقاييس تقنية وتجارية ، يتم جمعها بعد ذلك من خلال مشغل Prometheus من مجموعة k8s بأكملها. لإدارة كل هذا ، كتبنا
مكتبة تعالج المقاييس المخصصة وفقًا لسيناريو "تجميع الحفظ". في الوقت نفسه ، تدعم المكتبة أوضاع التشغيل التي يمكن فيها حذف أحد عناصر البرنامج النصي لزيادة الكفاءة. على سبيل المثال ، بالنسبة للمقاييس الحسابية سريعة ، قد يتم تنفيذ سيناريو مبسط "تجميع". والعمل مع مقاييس العمل البطيئة يمكن أن يترجم جزئيًا إلى الخلفية ، بينما ينقسم إلى مرحلتين: "جمع - إنقاذ" + "جمع (من التخزين) - عرض".
تحتوي المكتبة على مستويات التجريد اللازمة لكتابة المولدات المترية وكتابة مستودعات. يوجد خارج الصندوق محول تجريبي للعقيدة ، والذي يمكن تهيئته على الكيان لحفظ البيانات في قاعدة البيانات.
نظرًا لأن تنسيقات التقديم المترية ، يتم دعم بروميثيوس و telegraf httpjson حاليًا.
تأتي المكتبة مع حزمة Symfony ، والتي توفر التكوين الدلالي للمصادر المترية والمستودعات ومقاييس التوجيه. كما أن لديها أوامر مساعد لتصحيح الأخطاء وحفظ المقاييس من المصادر (على سبيل المثال ، لحساب مقاييس cron).
6. اختبار تخزين الملفات: العمل مع أنظمة الملفات المختلفة
لأتمتة الاختبار ، نستخدم إطار
Codeception ، الذي يسمح لنا بكتابة اختبارات على مختلف المستويات ولديها مكتبة واسعة إلى حد ما من الوحدات النمطية القياسية. لقد كتبنا المزيد عن أساليبنا لاختبار التطور مؤخرًا في
مقال منفصل وتحدثنا في مؤتمر
PHP Russia . يحتوي Codeception على وحدات جاهزة للتفاعل مع FTP ونظام FileSystem المحلي ، ولكن في اختباراتنا هناك حاجة للعمل مع المزيد من أنظمة الملفات. كحد أدنى ، نستخدم أيضًا AWS S3 و Webdav. بالإضافة إلى ذلك ، أود التفاعل مع جميع أنظمة الملفات باستخدام نفس واجهة برمجة التطبيقات (هذا هو كل أنظمة الملفات :)).
لحسن الحظ ، هناك مكتبة
FlySystem مفتوحة توفر واجهة برنامج واحدة للعمل مع أنظمة الملفات المختلفة. لذلك نحن بحاجة فقط إلى الجمع بين الأدوات - وهو ما فعلناه من خلال كتابة غلاف عبر FlySystem
كوحدة نمطية Codeception-flysystem . الآن يدعم SFTP ، S3 و Webdav. يكفي تكوين الإعدادات مرة واحدة للاتصال بنظام الملفات المطلوب في تهيئة اختبار yml ، وبعد ذلك يمكنك العمل مع جميع أنظمة الملفات باستخدام نفس مجموعة الطرق: كتابة الملف ، نسخ الملف ، تنظيف الدليل ، إلخ. تم تضمين الوحدة بالفعل في صفحة الإضافات والتوصيات من Codeception:
codeception.com/addons .
7. العمل مع متغيرات البيئة في وضع المستأجر متعددة
في قسم أتمتة العمليات التجارية ، هناك أنظمة تعمل في وضع مستأجر متعدد. لضمان عملهم ، من الضروري أن تكون قادرًا على العمل مع متغيرات البيئة - لتحديد المتغير الذي سيتم استخدامه في الوقت الحالي.
توفر
مكتبتنا العديد من الاستراتيجيات للعمل مع متغيرات البيئة في وضع المستأجر المتعدد. بناءً على المعلمات التي تم تمريرها في مرحلة التهيئة ، تحدد المكتبة متغير البيئة الذي يجب الوصول إليه في الطلب الحالي.
أن تستمر
هذا ليس سوى الجزء الأول من المكتبات. لدينا أكثر من عشرة أشخاص في الداخل - إنهم ينتظرون في الطابور عندما "نمشطهم" قليلاً ونضعهم في المجال العام. إنه يحفزني على فهم أن هذه المكتبات قد تكون مفيدة لشخص آخر. أفرح بالتعليقات والنجوم على جيثب ، وآمل أن أواصل تطوير المكتبات مع مطورين آخرين. في الواقع ، تعمل العديد من مشاريع التجارة الإلكترونية الروسية مع ATOL و Payture. بالنسبة إلى Datamatrix ، بالإضافة إلى محلل الأكواد الموضح في المقالة ، لدينا أيضًا عميلان نستخدمهما داخليًا بالفعل - هذه المكتبات هي الأولى في قائمة الانتظار على GitHub.
نحاول ألا ننسى اللغات الأخرى - لقد نشرنا بالفعل أول مكتبة في Go (
كتبنا المزيد عنها
هنا على Habré ) ونحن نعد لغات أخرى. ترقبوا!