Semuanya untuk dijual: bagaimana kami menyiapkan proses bisnis untuk Lamoda dan mulai menjualnya ke mitra

Hai, saya Pavel Saveliev, kepala BPA (Business Process Automation) di Lamoda. Ini adalah salah satu departemen terbesar di tim IT - 9 kami, dan kami berencana untuk memperluas lebih jauh. Saya akan memberi tahu Anda tentang bagaimana departemen pengembangan saya diatur dan apa yang "di bawah tenda" Lamoda.



Sederhananya, BPA adalah jaringan terpusat yang menggabungkan layanan pengiriman, gudang besar dan sistem manajemen pesanan, dengan pengembangan dan integrasi dengan mitra. Semua ini terkait dengan laporan dan analitik. Kami merancang dan menulis semua layanan untuk interaksi sistem ini dan penyediaan layanan serupa kepada mitra.



gambar



Departemen TI kami bertemu dengan dunia nyata : mudah untuk menyetel interval pengiriman 15 menit dalam sistem TI, tetapi cukup sulit untuk memastikan bahwa ribuan perwakilan penjualan di Moskow datang ke alamat tepat selama interval ini. Tugas utama departemen kami adalah menghubungkan bisnis dan teknologi. Departemen BPA sendiri sekarang berada di tiga area: pengiriman, gudang dan fungsi komersial, yang meliputi interaksi dengan B2B dan pasar. Dan semua yang kami gunakan sendiri dan jual di luar sangat keren: fitur kami menghasilkan uang, menghemat waktu, dan menawarkan layanan berkualitas tinggi kepada pelanggan kami.



5 bahasa dan 2 juta baris kode



gambarBPA adalah sekumpulan sistem yang terintegrasi satu sama lain dan sistem Lamoda lainnya. Untuk pengembangannya, kami menggunakan PHP, Java, Kotlin, ada sedikit Go dan Typecript - ada 5 bahasa di radar teknis kami. Kami menulis semua sistem untuk tugas bisnis kami. Sekarang menjadi 2 juta baris kode, 25 layanan dan lebih dari seratus perpustakaan yang dapat digunakan kembali.



Bahasa utamanya adalah PHP, dan beberapa layanan besar lainnya ditulis di Java dan Kotlin. Mengapa PHP? Pertama, ia mengimplementasikan sistem pemrosesan pesanan - sebuah monolit, yang telah kami gergaji menjadi layanan mikro selama bertahun-tahun, dan kedua, kami hebat dalam bekerja dengan PHP: kami menulis dengan cepat di dalamnya, kami menyajikannya dengan baik, kami telah menyelesaikannya dengan banyak perpustakaan... Pendekatan ini memungkinkan kami meluncurkan layanan baru dengan semua koneksi infrastruktur: dengan semua log dan pemantauan, hanya dalam beberapa hari. Kita bisa menggunakan Go dan Kotlin seperti di gudang. Kami tidak menggunakan teknologi duplikat, dan yang lainnya tidak dilarang, selama itu berfungsi.



Dalam proses bisnis, logika dan perhatian dari setiap langkah itu penting. Sehingga tidak terjadi pesanan Anda pergi dari gudang ke Vladivostok, dan ada piring yang tidak terduga tiba-tiba muncul di sistem, dan tidak diberikan kepada Anda.



Kita harus menutupi setiap langkah dengan pengujian, karena stabilitas dan ketepatan eksekusi logika sistem sangat penting. Selain itu, mitra kami juga menggunakan proses bisnis kami. Oleh karena itu, prioritas perusahaan adalah stabilitas, padahal kecepatan peluncuran layanan baru juga penting untuk bisnis. Untuk memastikan stabilitas, kami menginvestasikan waktu dalam merancang layanan dan pengujian di sekitarnya. Ini memberi kami kesempatan untuk mengembangkan sistem tanpa mengambil risiko merusak segalanya.



Bahkan ada soba!



gambarSaya Anton Dmitrienko, pimpinan teknis sistem manajemen pusat distribusi WMS - Lamoda atau, lebih sederhananya, gudang.



Tugas utama saya adalah berbicara bahasa yang sama dengan bisnis, mengembangkan model domain, dan mempersiapkan sistem untuk perubahan. Untuk melakukan ini, Anda perlu memahami di mana "hot spot" kami. Ada proses yang berbaris setiap tiga tahun sekali, dan ada yang berubah setiap tiga bulan - ini adalah "titik panas". Mereka penting untuk dipertimbangkan saat mendesain sistem.



