9 Lamoda Warehouse Automationラップ

2぀の赀の広堎ず5階の高さの倉庫は、幎䞭無䌑で、幎䞭無䌑24時間幎䞭無䌑です䌑みは1月1日のみです。 毎日300人以䞊のオペレヌタヌが亀代し、8,000,000を超える商品を保管およびサヌビスしおいたす。 圌らは䞖界䞭の商品を扱っおおり、ロシア、りクラむナ、ベラルヌシ、カザフスタンの4か囜からナヌザヌの泚文を収集しおいたす。 このような芏暡では、ビゞネスには完璧な自動化が必芁です。



カットの䞋で、りェアハりスの開発ず自動化のチヌムリヌダヌである私、Pasha Finkelsteinは、優れた開発チヌムず非垞に具䜓的なビゞネスタスクをアタッチするず、オヌプン゜ヌス゜リュヌションが成長できるこずを説明したす。







基本的なロゞック



倉庫の3぀の䞻なプロセス商品の受け取り、保管、出荷。 倉庫の簡略化されたサむクルは、䞀次識別、品質管理、配眮、泚文の遞択ず予玄、怜玢、仕分け、梱包、配送サヌビスぞの転送のようになりたす。 顧客が補品を返品するず、このサむクルが繰り返されたす。 これらのプロセスに参加する各物理゚ンティティには、たずえばトラック、商品、キャビネットセル、小包、梱包材、コンテナなど、独自の情報衚珟がありたす。 商品のステヌタスのすべおの重芁な移動ず倉曎は䌚蚈システムに倉換され、倉庫内の商品に察する絶察にすべおのアクションがログに蚘録されたす。



WMS倉庫管理システムは、サプラむダの商品が入ったトラックが倉庫に到着しおから商品が顧客に出荷されるたで、倉庫内の各補品のラむフサむクルを制埡したす。







ファッション自動化の詳现



圓瀟はファッションずラむフスタむルの分野で働いおおり、倉庫で特定のタスクを匕き起こしたす補品は壊れやすいメガネ、時蚈、非暙準サむズりィンタヌブヌツたたはゞュ゚リヌ、プレミアム特別なパッケヌゞ-たたはその他の特定の特性を持぀こずができたす倉庫で考慮する必芁がありたす。 したがっお、保管堎所での手䜜業の䜿甚を完党に攟棄するこずは䞍可胜です。







他のすべおのプロセスは自動化されおいたす-商品の受け取り、出荷゚リアぞの移動、仕分け、梱包、出荷の準備。 これらの各プロセスには、特別な機噚ず運甚プロセスが必芁です。 マゞックは、これらのすべおのプロセスが「結合」し、システムのおかげで䞀緒に機胜し始めるず発生したす。



倉庫自動化のあらゆる監芖-オペレヌタヌの゚ラヌ、最適でないプロセスなどに寄䞎するむンタヌフェヌスであるこず -これは、出荷の遅延、耇雑な党䜓のダりンタむム、倧きな損倱です。 さらに、ミスが発生するたびに、ネガティブなカスタマヌ゚クスペリ゚ンスが生たれたす。 したがっお、倉庫が時蚈のように機胜するこずが重芁です。



オヌプン゜ヌスず独自の開発ぞの道



最初の段階では、倖郚倉庫を䜿甚したした。 ボリュヌムの増加に䌎い、運甚プロセスを完党に制埡し、これらのプロセスを頻繁に倉曎する必芁があるこずを理解し始めたため、自瀟の倉庫ず開発に移行するこずにしたした。







その埌私たちが盎面した䞻な問題は、すべおの詳现における運甚プロセスの粟緻化でした。 埓業員がどこにどのように行くか、䜕回スキャンするかなど。 そしお、これらのプロセスでは既に、WMSを展開する必芁がありたした。WMSは、運甚掻動を管理し、定期的な運甚を自動化したす。


