Tout simplement, BPA est un tel réseau centralisé qui combine un service de livraison, un immense entrepôt et un système de gestion des commandes, avec le développement et l'intégration avec des partenaires. Tout cela est lié aux rapports et aux analyses. Nous concevons et écrivons tous les services pour l'interaction de ces systèmes et la fourniture de services similaires à des partenaires.
Notre service informatique rencontre le monde réel : il est facile de définir un intervalle de livraison de 15 minutes dans un système informatique, mais il est assez difficile de s'assurer que des milliers de commerciaux à Moscou viennent à l'adresse exactement pendant cet intervalle. La tâche principale de notre département est de relier les affaires et la technologie. Le département BPA lui-même est désormais dans trois domaines: la livraison, l'entrepôt et la fonction commerciale, qui comprend l'interaction avec le B2B et le marché. Et tout ce que nous utilisons nous-mêmes et vendons à l'extérieur est vraiment cool: nos fonctionnalités rapportent de l'argent, gagnent du temps et offrent un service de qualité à nos clients.
5 langues et 2 millions de lignes de code
Le BPA est un ensemble de systèmes intégrés les uns aux autres et aux autres systèmes Lamoda. Pour leur développement, nous utilisons PHP, Java, Kotlin, il y a un peu Go et Typescript - il y a 5 langages sur notre radar technique. Nous écrivons tous les systèmes pour les tâches de notre entreprise. Maintenant, c'est 2 millions de lignes de code, 25 services et plus d'une centaine de bibliothèques réutilisables.
Le langage principal est PHP, et plusieurs autres grands services sont écrits en Java et Kotlin. Pourquoi PHP? Premièrement, il implémente un système de traitement des commandes - un monolithe, que nous scions en microservices depuis de nombreuses années, et deuxièmement, nous travaillons très bien avec PHP: nous y écrivons rapidement, nous le servons bien, nous l'avons réglé avec un tas de bibliothèques... Cette approche nous permet de lancer de nouveaux services avec toutes les connexions d'infrastructure: avec tous les logs et la surveillance, en quelques jours seulement. Nous pouvons utiliser à la fois Go et Kotlin comme dans un entrepôt. Nous n'utilisons pas de technologies en double, et tout le reste n'est pas interdit, tant que cela fonctionne.
Dans les processus métier, la logique et la réflexion de chaque étape sont importantes. Pour qu'il n'arrive pas que votre commande soit passée de l'entrepôt à Vladivostok, une plaque inattendue est soudainement apparue dans le système et ne vous a pas été donnée.
Nous devons couvrir chaque étape avec des tests, car la stabilité et l'exactitude de l'exécution de la logique du système sont essentielles. De plus, nos partenaires utilisent également nos processus commerciaux. Par conséquent, la priorité de l'entreprise est la stabilité, malgré le fait que la rapidité de lancement de nouveaux services est également importante pour les entreprises. Pour assurer la stabilité, nous investissons du temps dans la conception de services et de tests autour d'eux. Cela nous donne la possibilité de développer le système sans risquer de tout casser.
Il y a même du sarrasin!
Je suis Anton Dmitrienko, responsable technique des systèmes de gestion du centre de distribution WMS - Lamoda ou, plus simplement, de l'entrepôt.
Mes principales tâches sont de parler le même langage avec les entreprises, de développer un modèle de domaine et de préparer le système aux changements. Pour ce faire, vous devez comprendre où se trouvent nos «points chauds». Il y a des processus qui s'alignent une fois tous les trois ans, et il y a ceux qui changent tous les trois mois - ce sont des «points chauds». Ils sont importants à prendre en compte lors de la conception d'un système.
Maintenant, j'ai quatre équipes - 18 personnes qui sont engagées dans la création, les tests et le support du système. Nous accélérons tous les processus opérationnels et commerciaux de l'entrepôt: sans nous avec les volumes actuels de l'activité de Lamoda, l'expédition d'une commande client prendrait beaucoup de temps, notre participation réduit le temps de traitement de toute commande à 4 heures.
L'échelle est bien sûr très grande: l'entrepôt de Lamoda fait environ 40 mille mètres carrés ou plusieurs terrains de football sur 5 étages, où 10 millions de marchandises sont stockées. Il fonctionne 24 heures sur 24, 364 jours par an, avec un jour de congé une fois par an - le 1er janvier. Et chaque jour, plus de 500 employés partent pour un quart de travail et, grâce à notre système, 200 000 marchandises sont expédiées et reçues. De plus, un réseau de convoyeurs et d'équipements mécanisés est déployé à l'intérieur de l'entrepôt, qui sont conçus pour transporter des marchandises, emballer des colis, regrouper physiquement les commandes clients, trier les colis par sens d'expédition, nous les gérons également.
Lamoda vend à ses clients toutes sortes de produits, des parapluies et valises surdimensionnés aux petites montres et bijoux. Tout cela est stocké et traité dans notre entrepôt. Chaque catégorie a ses propres caractéristiques. Par exemple, les produits surdimensionnés ne peuvent pas être traités sur des équipements automatisés, les bijoux sont stockés et traités avec des mesures de sécurité supplémentaires, et les cosmétiques, les parfums, par exemple, nécessitent certaines conditions de stockage à température et un contrôle de la durée de conservation des produits.
Nous avons récemment eu un projet appelé "Buckwheat". Depuis l'introduction du régime d'auto-isolement, Lamoda a ajouté à sa gamme des aliments de longue durée populaires. En passant, nous avons implémenté cette fonctionnalité en quelques jours seulement. Bien sûr, l'assortiment principal est constitué de vêtements et de chaussures, le travail avec lequel il y a aussi quelques nuances: pour la vente de produits, il est nécessaire de préparer et de vérifier leur qualité: ce sera mauvais si, par exemple, nous apportons une chemise sans boutons au client.
Lamoda n'est pas seulement une boutique en ligne, mais une plate-forme de commerce électronique à part entière qui fournit son infrastructure et ses services (y compris un entrepôt) à des partenaires externes. Par exemple, les grandes marques de mode internationales stockent leurs produits chez nous. Quelle différence cela fait? Les robes, manteaux et chaussures des partenaires sont les mêmes que ceux qui sont déjà dans notre entrepôt. Mais nous avons tous des exigences individuelles pour les processus que nous sommes obligés de respecter en vertu de contrats, par exemple, certaines des marchandises de gros clients sont stockées dans des zones séparées et les produits du marché sont situés dans tout le stock. Ces caractéristiques doivent également être prises en compte.
Nous contrôlons et traitons chaque produit à chaque étape du processus en tenant compte des spécificités non seulement dans le monde physique, mais également dans le système informatique. De plus, le système informatique lui-même invite le magasinier à gérer un produit spécifique, car l'opérateur ne peut pas connaître toutes les caractéristiques ou tous les accords: le produit ne dit pas à qui il appartient: une grande entreprise internationale ou un petit partenaire de marché.
La principale caractéristique du système est l'interaction via des scanners et des codes-barres: chaque produit a un code-barres unique, qui peut être lu pour obtenir toutes les informations nécessaires sur le produit. Cette approche minimise les erreurs et vous permet d'effectuer toutes les actions avec le produit plus rapidement, réduisant ainsi le nombre d'employés. Si nous expédions 200 000 marchandises par jour, 1 seconde économisée sur un produit équivaut à 55 heures de travail. Pour les entreprises, c'est tangible.
Sous le capot de l'entrepôt
Nos technologies:
Java 8,
PostgreSQL,
Wildfly,
Spring,
Redis,
ActiveMQ,
Hibernate.
Nous avons commencé avec une solution toute faite en Java, mais depuis lors, les fonctionnalités du système se sont considérablement étendues et le code a déjà été complètement refacturé et réécrit plusieurs fois.
Maintenant, nous avons 350 000 lignes de code - et ce n'est que le backend de l'application principale, et il y a aussi 5 services secondaires et 2 interfaces utilisateur: un client Web léger et une application native mobile. Nous faisons du développement full-stack.
Les employés de l'entrepôt utilisent le client mobile. Ils se déplacent dans l'entrepôt à l'aide de notre propre application Android.Il s'agit d'une technologie plus moderne et pratique qui vous permet d'utiliser les fonctionnalités de l'appareil lui-même: vibrations, sons pour les erreurs et la batterie est moins dépensée si l'application est native et non basée sur un navigateur. L'application elle-même est écrite en Kotlin, nous avons une bonne expérience de son utilisation. Nous avons même commencé à écrire un backend dessus: pour l'instant, ce n'est qu'un service, mais nous aimons que le code soit plus simple et plus expressif qu'en Java, et les performances sont les mêmes. Nous n'avons pas pour objectif de tout réécrire dans Kotlin, mais nous continuerons à l'utiliser pour des tâches appropriées.
L'interaction avec d'autres systèmes Lamoda est construite via un bus de données écrit en Apache Camel à l'aide du courtier de messages ActiveMQ. Cette approche offre une livraison garantie et une transformation relativement simple des messages pour différents formats, la possibilité de distribuer des messages à plusieurs consommateurs. Nous avons été les premiers à utiliser Apache Camel en 2014, puis cette méthode d'intégration a été adoptée par d'autres équipes de notre département.
Les principes de la construction de systèmes d'entrepôt:
· fiabilité et qualité
· extensibilité et flexibilité
· simplicité
L'entrepôt est au cœur des processus logistiques de Lamoda, et les erreurs et les temps d'arrêt du système ont un impact significatif sur l'entreprise. Par conséquent, nous accordons une attention particulière à la stabilité et à la tolérance aux pannes du système. La fiabilité est obtenue en dupliquant les éléments critiques du système et de l'infrastructure. Nous avons deux serveurs indépendants qui sont découpés en machines virtuelles. Chaque application est déployée sur deux instances, chaque instance sur sa propre machine virtuelle. Le client interagit avec le serveur via un équilibreur sous la forme d'Haproxy, qui achemine les requêtes vers l'une des instances. La base de données est également sauvegardée à l'aide du schéma de réplication maître-esclave.
Tous nos serveurs sont physiquement situés directement dans l'entrepôt, ce qui augmente également la fiabilité et la vitesse de travail grâce à l'interaction de tous les éléments du système sur le réseau local. Même si l'Internet externe tombe en panne, nous continuerons à travailler et en cas de panne de courant, nous avons des alimentations sans interruption et des générateurs à essence directement dans l'entrepôt.
Pour minimiser le nombre d'erreurs dans le code, nous écrivons des tests automatisés: unité, intégration, acceptation, charge, et l'équipe de test vérifie tout à la main. Tout cela est une pratique obligatoire et est intégré au cycle de vie de la tâche, parfois, bien sûr, des bogues apparaissent, mais nous n'avons pas eu de restauration complète des versions depuis plusieurs années.
Extensibilité et flexibilité - pour nous, il s'agit avant tout de savoir combien d'efforts et de temps nous consacrerons à modifier le système afin de répondre aux nouvelles exigences des processus métier. Par conséquent, le développement offre la possibilité de modifier rapidement et facilement le code à l'avenir. Par exemple, toute catégorie de marchandises peut être configurée pour un emplacement de stockage physique spécifique, ce qui vous permet de connecter rapidement de nouvelles catégories de marchandises à vendre. Pour chaque commande, il est configuré dans quel matériau il sera emballé et quels documents d'accompagnement seront imprimés pour cela. Et ce n'est qu'une petite partie des fonctions.
Nous avons un domaine complexe avec un grand nombre de processus d'affaires et un modèle de domaine ramifié. Plus le code est simple, mieux c'est, car il augmente sa lisibilité, sa compréhensibilité et réduit le risque d'erreurs. Et cela vous permet de vous concentrer davantage sur la fonction que le code remplit pour l'entreprise.
Assurance erreur
Je m'appelle Denis Plisko et je suis le responsable du développement des services de livraison chez BPA.
Nous avons créé, développé et maintenu le système informatique LM Express. Il sert à automatiser le travail des entrepôts de transit, des commerciaux et des points d'émission des commandes. Notre système sait tout sur l'arrivée et le départ des livraisons, s'occupe de leur traitement, vend et émet les commandes déjà payées, accepte les retours et de nombreux autres processus commerciaux connexes. En outre, nous enregistrons et analysons les actions physiques de nos représentants commerciaux et des employés d'entrepôt - nous suivons tout ce qui se passe sur le «dernier kilomètre» avant que les marchandises ne soient remises à l'acheteur. La plupart des processus techniques qui se trouvent sous la forme d'information dans le système Express reflètent les actions physiques d'un employé du service de livraison.
À quoi cela ressemble-t-il? Par exemple, un employé accepte une livraison, en sort une palette - une boîte contenant des colis avec des marchandises, sort des colis, les trie dans des étagères: chaque action qu'il fait est accompagnée d'une opération dans notre système. Et c'est là que des erreurs peuvent survenir: vous ne pouvez jamais être sûr que même si le livreur a «cliqué» sur tout correctement, il en est ainsi. En conséquence, l'un des éléments les plus importants de notre logique de processus est l'avertissement et la correction des erreurs: parfois cela peut être fait automatiquement, parfois par le biais de la personne elle-même, parfois par le biais du helpdesk ou d'utilisateurs qui ont des droits plus avancés. Sans ces fonctionnalités, nos systèmes seraient 5 fois plus petits.
Les principes de la construction de systèmes de livraison:
· stabilité et disponibilité des systèmes
· cohérence des données
· indépendance vis-à-vis des systèmes et services externes
La tâche est d'assurer le fonctionnement le plus stable des systèmes, car le fait que les gens reçoivent leurs achats à temps ou non en dépend directement. Lors de la mise en œuvre de toute fonctionnalité, nous essayons d'être indépendants des services et systèmes externes, pour cela, de nombreuses interactions sont dupliquées. Supposons qu'une livraison soit arrivée et qu'il n'y ait pas de données de commande pour cela, nous demanderons ces informations nous-mêmes afin de ne pas interrompre le travail. Il est également important de rendre de nombreuses opérations idempotentes afin de maintenir la cohérence des données nécessaire, notamment dans les échanges avec d'autres services.
De plus, nous nous efforçons de recevoir toutes les données nécessaires le plus tôt possible afin qu'il ne s'avère pas qu'une personne est venue chercher les marchandises et ne peut pas les recevoir en raison d'une défaillance du système. Nous nous efforçons de rendre les parties internes du système extrêmement fiables afin que l'interaction de l'utilisateur avec elles ne dépende que de nos propres services. Ainsi, même si tous les systèmes Lamoda deviennent temporairement indisponibles, le travail des entrepôts et des points de collecte ne s'arrêtera pas et les opérations principales se poursuivront.
Dans les rues courriers, courriers
En plus de sa propre livraison, Lamoda coopère avec des services de messagerie tiers, par exemple, Russian Post, Pony Express, DPD et autres. Cela se produit lorsque dans une ville, une région ou un pays (par exemple, en Ukraine), notre livraison n'est possible que par l'intermédiaire de partenaires. Nous assurons l'échange d'informations via l'interaction avec leurs systèmes informatiques.
Connecter chaque nouveau coursier est une aventure passionnante, car les API sont très différentes pour chacun et ne sont pas toujours adaptées pour l'intégration. C'est parce que certains des services de messagerie sont des entreprises historiquement hors ligne. Ils expédient depuis l'époque de la paperasse, et écrire une bonne API n'est pas une tâche facile.
Nous utilisons un système spécial basé sur le framework ESB Apache Camel pour implémenter l'intégration avec le nouveau partenaire. L'utilisation de Camel facilite l'exécution d'une grande variété de transformations et d'interactions de données sur différents protocoles d'échange. En règle générale, la configuration de l'intégration avec un nouveau service de messagerie prend de deux semaines à un mois.
La livraison est l'un des services que nous vendons à nos partenaires avec l'entrepôt. Lors de la commande d'un produit dans une boutique en ligne d'une marque de vêtements populaire qui ne semble rien avoir à voir avec Lamoda, l'achat sera livré par un représentant commercial sous la forme d'un LM express. Nous travaillons sur ces projets avec l'équipe de la fonction commerciale.
Pour mettre en œuvre les projets de notre entreprise, moi et nos responsables techniques de 2 équipes (la troisième embauche désormais des développeurs et des testeurs) déterminons la meilleure façon d'intégrer tous les changements dans notre architecture actuelle.
Nous travaillons sur la base des arriérés de la liste des projets. L'entreprise évalue chaque projet en termes d'effet financier et marketing. Nous estimons les coûts de main-d'œuvre et réfléchissons à une approche technique: est-il possible de créer une nouvelle fonctionnalité rapidement et efficacement, ou, au contraire, ce sera si cher et difficile que cela bloquera tout l'effet métier. Sur la base de ces estimations, nous ajustons l'arriéré et réalisons les projets en haut de la liste. Environ 30% de notre temps de développement est dans le backlog technique, vous n'avez donc pas à trouver le temps de refactoriser et d'améliorer les systèmes d'un point de vue technique, tout se passe comme prévu.
Le monde intérieur de la livraison
:
· PHP,
· Java,
· Kotlin,
· TypeScript,
· MySQL,
· PostgreSQL,
· RabbitMQ,
· ActiveMQ,
· Apache Kafka,
· Apache Camel,
· Docker, K8S.
La plupart de nos services sont basés sur PHP. Historiquement, les systèmes sur lesquels Lamoda a été créé étaient écrits dans cette langue. L'une des premières versions du site a été créée sur Magento, puis les systèmes Rocket Internet ont été pris comme base pour la livraison et le traitement des commandes. Ils ont subi de nombreuses itérations de développement et de retouches, mais PHP sous-tend toujours presque tous les services, y compris les nouveaux. Nous avons déjà écrit environ 200000 lignes de code et de nombreux développeurs PHP expérimentés (la direction de livraison avec les ingénieurs QA compte 20 personnes et est en pleine expansion) - mais ils ne sont pas limités à une seule technologie, ce sont d'excellents ingénieurs qui choisissent le bon outil pour la tâche.
Nous n'allons pas abandonner PHP dans le backend, car nous avons une culture de développement bien développée: nous utilisons de nouvelles versions du langage et des frameworks, couvrons presque tout le code avec des tests, effectuons une révision approfondie du code, avons un CI bien construit et de nombreuses bibliothèques communes qui accélèrent processus de développement.
Contrairement à la boutique en ligne, nous n'avons pas de grandes charges associées aux RPS. Tout d'abord, nous avons besoin d'une architecture d'application complexe et flexible, avec un grand nombre de niveaux d'abstraction (nous essayons d'adhérer à DDD) pour une logique métier complexe et parfois déroutante. Nous avons également un grand nombre d'échanges synchrones (JSON-RPC, SOAP) et asynchrones (RabbitMQ, Apache Kafka) avec d'autres systèmes.
Au total, environ 80 à 85% des systèmes sont écrits en PHP, bien que nous utilisions parfois Java. Il contient un service d'interaction avec des services de livraison externes, que nous changeons constamment.
Le frontend est représenté par un bundle de VueJS + TypeScript. Nos panneaux d'administration pour les utilisateurs internes ne nécessitent pas de super-mise en page ou de conception complexe.
Nous avons également une application mobile native pour les commerciaux, qui est écrite en Kotlin pour Android. Il était autrefois développé par des développeurs mobiles dévoués, mais nous le développons maintenant avec beaucoup de succès.
Pour les employés qui travaillent dans les entrepôts de transit, d'où les commandes sont envoyées à tous les entrepôts et points de retrait en Russie, nous avons une application Web. Avec cette approche, il existe un risque d'indisponibilité de notre application en raison de la déconnexion d'Internet à un point de retrait spécifique ou dans un entrepôt, mais nous le minimisons en utilisant la réservation de canaux de communication.
En plus de ces systèmes de livraison (Express et une application mobile, un bus pour l'intégration avec des services de messagerie externes), nous avons deux autres services que notre équipe prend actuellement en charge: un service d'impression de reçus électroniques et Datamatrix... Ce dernier est destiné à assurer le marquage des marchandises avec des codes uniques conformément aux nouvelles exigences de la législation. Ces deux projets ne sont pas directement liés à la livraison, mais c'est à travers nos services que les données qui leur sont nécessaires sont échangées.
Le service de livraison imprime les reçus: chaque représentant commercial dispose d'une caisse, en plus il y a des caisses à chacun de nos points de retrait. Par conséquent, le service de fiscalisation interagit constamment avec notre système. Datamatrix affecte presque tous les systèmes BPA (entrepôt, expédition, partenariats, systèmes comptables). Notre division interagit également très activement avec lui, nous avons donc participé activement à son développement. En ce moment, nous développons un nouveau système de politiques d'incitation pour les commerciaux.
La fonction commerciale du BPA: ce que nous vendons
L'entreprise a un objectif ambitieux: être la meilleure plateforme de mode de la CEI. Pour cela, Lamoda a beaucoup investi dans la qualité de service et rehaussé de zéro les processus opérationnels: livraison, entrepôt, studio photo, travail des opérateurs de centre de contact. Tous les processus opérationnels ont été testés et testés sur nos clients. Nous avons expérimenté, surveillé les commentaires des clients, commis des erreurs, corrigé des bugs, amélioré continuellement tout ce qui pouvait être amélioré dans l'expérience d'achat en ligne. Au cours de la cinquième année de vie de l'entreprise, nous avons décidé que nous étions prêts à partager nos ressources et notre expertise avec d'autres acteurs du marché.
Nous avons donc la première direction B2B, qui fournit aux grands partenaires des services de studio de photographie, de stockage et de livraison de marchandises et d'appels clients. Bientôt, une Marketplace est apparue au sein de l'entreprise, pour les moyennes et petites entreprises, qui propose une vitrine Lamoda en complément de la liste précédente. Les deux directions ont fonctionné et se sont développées pratiquement en parallèle, se rattrapant et se surpassant dans la gamme de services.
Après 3 ans supplémentaires et après évaluation des résultats, il a été décidé de combiner B2B et Marketplace dans une fonction commerciale, qui est engagée dans la création, le développement et le support de services pour des partenaires externes, basés sur les services internes existants de Lamoda.
Maintenant, nous coopérons avec une vingtaine de grandes marques - ce sont toutes des entreprises mondiales de réputation mondiale qui ont leurs propres processus commerciaux complexes. Un autre millier de nos clients sont des petites et moyennes entreprises, qui ne disposent souvent pas d'une infrastructure informatique développée. Pour tous les partenaires, nous maintenons de notre côté une couche d'intégration distincte, conçue pour le développement rapide et flexible de fonctionnalités qui convertissent les processus externes en les nôtres.
Je suis Alexey Felde, architecte de solutions, et je suis responsable du développement technique et produit de la fonction commerciale chez Lamoda.
Je suis engagé dans le développement et le support de services dans la couche d'intégration, et pour cela, je dois bien comprendre les processus métier de l'entreprise et de nos partenaires afin de concevoir tout changement dans les systèmes Lamoda.
Comme je l'ai mentionné ci-dessus, nous développons deux principaux domaines d'interaction avec les marques: Marketplace pour les petites marques, à laquelle nous fournissons une solution SAAS sous la forme d'une application WEB séparée, et B2B - grands projets séparés pour les grandes marques mondiales, auxquels nous fournissons pleinement nos capacités opérationnelles, ou nous aidons à nous intégrer aux nôtres.
La direction B2B est l'une des plus intéressantes de l'entreprise, mais en même temps l'une des plus difficiles. Il arrive que les géants mondiaux de la mode viennent à nous avec des exigences ou des restrictions complètement nouvelles en matière d'intégration. Dans de tels cas, mon équipe interagit avec d'autres équipes Lamoda et nous concevons des modifications à tout service d'entreprise requis. Pour connecter l'un des leaders de l'industrie mondiale de la mode, nous devions nous immerger dans tous ses processus d'affaires, y compris la comptabilité et les opérations. Dans le cadre du projet, nous avons abordé 15 de nos processus internes: de la description des marchandises sur le site à la comptabilité et à la livraison. Mon équipe possède la plus large expertise dans l'exploitation des systèmes informatiques et des processus métier Lamoda. Cela nécessite une systématisation et une documentation approfondies de nos connaissances.
Pour les petits fabricants de vêtements, chaussures et accessoires, qui n'ont souvent même pas leur propre service informatique, nous proposons une solution Marketplace en boîte qui vous permet de suivre les ventes, les mouvements de marchandises, les retours. Il fonctionne pleinement dans les installations de nos systèmes: les photos des marchandises sont prises par notre studio et sont stockées chez nous, les marchandises ne sont physiquement pas chez le client, mais dans notre entrepôt, et sont livrées par le service de livraison Lamoda.
Un autre produit en boîte avec le code source est un studio photo. Il a été acheté par un grand détaillant de luxe il y a quelques années. Ils avaient des photos très différentes sur leur site Web, ce qui a grandement influencé la conversion des ventes. Notre studio a réalisé un grand nombre de tests avec des photographies: laquelle d'entre elles se vend le mieux (photos d'hommes sans tête ou avec tête, angles de jambes corrects, etc.). Le client a beaucoup aimé les résultats de ces tests, et il a voulu appliquer notre expérience dans sa boutique en ligne. Pour ce faire, il avait besoin de construire un studio similaire au nôtre, où les gens travailleraient, organiseraient le processus de photographie et installeraient notre système informatique.
Lamoda en miniature
Contrairement aux équipes de service, nous avons une tâche différente - le développement d'une couche d'intégration derrière laquelle se cache une entreprise d'une grande entreprise. Le produit principal est une plate-forme B2B, qui au niveau du code est divisée en interne en modules: un module pour travailler avec un entrepôt, un module pour travailler avec la livraison, etc. C'est un gros système qui au niveau de ces petits modules peut gérer certains services. Il s'avère que notre plate-forme est un Lamoda miniature. Dans le même temps, les partenaires ne voient qu'une seule API - universelle et très simple, derrière laquelle se cache toute la complexité de Lamoda. En même temps, nous devons être aussi simples que possible pour l'intégration - notre premier principe de développement, puis vient la stabilité et la fiabilité. Nous prenons en charge divers SLA, par exemple, l'un d'entre eux est un temps d'arrêt maximal du système de 4 heures par an. Comme des collègues,nous accordons beaucoup d'attention aux tâches de tolérance aux pannes, processus de publication, qualité du code, couverture par des tests fonctionnels. Notre plateforme B2B est presque le premier système de la liste en termes de nombre de tests, nous avons plus de 2000 tests fonctionnels et 3000 tests unitaires.
B2B :
·
·
·
·
:
· PHP,
· Java,
· JavaScript,
· GO,
· Symfony,
· Camel,
· PostgreSQL,
· AngularJS,
· Apache Kafka,
· RabbitMQ.
Avant de connecter la marque, nous nous accordons avec le partenaire sur tous les détails de la relation: la gamme et la quantité attendue de marchandises, la géographie de livraison, l'ensemble des services connectés. Ensuite, le composant informatique entre en jeu: les détails d'intégration sont discutés avec la marque et nous aidons à nous connecter à notre API. Si quelque chose diffère du schéma d'intégration standard, nous proposons en outre des services intermédiaires entre les systèmes partenaires et notre plate-forme B2B.
90% du temps, nous mettons à niveau notre plateforme et implémentons de nouveaux processus métier. Le dernier des processus métier mis en œuvre fonctionne avec les codes Datamatrix, ce qui a déjà été discuté dans un autre article , et les collègues mentionnés ci-dessus.
Dans notre travail, l'essentiel est de maintenir un équilibre des technologies et de choisir des outils pour les tâches à résoudre. Honnêtement, nous ne recherchons pas la mode dans l'industrie. Notre pile est PHP, Java, Javascript et certains Go.
Comme mentionné dans l'article, la société a historiquement écrit de nombreux systèmes en PHP. Il est pratique et rapide d'y programmer des processus métier. La base de notre plateforme B2B y est écrite - autorisation, gestion des rôles, tous les principaux processus métier. Il est basé sur une architecture hexagonale, une utilisation active de DDD et une première conception API. Nous prenons en charge les applications à page unique écrites en Angular 1.5. Il communique avec notre plateforme B2B via API et est principalement responsable du rendu de l'interface utilisateur pour nos employés et employés partenaires.
Nous utilisons également Java, en particulier le framework d'intégration Camel. Les marques ne sont pas toujours prêtes à utiliser notre API, et pour les très grands acteurs, nous écrivons des intergiciels qui convertissent le domaine de la marque en domaine Lamoda. Camel gagne du temps en développant des solutions d'intégration de systèmes, change la mentalité des gens vers de bonnes pratiques d'ingénierie en utilisant des modèles d'intégration d'entreprise (EIP). Nous prévoyons de développer Camel dans des endroits où il est plus pratique d'utiliser des modèles d'intégration que d'écrire un service séparé.
Nous utilisons activement Kafka pour échanger des données entre les systèmes internes. Cela réduit considérablement la connectivité entre les systèmes, car dans les spécificités de notre travail, nous devons stocker des instantanés des données de tous les systèmes affûtés pour les partenaires. Pour tout ce qui doit être fait rapidement et pour les tâches de bureau, nous écrivons en Go. L'un de nos services calcule des métriques toutes les minutes en fonction des données stockées. Auparavant, cette solution était intégrée à une plate-forme B2B et était écrite en PHP, mais nous l'avons réécrite pour agile Go, car elle offre des performances plus élevées, un support plus facile, elle évolue mieux et peut être déployée en dehors du cycle de publication de la plate-forme B2B.
Je suis sincèrement heureux quand je vois le résultat du travail de notre plateforme sur plus de 30 sites tiers de grandes et célèbres marques de mode. Je vois comment une commande, qui est passée dans nos systèmes à partir du site Web de quelqu'un d'autre, est traitée par notre opérateur de centre de contact, puis transportée par notre service de livraison. Personne ne sait que tous ces processus sont créés et automatisés chez Lamoda, mais nous le faisons tellement cool que nos processus sont achetés par des marques mondiales.