Sekarang saya memiliki empat tim - 18 orang yang terlibat dalam pembuatan, pengujian, dan dukungan sistem. Kami mempercepat semua proses operasional dan bisnis gudang: tanpa kami dengan volume bisnis Lamoda saat ini, pengiriman satu pesanan pelanggan akan memakan banyak waktu, partisipasi kami mengurangi waktu pemrosesan pesanan apa pun menjadi 4 jam.



gambar



Skalanya tentu saja sangat besar: gudang Lamoda seluas sekitar 40 ribu meter persegi atau beberapa lapangan sepak bola di 5 lantai, tempat tersimpan 10 juta barang. Ia bekerja sepanjang waktu 364 hari setahun, dengan hari libur sekali setahun - 1 Januari. Dan setiap hari lebih dari 500 karyawan pergi untuk satu shift, dan melalui sistem kami 200 ribu barang dikirim dan diterima. Selain itu, jaringan konveyor dan peralatan mekanis dikerahkan di dalam gudang, yang dirancang untuk mengangkut barang, mengemas paket, mengkonsolidasikan pesanan pelanggan secara fisik, mengurutkan paket berdasarkan tujuan, kami juga mengelolanya.



gambar



Lamoda menjual kepada pelanggan semua jenis barang, mulai dari payung dan koper besar hingga jam tangan dan perhiasan kecil. Semua ini disimpan dan diproses di gudang kami. Setiap kategori memiliki karakteristiknya masing-masing. Misalnya, barang berukuran besar tidak dapat diproses dengan peralatan otomatis, perhiasan disimpan dan diproses dengan tindakan pengamanan tambahan, dan kosmetik, parfum, misalnya, memerlukan kondisi penyimpanan suhu tertentu dan kontrol atas masa simpan barang.



Baru-baru ini kami memiliki proyek bernama "Buckwheat". Sejak diperkenalkannya rezim isolasi diri, Lamoda telah menambahkan makanan berumur panjang yang populer ke dalam rangkaian produknya. Omong-omong, kami menerapkan fitur ini hanya dalam beberapa hari. Tentu saja, variasi utama adalah pakaian dan alas kaki, yang pekerjaannya juga memiliki beberapa nuansa: untuk penjualan barang perlu disiapkan dan diperiksa kualitasnya: akan buruk jika, misalnya, kami membawa kemeja tanpa kancing ke klien.



Lamoda bukan hanya toko online, tetapi platform e-commerce lengkap yang menyediakan infrastruktur dan layanannya (termasuk gudang) untuk mitra eksternal. Misalnya, merek fesyen internasional besar menyimpan barang mereka bersama kami. Apa bedanya? Gaun, jas dan sepatu dari rekanan sama dengan yang sudah ada di gudang kami. Tetapi kita semua memiliki persyaratan individu untuk proses yang wajib kita patuhi berdasarkan kontrak, misalnya, beberapa barang dari pelanggan besar disimpan di zona terpisah, dan barang dari pasar ditempatkan di seluruh stok. Fitur-fitur ini juga harus diperhitungkan.



Kami memeriksa dan memproses setiap produk di setiap tahap proses dengan mempertimbangkan hal-hal spesifik tidak hanya di dunia fisik, tetapi juga di sistem TI. Selain itu, sistem TI itu sendiri memberi tahu karyawan gudang cara menangani produk tertentu, karena operator tidak dapat mengetahui semua fitur atau perjanjian: produk tidak menyebutkan siapa pemiliknya: perusahaan internasional besar atau mitra pasar kecil.



gambar



Fitur utama dari sistem ini adalah interaksi melalui pemindai dan kode batang: setiap produk memiliki kode batang yang unik, yang dapat dibaca untuk mendapatkan semua informasi yang diperlukan tentang produk. Pendekatan ini meminimalkan kesalahan dan memungkinkan Anda melakukan semua tindakan dengan produk lebih cepat, mengurangi jumlah karyawan. Jika kita mengirimkan 200 ribu barang per hari, maka penghematan 1 detik untuk satu produk adalah 55 jam waktu kerja. Untuk bisnis, itu berwujud.



Di bawah kap gudang