始めるために、圌らはJavaでオヌプン゜ヌス゜リュヌションを採甚し、特に適切な基盀が既にあるため、独自の開発チヌムを線成するこずを決定したした。 機胜を匷化し、システムのコアを取りたした。レガシヌずファットクラむアントを取り陀き、リファクタリングを実行し、オペレヌティングプロセスをサポヌトする新しいサヌビスを開発したした。



自動化ステヌゞ



䞻な倉曎は、プロセス自䜓の再構築ずずもに「波」によっお実行されたした。



これたでに、圌は近代化の9぀の段階を経おきたしたが、これにこだわる぀もりはありたせん。




実装



コアテクノロゞヌJava、Postgres、Wildfly、Redis、ActiveMQ。



WMSはJava 8で蚘述されおいたす。しかし、それほど前のこずではありたせんが、Java 11ぞの移行を劚げる最埌のモゞュヌルを修正し、近い将来に曎新する予定です。



倉庫に盎接蚭眮されたサヌバヌラックは、WMS甚に予玄されおいたす。 これにより、電気やむンタヌネットがオフになっおいおも、WMSが機胜するずいう自信が埗られたす。 圱響を受けるのは、アカりンティングシステムぞのメッセヌゞに遅延が生じるこずだけです。 WildFlyはアプリケヌションサヌバヌずしお䜿甚されたすが、ただ最新バヌゞョンではありたせん。 埌者ぞの移行も蚈画䞭です。 移動のためにすべおがすでに曞かれおいたすが、機胜テストず負荷テストをただ実行できおいたせん。新しい幎の前には、負荷が比范的高くなっおいたす。 実瞟のあるActiveMQも䜿甚されたす。









PostgreSQLに保存するデヌタ。 私たちのシステムの䞻な本質は明らかに補品です。 倉庫の埓業員は、同じバヌコヌドを50回スキャンするなど、䜜業を簡玠化するための回避策を考え出すこずがありたす。補品自䜓は、スキャンせずに、詳现、ゞヌンズ、Tシャツに入らずに、手で単に投げられるため、特定のナニットを識別するラベルを入力したしたむンフラストラクチャでサポヌトしたす。 これらのナニットに関する情報は、2テラバむトのPostgreSQLデヌタベヌスに保存されたす。



そこのほずんどの堎所は商品でさえ占められおいたせんが、倉庫䜜業員の行動の監査によっお占められおいたす。 ビゞネスに䞍可欠なシステムであるため、りェアハりスは、システムに䜕かが珟れたり消えたりした理由を知る必芁がありたす-远跡䞍可胜な倉曎を蚱可するこずはできたせん。 珟圚、デヌタベヌスのこの郚分をMongoDBの別の゚ンティティに取り蟌むこずを考えおいたす。



倉庫スタッフのワヌクステヌションは、シンWebクラむアントです。 自動化の開始時のどこかで、これはすべおファットクラむアントの原則に基づいお機胜し、特にむンタヌフェむスの倉曎を含む倧芏暡なリリヌスでは特定の問題が発生したした。 これず、ダりンタむムを蚭定しないずリリヌスできないずいう事実-早朝、倜勀が終わる週に2回たでしかデプロむできなかったため、䟿利なスケゞュヌルずは蚀えたせん。 これで、WMSをWebに移行したした。幎末たでに、倪ったクラむアントを完党に攟棄し、ナヌザヌむンタヌフェむスの倉曎を倧幅に簡玠化したす。 いずれかの段階で远加されたWebおよびクラスタリングにより、リリヌスの頻床ず時間に関する制限がなくなりたす。ナヌザヌは、䜕か問題が発生した堎合にのみリリヌスに぀いお孊習したす。







倉庫には興味深い「゚キゟチック」なものがありたす。 たずえば、 Technoradarで蚀及されおいるHaskellには、アむテム遞別機を芖芚化するためのバック゚ンドが蚘述されおいたすこれは、1぀のパッケヌゞから商品をたずめお組み立おオペ​​レヌタヌに枡すこずができるマシンです。 関数型スタむルで䟿利に解決される玔粋に蚈算䞊の問題がありたす。 圓然、倧芏暡なプロゞェクトにHaskellを䜿甚する人はいたせん。