Teknologi kami:



Java 8,

PostgreSQL,

Wildfly,

Spring,

Redis,

ActiveMQ,

Hibernate.



Kami mulai dengan solusi siap pakai di Java, tetapi sejak itu fungsionalitas sistem telah berkembang pesat dan kode telah sepenuhnya difaktorisasi ulang dan ditulis ulang beberapa kali.



Sekarang kami memiliki 350 ribu baris kode - dan ini hanya bagian belakang dari aplikasi utama, dan ada juga 5 layanan sekunder dan 2 antarmuka pengguna: klien web tipis dan aplikasi asli seluler. Kami sedang melakukan pengembangan tumpukan penuh.



Karyawan gudang menggunakan klien seluler. Mereka bergerak di sekitar gudang menggunakan aplikasi Android kami sendiri, ini adalah teknologi yang lebih modern dan nyaman yang memungkinkan Anda menggunakan fitur perangkat itu sendiri: getaran, suara untuk kesalahan, dan lebih sedikit baterai yang dihabiskan jika aplikasinya asli, bukan berbasis browser. Aplikasinya sendiri dibuat di Kotlin, kami memiliki pengalaman yang baik dalam menggunakannya. Kami bahkan mulai menulis backend padanya: sejauh ini ini hanya satu layanan, tetapi kami suka bahwa kodenya lebih sederhana dan lebih ekspresif daripada di Java, dan kinerjanya sama. Kami tidak memiliki tujuan untuk menulis ulang semuanya di Kotlin, tetapi kami akan terus menggunakannya untuk tugas yang sesuai.



Interaksi dengan sistem Lamoda lain dibangun melalui bus data yang ditulis dalam Apache Camel menggunakan broker pesan ActiveMQ. Pendekatan ini memberikan jaminan pengiriman dan transformasi pesan yang relatif sederhana untuk berbagai format, kemampuan untuk mendistribusikan pesan ke beberapa konsumen. Kami adalah yang pertama menggunakan Apache Camel pada tahun 2014, kemudian metode integrasi ini diadopsi oleh tim lain di departemen kami.

Prinsip-prinsip membangun sistem gudang:



· kehandalan dan kualitas

· ekstensibilitas dan fleksibilitas

· kesederhanaan



Gudang adalah jantung dari proses logistik Lamoda, dan kesalahan serta waktu henti sistem berdampak besar pada bisnis. Oleh karena itu, kami memperhatikan stabilitas dan toleransi kesalahan sistem. Keandalan dicapai dengan menduplikasi elemen sistem dan infrastruktur penting. Kami memiliki dua server independen yang diiris menjadi mesin virtual. Setiap aplikasi diterapkan pada dua instance, masing-masing instance di mesin virtualnya sendiri. Klien berinteraksi dengan server melalui penyeimbang dalam bentuk Haproxy, yang mengarahkan permintaan ke salah satu instance. Database juga dicadangkan dengan menggunakan skema replikasi Master-Slave.



gambar



Semua server kami secara fisik terletak tepat di gudang, yang juga meningkatkan keandalan dan kecepatan kerja karena interaksi semua elemen sistem melalui jaringan lokal. Bahkan jika Internet eksternal terputus, kami masih akan terus bekerja, dan jika listrik padam, kami memiliki pasokan listrik dan generator bensin yang tidak pernah terputus tepat di gudang.



Untuk meminimalkan jumlah kesalahan dalam kode, kami menulis pengujian otomatis: unit, integrasi, penerimaan, pemuatan, dan tim pengujian memeriksa semuanya dengan tangan. Semua ini adalah praktik wajib dan dibangun ke dalam siklus hidup tugas, terkadang, tentu saja, bug muncul, tetapi kami belum memiliki rollback rilis penuh selama beberapa tahun.



Perluasan dan fleksibilitas - bagi kami ini pada dasarnya adalah pertanyaan tentang berapa banyak upaya dan waktu yang akan kami habiskan untuk mengubah sistem untuk memenuhi persyaratan baru dari proses bisnis. Oleh karena itu, pengembangan menyediakan kemampuan untuk mengubah kode dengan cepat dan mudah di masa mendatang. Misalnya, kategori barang apa pun dapat dikonfigurasi untuk lokasi penyimpanan fisik tertentu, ini memungkinkan Anda untuk dengan cepat menghubungkan kategori barang baru untuk dijual. Untuk setiap pesanan, dikonfigurasi dalam materi apa yang akan dikemas dan dokumen apa yang menyertai akan dicetak untuknya. Dan ini hanya sebagian kecil dari fungsinya.



Kami memiliki area subjek yang kompleks dengan sejumlah besar proses bisnis dan model domain bercabang. Semakin sederhana kodenya, semakin baik, karena itu meningkatkan keterbacaan, pemahaman, dan mengurangi kemungkinan kesalahan. Dan ini memungkinkan Anda untuk lebih fokus pada fungsi apa yang dilakukan kode untuk bisnis.



Asuransi kesalahan



gambarNama saya Denis Plisko dan saya adalah Pemimpin Pengembangan untuk Layanan Pengiriman di BPA.



Kami telah menciptakan, mengembangkan, dan memelihara sistem TI LM Express. Ini berfungsi untuk mengotomatiskan pekerjaan gudang transit, perwakilan penjualan, dan poin masalah pesanan. Sistem kami tahu segalanya tentang kedatangan dan keberangkatan pengiriman, menangani pemrosesannya, menjual dan mengeluarkan pesanan yang sudah dibayar, menerima pengembalian dan banyak proses bisnis terkait lainnya. Selain itu, di dalamnya kami mencatat dan menganalisis tindakan fisik perwakilan penjualan dan pekerja gudang kami - kami melacak semua yang terjadi di "mil terakhir" sebelum barang diserahkan kepada pembeli. Sebagian besar proses teknis yang berada dalam bentuk informasi di sistem Express mencerminkan tindakan fisik karyawan layanan pengiriman.



gambar



Seperti apa bentuknya? Misalnya, seorang karyawan menerima pengiriman, mengeluarkan palet darinya - kotak berisi paket dengan barang, mengeluarkan paket, menyortirnya ke dalam rak: setiap tindakan yang dia lakukan disertai dengan operasi di sistem kami. Dan di sinilah kesalahan bisa muncul: Anda tidak pernah bisa yakin bahwa meskipun karyawan pengiriman "mengklik" semuanya dengan benar, maka memang begitu. Akibatnya, salah satu bagian terbesar dari logika proses kami adalah memperingatkan dan mengoreksi kesalahan: terkadang ini dapat dilakukan secara otomatis, terkadang melalui orang itu sendiri, terkadang melalui pusat bantuan atau pengguna yang memiliki hak lebih lanjut. Jika bukan karena fitur ini, maka sistem kami akan menjadi 5 kali lebih kecil.

Prinsip-prinsip membangun sistem pengiriman:



· stabilitas dan ketersediaan sistem

· konsistensi data

· kemandirian dari sistem dan layanan eksternal



Tugasnya adalah untuk memastikan pengoperasian sistem yang paling stabil, karena apakah orang-orang menerima pembelian mereka tepat waktu atau tidak secara langsung bergantung pada hal ini. Saat menerapkan fungsionalitas apa pun, kami mencoba untuk tidak bergantung pada layanan dan sistem eksternal, untuk ini, banyak interaksi yang diduplikasi. Misalkan ada pengiriman sudah sampai, dan belum ada data pesanan untuk itu, maka kami akan meminta informasi ini sendiri agar tidak berhenti bekerja. Penting juga untuk membuat banyak operasi idempoten untuk menjaga konsistensi data yang diperlukan, terutama dalam pertukaran dengan layanan lain.



Selain itu, kami berupaya untuk menerima semua data yang diperlukan sedini mungkin agar tidak ternyata ada orang yang datang untuk mengambil barang dan tidak dapat menerimanya karena kegagalan sistem. Kami berusaha keras untuk membuat bagian internal sistem sangat andal sehingga interaksi pengguna dengan mereka hanya bergantung pada layanan kami sendiri. Jadi, bahkan jika semua sistem Lamoda tidak tersedia untuk sementara, pekerjaan gudang dan titik penjemputan tidak akan berhenti dan operasi utama akan terus berlanjut.



Di jalanan kurir, kurir



Selain pengiriman sendiri, Lamoda bekerja sama dengan jasa kurir pihak ketiga, misalnya Russian Post, Pony Express, DPD dan lain-lain. Ini terjadi jika di kota, wilayah, atau negara (misalnya, di Ukraina), pengiriman kami hanya dapat dilakukan melalui partner. Kami menyediakan pertukaran informasi melalui interaksi dengan sistem TI mereka.