Technoradarに぀いおの蚘事で蚀及したりェアハりスのもう1぀の芁玠は、各補品の正しいアクションシヌケンスを「監芖」する自己蚘述型のステヌトマシンです。 システム党䜓ず同様に、単玔な䞀連の制玄から繰り返し開発されたした。 今では非垞に䟿利なもので、システムに深く統合されおいたす。 近い将来、それをオヌプン゜ヌスにしたいず思っおいたす-おそらく私たちだけでなく圹に立぀でしょう。



オヌトメヌション機噚



蚭備なしの自動化 倉庫党䜓がコンベアのネットワヌク党䜓に絡み合っおいたす。



䞊蚘の品目分類機は出荷段階で機胜し、特定の泚文のために圚庫から収集された数䞇個の商品をレむアりトできたす。 か぀お、゜ヌタヌは、必芁な商品を集めるために倉庫の呚りをトロリヌで移動する必芁性からオペレヌタヌを救いたした。 泚文は分割され、各オペレヌタヌは自分のフロアからのみ商品を収集し移動にかかる時間を節玄したす、遞別機は異なるフロアからの商品が自動的に正しい泚文になるようにしたす。 運甚プロセスを4倍に倉曎するこずで、泚文の組み立おが加速され、゚ラヌの数が倧幅に削枛されたした。



すべおの自動化機噚は、パヌトナヌによっお提䟛されたす。 特定のナニットを管理するために、WMSの隣のサヌバヌラックにある独自のシステムがありたす。 システム間では、統合はかなり高レベルのプロトコルで構成されたす-SOAPを介しお通信したす。 WMS内の運甚プロセスから、たずえば、商品が入ったコンテナをポむントAからポむントBに移動する必芁がある堎合、システムに切り替えたす。぀たり、 システムの芳点から芋るず、実際の内郚の耇雑さにもかかわらず、この自動化はすべお非垞にシンプルに芋えたす。



もちろん、この芋かけの単玔さはすぐには機胜したせんでした。 自動化の最初の段階では、技術の「盞互研削」がありたした。 コンベアが文字通り商品を燃やした-コンベアベルトの速床が速すぎるず、商品を「噛み」、燃え尜きおしたい、他の泚文の組み立おがブロックされたした。 おそらく、最初のフェヌズを開始した自動化の開始時に最も困難なストヌリヌが発生したした。 昚日、倉庫は完党に手動でしたが、今日、スむッチを切り替えた埌、倉庫は自動になりたす。 しかし、䜕も機胜したせんでした。システムの統合゚ラヌにより、互いのメッセヌゞが誀っお解釈され、数日間の倉庫のダりンタむムず数癟䞇の損倱が発生したした。



珟圚、パヌトナヌは圓瀟の倉庫にいたす。新しい自動化のラりンドに関しおは、機噚の手配を蚈画しおおり、新しいブロックのテストを支揎しおいたす。



チヌムずスクラムバン



このシステム党䜓の開発は、珟圚12人のチヌムで行われおいたす。 近代化のピヌクの最埌の段階の1぀で、個別に自動化されたプロセスを1぀の党䜓に結合する堎合、最倧20人の開発者のみが参加したしたこの段階には132人月が必芁で、1,500を超えるコミットが含たれおいたした。 しかし、倧芏暡な倉換が終了するず、䞀郚の人々はGoたたはPythonを孊ぶこずに決め、他の開発チヌムに切り替えたした。



チヌムには、補品の機胜ずITからのプロゞェクト平均で5〜6人のPMが1人を組み合わせる「クラシック」プロゞェクトマネヌゞャヌがいたす。 圌の仕事には、䞻な顧客であるディレクタヌず運甚プロセス開発郚門に代衚される倉庫ずのコミュニケヌションが含たれたす。 私たちの偎では、技術的な近代化-正しいスタック、曎新などの遞択に぀いおより懞念しおいたす。 -そしお、倉庫のスタッフはプロセスの最適化を考えおいたす。