Menghubungkan setiap kurir baru adalah petualangan yang mengasyikkan, karena API sangat berbeda untuk setiap orang dan tidak selalu disesuaikan untuk integrasi. Ini karena beberapa layanan kurir secara historis adalah perusahaan offline. Mereka telah dikirim sejak masa dokumen, dan menulis API yang baik bukanlah tugas yang mudah.



Kami menggunakan sistem khusus berdasarkan kerangka ESB Apache Camel untuk mengimplementasikan integrasi dengan mitra baru. Menggunakan Camel memudahkan untuk melakukan berbagai transformasi data dan interaksi melalui protokol pertukaran yang berbeda. Biasanya, menyiapkan integrasi dengan layanan kurir baru membutuhkan waktu dari dua minggu hingga satu bulan.



Pengiriman adalah salah satu layanan yang kami jual ke rekanan kami beserta gudang. Saat memesan produk dari toko online merek pakaian populer yang sepertinya tidak ada hubungannya dengan Lamoda, pembelian akan dikirimkan oleh perwakilan penjualan dalam bentuk LM express. Kami mengerjakan proyek ini bersama dengan tim fungsi komersial.



Untuk mengimplementasikan proyek bisnis kami, saya dan pimpinan teknis kami dari 2 tim (tim ketiga sekarang mempekerjakan pengembang dan penguji) menentukan cara terbaik untuk menyesuaikan semua perubahan ke dalam arsitektur kami saat ini.



Kami bekerja berdasarkan backlog dari daftar proyek. Bisnis mengevaluasi setiap proyek dalam kaitannya dengan efek finansial dan pemasaran. Kami memperkirakan biaya tenaga kerja dan memikirkan pendekatan teknis: apakah mungkin untuk membuat fitur baru dengan cepat dan efisien, atau, sebaliknya, akan sangat mahal dan sulit sehingga akan menghalangi keseluruhan efek bisnis. Berdasarkan perkiraan ini, kami menyesuaikan backlog dan membuat proyek di bagian atas daftar. Sekitar 30% dari waktu pengembangan kami dialokasikan untuk backlog teknis, jadi tidak perlu mencari waktu untuk merefaktor dan meningkatkan sistem dari sudut pandang teknis, semuanya berjalan sesuai rencana.



Dunia batin pengiriman



:



· PHP,

· Java,

· Kotlin,

· TypeScript,

· MySQL,

· PostgreSQL,

· RabbitMQ,

· ActiveMQ,

· Apache Kafka,

· Apache Camel,

· Docker, K8S.



Sebagian besar layanan kami dibangun di atas PHP. Secara historis, sistem tempat Lamoda dibuat ditulis dalam bahasa ini. Salah satu versi pertama situs ini dibuat di Magento, kemudian sistem Internet Rocket digunakan sebagai dasar untuk pengiriman dan pemrosesan pesanan. Mereka telah melalui banyak iterasi pengembangan dan pengerjaan ulang, tetapi PHP masih mendasari hampir semua layanan, termasuk yang baru. Kami telah menulis sekitar 200 ribu baris kode, dan banyak pengembang PHP berpengalaman (arah pengiriman bersama dengan insinyur QA berjumlah 20 orang dan secara aktif berkembang) - tetapi mereka tidak terbatas pada satu teknologi, mereka adalah insinyur yang sangat baik yang memilih alat yang tepat untuk tugas tersebut.



Kami tidak akan meninggalkan PHP di backend, karena kami memiliki budaya pengembangan yang berkembang dengan baik di atasnya: kami menggunakan versi baru dari bahasa dan kerangka kerja, mencakup hampir semua kode dengan tes, melakukan tinjauan kode menyeluruh, memiliki CI yang dibangun dengan baik dan banyak perpustakaan umum yang mempercepat proses pengembangan.



Berbeda dengan toko online, kami tidak memiliki beban besar yang terkait dengan RPS. Pertama-tama, kita membutuhkan arsitektur aplikasi yang kompleks dan fleksibel, dengan sejumlah besar level abstraksi (kami mencoba untuk mengikuti DDD) untuk logika bisnis yang kompleks dan terkadang membingungkan. Kami juga memiliki sejumlah besar pertukaran sinkron (JSON-RPC, SOAP) dan pertukaran asinkron (RabbitMQ, Apache Kafka) dengan sistem lain.



Secara total, sekitar 80-85% sistem ditulis dalam PHP, meskipun terkadang kami menggunakan Java. Ini berisi layanan untuk berinteraksi dengan layanan pengiriman eksternal, yang terus kami ubah.



Bagian depan diwakili oleh bundel VueJS + TypeScript. Panel admin kami untuk pengguna internal tidak memerlukan tata letak super atau desain yang rumit.



Kami juga memiliki aplikasi asli seluler untuk perwakilan penjualan, yang ditulis dalam Kotlin untuk Android. Ini pernah dikembangkan oleh pengembang seluler khusus, tetapi sekarang kami sangat berhasil mengembangkannya sendiri.



gambar



Untuk karyawan yang bekerja di gudang transit, tempat pesanan dikirim ke semua gudang dan titik penjemputan di Rusia, kami memiliki aplikasi web. Dengan pendekatan ini, ada risiko tidak tersedianya aplikasi kami karena terputusnya koneksi Internet di titik penjemputan tertentu atau di gudang, tetapi kami meminimalkannya dengan menggunakan saluran komunikasi reservasi.



Selain sistem pengiriman ini (Express dan aplikasi seluler, bus untuk integrasi dengan layanan kurir eksternal), kami memiliki dua layanan lagi yang saat ini didukung oleh tim kami: layanan untuk mencetak tanda terima elektronik dan Datamatrix... Yang terakhir ini dimaksudkan untuk memastikan penandaan barang dengan kode unik sesuai dengan persyaratan baru hukum. Kedua proyek ini tidak terkait langsung dengan pengiriman, tetapi melalui layanan kami data yang diperlukan untuk mereka dipertukarkan.



Layanan pengiriman mencetak tanda terima: setiap perwakilan penjualan memiliki meja kasir, ditambah meja kas di setiap titik pengambilan kami. Oleh karena itu, layanan fiskal terus berinteraksi dengan sistem kami. Datamatrix mempengaruhi hampir semua sistem BPA (gudang, pengiriman, kemitraan, sistem akuntansi). Divisi kami juga sangat aktif berinteraksi dengannya, jadi kami ikut aktif dalam pengembangannya. Saat ini kami sedang mengembangkan sistem baru untuk kebijakan insentif bagi perwakilan penjualan.



Fungsi komersial BPA: apa yang kami jual



Perusahaan memiliki tujuan yang ambisius - menjadi platform mode terbaik di CIS. Untuk melakukan ini, Lamoda banyak berinvestasi dalam kualitas layanan dan meningkatkan proses operasional dari awal: pengiriman, gudang, studio foto, pekerjaan operator call center. Semua proses operasi telah diuji dan diuji pada klien kami. Kami bereksperimen, memantau umpan balik pelanggan, membuat kesalahan, memperbaiki bug, terus meningkatkan segala sesuatu yang dapat ditingkatkan dalam pengalaman belanja online. Di tahun kelima kehidupan perusahaan, kami membuat keputusan bahwa kami siap untuk membagikan sumber daya dan keahlian kami dengan para pemain pasar lainnya.



Jadi kami memiliki arahan B2B pertama, yang menyediakan mitra besar layanan studio fotografi, penyimpanan dan pengiriman barang, dan panggilan pelanggan. Segera, Marketplace muncul di dalam perusahaan, untuk perusahaan menengah dan kecil, yang menyediakan showcase Lamoda sebagai layanan tambahan ke daftar sebelumnya. Kedua arah bekerja dan berkembang secara praktis secara paralel, mengejar dan mengungguli satu sama lain dalam berbagai layanan.



Setelah 3 tahun berikutnya dan setelah mengevaluasi hasilnya, diputuskan untuk menggabungkan B2B dan Marketplace menjadi fungsi komersial, yang terlibat dalam pembuatan, pengembangan, dan dukungan layanan untuk mitra eksternal, berdasarkan layanan internal Lamoda yang ada.