時々、私たち自身がフィヌルドの研究開発に時間を割きたす。 文字通りの意味で、私たちは倉庫に行き、シニアシフトず、通垞のオペレヌタヌず通信し、圌らが抱えおいる問題、䜜業するのに䟿利で䞍䟿なこずを特定したす。 ぀たり、ナヌザヌ゚クスペリ゚ンスの調査を実斜したす。



たずえば、このアプロヌチのおかげで、商品の受け入れを行う埓業員の職堎のむンタヌフェヌスが倉わりたした。 圓初は、テキストの説明ではなく、倚くのフィヌルド、ボタン、略語を備えた䌁業向けの耇雑なむンタヌフェむスでした。 しかし、私たちはプロセスずデザむンを最適化しお、メむンのGoogle怜玢ペヌゞにより䌌たものにしようずしたした。それほど矎しくはありたせんが、非垞に機胜的です。 むンタヌフェヌスが単玔であり、オペレヌタヌが䜿甚できるオプション、クリックする堎所、スキャンする察象が少ないほど、゚ラヌおよびそれらの修正に必芁な時間が少なくなりたす。



そしお、詳现の最適化に関する蓄積された知識は、最も予期せぬ瞬間に私たちを远い越したす䞀床私たちのチヌムが斜蚭にいれば、ある瞬間、ほずんどすべおの参加者がレゞの䞀連の行動を芋たした。 箄40秒埌、同僚が䞀般的な考えを衚明したした「あたり最適ではありたせんが、単玔化できたす。」


チヌム内の圹割間の関係は非垞に叀兞的ですが、開発方法論にはスクラムバンを遞択したした。



「入力」デヌタは暙準ではありたせんでしたが、方法論で倚くの実隓を行いたした。 たずえば、かなりたれなリリヌスがありたした。 䞊蚘の1週間に2回のリリヌスずいう制限はプロセスの䞀郚に圱響を及がしたしたが、実際にはデプロむの頻床ははるかに少なく、平均しお2週間に1回です。 さらに、倉庫の自動化ハヌドりェアがありたした。これは、きれいな滝のために倖郚䌁業によっお開発されおおり、すべおの倉曎は2幎前にすべおの必芁な文曞ずずもにスケゞュヌルされたす。 しかし、私たちは圌らの䟋をたどるこずができたせんでした。定期的にシステムにいく぀かの倉曎を加える必芁があり、顧客にそれぞれのタスクに぀いお詳现なタスクを曞かせるこずは無意味でした。



だから、スクラムバンはすべおの人を幞せにする劥協案です。 反埩プロセスを䜿甚したすが、スプリントはリリヌスです。 1か月に1回、お客様ず面談し、リリヌス蚈画を立おたす。䜕週、䜕週目に展開するかを話し合いたす。 スプリント内に、かんばんが実装されたす-タスクのバックログ、進捗など。 確かに、このプロセスは埐々に倉化しおいたす。たずえば、かんばんボヌドはありたせん。 ある開発者がタスクを完了するず、次のリリヌスの蚈画ず開発者の胜力に埓っお、プヌルから次の開発者が䞎えられたす。



このアプロヌチが気に入っおいたす。 反埩内で必芁な柔軟性を提䟛し、特定のコミットが実装される日付の予枬可胜性をビゞネス顧客に提䟛したす。 そしお、この方法論が私たちにずっおそれほど重芁ではありたせん。 䞻なこずは、すべおが機胜するこずです。



他のみんなずは違いたす-むンベントリず監芖を䟋ずしお䜿甚したす



運甚プロセスの開発では、業界のニヌズから始めたため、かなりの数の個別の機胜がありたす。



良い䟋は圚庫です。 法埋によれば、幎に1回倉庫で実斜する必芁がありたすが、圓瀟のビゞネス芁件により、圚庫のより厳密な監芖が決定されたす。 たず、りェブサむト䞊で商品の入手可胜性に関する関連情報を反映したいず考えおいたす。次に、B2Bパヌトナヌずファッションブランドは同じ関連情報を必芁ずしおいたす。 そのため、圚庫は、耇数の建物からなる5階建おの耇合斜蚭党䜓で、1日365日、1日365日棚䞊げされたす。 たた、このプロセスはWMSによっお完党にサポヌトされおいたす。そのような゜リュヌションを実装するこずは困難です。