Sekarang kami bekerja sama dengan sekitar 20 merek besar - ini semua adalah perusahaan global dengan reputasi dunia yang memiliki proses bisnis kompleks sendiri. 1000 klien kami lainnya adalah perusahaan menengah dan kecil, yang seringkali tidak memiliki infrastruktur TI yang berkembang. Untuk semua mitra, kami di pihak kami mempertahankan lapisan integrasi terpisah, yang dirancang untuk pengembangan fungsionalitas yang cepat dan fleksibel yang mengubah proses eksternal menjadi proses kami.



gambarSaya Alexey Felde, seorang arsitek solusi, dan saya bertanggung jawab atas pengembangan produk dan teknis fungsi komersial di Lamoda.



Saya terlibat dalam pengembangan dan dukungan layanan di lapisan integrasi, dan untuk ini saya harus benar-benar memahami proses bisnis perusahaan dan mitra kami untuk merancang perubahan apa pun dalam sistem Lamoda.



Seperti yang saya sebutkan di atas, kami sedang mengembangkan dua area interaksi utama dengan merek: Marketplace untuk merek kecil, di mana kami menyediakan solusi SAAS dalam bentuk aplikasi WEB terpisah, dan B2B - proyek besar terpisah untuk merek global besar, di mana kami juga menyediakan kapasitas operasi kami sepenuhnya, atau kami membantu berintegrasi dengan milik kami.



Arah B2B adalah salah satu yang paling menarik di perusahaan, tetapi pada saat yang sama menjadi salah satu yang paling sulit. Kebetulan raksasa mode dunia datang kepada kita dengan persyaratan atau batasan integrasi yang sama sekali baru. Dalam kasus seperti itu, tim saya berinteraksi dengan tim Lamoda lain dan kami merancang perubahan pada layanan perusahaan yang diperlukan. Untuk menghubungkan salah satu pemimpin industri mode global, kami harus membenamkan diri dalam semua proses bisnisnya, termasuk akuntansi dan operasional. Dalam kerangka kerja proyek, kami menyentuh 15 proses internal kami: dari deskripsi barang di situs hingga akunting dan pengiriman. Tim saya memiliki keahlian terluas dalam mengoperasikan sistem TI dan proses bisnis Lamoda. Ini membutuhkan sistematisasi dan dokumentasi yang cermat dari pengetahuan kita.



Untuk produsen kecil pakaian, alas kaki, dan aksesori, yang seringkali bahkan tidak memiliki departemen TI sendiri, kami menyediakan solusi Marketplace kotak yang memungkinkan Anda melacak penjualan, pergerakan barang, pengembalian. Ini sepenuhnya berfungsi di fasilitas sistem kami: foto barang diambil oleh studio kami dan disimpan bersama kami, barang secara fisik tidak berada di tempat klien, tetapi di gudang kami, dan dikirim oleh layanan pengiriman Lamoda.



Produk kotak kami lainnya dengan kode sumber adalah studio foto. Itu dibeli oleh pengecer mewah besar beberapa tahun yang lalu. Mereka memiliki foto yang sangat berbeda di situs web mereka, dan ini sangat memengaruhi konversi penjualan. Studio kami melakukan banyak tes dengan foto: mana yang lebih laku (foto pria tanpa kepala atau kepala, sudut kaki yang benar, dll.). Klien sangat menyukai hasil tes ini, dan dia ingin menerapkan pengalaman kami di toko online-nya. Untuk melakukan ini, dia perlu membangun studio yang mirip dengan kami, tempat orang-orang akan bekerja, mengatur proses fotografi, dan memasang sistem TI kami.



Lamoda dalam miniatur



Berbeda dengan tim layanan, kami memiliki tugas yang berbeda - pengembangan lapisan integrasi di baliknya yang menyembunyikan perusahaan dari perusahaan besar. Produk utama adalah platform B2B, yang pada tingkat kode secara internal dibagi menjadi beberapa modul: modul untuk bekerja dengan gudang, modul untuk menangani pengiriman, dan sebagainya. Ini adalah satu sistem besar yang pada level modul kecil ini dapat mengelola layanan tertentu. Ternyata platform kami adalah miniatur Lamoda. Pada saat yang sama, mitra hanya melihat satu API - universal dan sangat sederhana, di balik semua kerumitan Lamoda tersembunyi. Pada saat yang sama, kita harus sesederhana mungkin untuk integrasi - prinsip pertama kita dalam pengembangan, kemudian stabilitas dan keandalan. Kami mendukung berbagai SLA, misalnya, salah satunya adalah waktu henti sistem maksimum 4 jam per tahun. Seperti rekan kerja,kami memberi banyak perhatian pada tugas toleransi kesalahan, proses rilis, kualitas kode, cakupan oleh tes fungsional. Platform B2B kami hampir menjadi sistem pertama dalam daftar dalam hal jumlah pengujian, kami memiliki lebih dari 2.000 pengujian fungsional dan 3.000 pengujian unit.

B2B :



·

·

·

·





:



· PHP,

· Java,

· JavaScript,

· GO,

· Symfony,

· Camel,

· PostgreSQL,

· AngularJS,

· Apache Kafka,

· RabbitMQ.



Sebelum menghubungkan merek, kami setuju dengan mitra tentang semua detail hubungan: kisaran dan jumlah barang yang diharapkan, geografi pengiriman, rangkaian layanan yang terhubung. Selanjutnya, komponen TI ikut bermain: detail integrasi dibahas dengan merek dan kami membantu untuk terhubung ke API kami. Jika ada sesuatu yang berbeda dari skema integrasi standar, maka kami juga meningkatkan layanan yang merupakan middleware antara sistem mitra dan platform B2B kami.



90% dari waktu kami meningkatkan platform kami dan menerapkan proses bisnis baru. Proses bisnis yang terakhir diimplementasikan adalah bekerja dengan kode Datamatrix, yang telah dibahas di artikel lain , dan rekan yang disebutkan di atas.



Dalam pekerjaan kami, hal utama adalah menjaga keseimbangan teknologi dan memilih alat untuk tugas yang diselesaikan. Sejujurnya kami tidak mengejar fashion di industri ini. Tumpukan kami adalah PHP, Java, Javascript dan beberapa Go.



gambar



Seperti yang disebutkan dalam artikel, perusahaan secara historis telah menulis banyak sistem dalam PHP. Sangat mudah dan cepat untuk memprogram proses bisnis di atasnya. Dasar platform B2B kami tertulis di atasnya - otorisasi, manajemen peran, semua proses bisnis utama. Ini didasarkan pada arsitektur heksagonal, penggunaan aktif DDD dan desain pertama API. Kami mendukung Aplikasi Halaman Tunggal yang ditulis dalam Angular 1.5. Ini berkomunikasi dengan platform B2B kami melalui API dan terutama bertanggung jawab untuk menampilkan UI untuk karyawan dan karyawan mitra kami.



Kami juga menggunakan Java, khususnya kerangka integrasi Camel. Merek tidak selalu siap untuk menggunakan API kami, dan untuk pemain yang sangat besar, kami membuat middleware yang mengubah domain merek menjadi domain Lamoda. Camel menghemat waktu dalam mengembangkan solusi integrasi sistem, mengubah pola pikir orang-orang terhadap praktik rekayasa yang baik menggunakan pola integrasi perusahaan (EIP). Kami berencana untuk mengembangkan Camel di tempat-tempat yang lebih nyaman untuk menggunakan pola integrasi daripada menulis layanan terpisah.



Kami secara aktif menggunakan Kafka untuk bertukar data antar sistem internal. Ini secara signifikan mengurangi konektivitas antar sistem, karena dalam spesifikasi pekerjaan kami, kami perlu menyimpan snapshot data dari semua sistem yang diasah untuk mitra. Untuk segala hal yang perlu diselesaikan dengan cepat dan untuk tugas kantor, kami menulis di Go. Salah satu layanan kami menghitung metrik setiap menit berdasarkan data yang disimpan. Sebelumnya, solusi ini dibangun ke dalam platform B2B dan ditulis dalam PHP, tetapi kami menulis ulang untuk Go gesit, karena memiliki kinerja yang lebih tinggi, dukungan yang lebih mudah, skala yang lebih baik dan dapat digunakan di luar siklus rilis platform B2B.



Saya sangat senang saat melihat hasil kerja platform kami di lebih dari 30 situs pihak ketiga dari merek fesyen besar dan terkenal. Saya melihat bagaimana pesanan, yang ditempatkan di sistem kami dari situs web orang lain, diproses oleh operator pusat kontak kami, dan kemudian diangkut melalui pengiriman kami. Tidak ada yang tahu bahwa semua proses ini dibuat dan otomatis di Lamoda, tetapi kami melakukannya dengan sangat keren sehingga proses kami dibeli oleh merek global.



All Articles