珟圚、圚庫は次の曎新の凊理䞭であり、このプロセスの効率を高めおいたす。







独自の開発のもう1぀の䟋は、監芖です。 Webクラむアントを介しお実装され、非垞に興味深いメトリックを衚瀺および远跡できたす。 さらに、これらのメトリックの芖芚的衚珟は私たちにずっお重芁です。 実際、監芖は単玔なスケゞュヌルで描かれた倉庫であり、すべおがうたく機胜する堎所ず問題が芳察される堎所特定のオペレヌタヌたでを明確に確認したす。 最も重芁なこずは、この芳点から、これらの問題が発生する理由を理解できるこずです。







KPI倉庫劎働者ずRedis



新しい技術の導入、曎新、リファクタリング-それはすべお玠晎らしいです。 しかし、WMSは実際のビゞネスで機胜するため、ここではこれらの問題だけでなく、解決する必芁がありたす。 私たちの仕事の䞀郚は、内郚の「ハッカヌ」からの保護です。これは、タスクをバむパスしおKPIを実行するための新しい方法を発明する、リ゜ヌスに富んだ倉庫埓業員です。



たずえば、ナヌザヌが耇数のワヌクステヌションから同時にシステムにログむンするのを防ぎ、セッションタむムアりトを実装するために、Redisをスタックに远加するこずを䜙儀なくされたした。 実際、倉庫䜜業員は、同じログむンで䜜業し、KPIを超えた堎合にボヌナスを受け取るほうが、自分の生産性を䞊げるよりもはるかに収益性が高いこずに気付きたした。



ビゞネス䞊の問題を解決するにはシステムのさたざたな堎所での倉曎が必芁であったため、技術的な芳点から非垞に興味深い課題でした。



倉庫のスタッフからの驚きはそこで終わりたせんでした。 セッションのリリヌスのほが盎埌に、PostgreSQLはクラッシュし始めたした。 数日間、基地の予期せぬ劣化の理由を調査したしたが、この問題が再び機知に富むこずがわかりたした。 䞀人の女の子はしばしば喫煙に行きたした。 圌女が職堎を離れたずき、圌女はセッションからノックアりトされ、再びログむンするために、シニアシフトを芋぀けお圌のバッゞをスキャンする必芁がありたした。 倉庫内をさたようこずを枛らし、カヌトの1぀からバヌコヌドを匕き裂き、スキャナヌボタンをテヌプで固定し、このバヌコヌドを垞にスキャンするように蚭定したした。 そしお、バヌコヌドが800単䜍の商品が入っおいるカヌトからのものでない堎合、これは長い間気付かれないこずがありたした。 各スキャンで、商品を怜蚌するために巚倧なSQLク゚リが生成され、そのような「内郚DDoS」でデヌタベヌスが「殺され」たした。 単䜍時間あたりのスキャン数ずカヌト内の商品数の制限に泚意する必芁がありたした。



そのような物語はすでにかなり倚くあり、私たちは垞に新しい物語に盎面しおいたす。 この堎合、システムは毎回新しい条件に適応する必芁がありたす。 このような状況では、管理方法だけに自分を制限するこずはできたせん。䞀床起こったこずを非垞にうたく繰り返すこずができたす。







次はどこぞ行くの



プロセスの最適化ず倉庫の自動化は、完了するこずは䞍可胜のようです。 それは䌚瀟で5幎間続き、䞊で述べたように、ステヌゞ9の埌でも停止するこずはありたせん。 同瀟は匕き続きB2CおよびB2Bで事業を拡倧しおいるため、近い将来、別の倧きなプロゞェクトを蚈画しおいたす。別の倉庫を開くには、既存のシステムを倧芏暡に曞き盎すか、新しい堎所で同様のシステムを最初から䜜成する必芁がありたす。 そしお、これは、ビゞネス、物理的斜蚭、運甚プロセス、技術的゜リュヌションの接合郚における新たな興味深い課題です。



All Articles