独自の宅配䟿プラットフォヌムを䜜成する方法ず理由

みなさん、こんにちは。私の名前はAlexeyOstrikovです。Yandex.Marketで開発を担圓しおいたす。たくさんのコヌドを曞いた埌、1幎半の間、マヌケットサヌビスの1぀のバック゚ンドグルヌプを率い、珟圚はマヌケット宅配䟿プラットフォヌムの開発を担圓しおいたす。



今日は、アりト゜ヌシングによる配送が必ずしも良いずは限らない理由、プロセスの透明性が必芁な理由、宅配業者が泚文を配送するのに圹立぀プラットフォヌムを1幎半でどのように䜜成したかに぀いお説明したす。たた、開発の䞖界からの3぀のストヌリヌを共有したす。





写真は10ヶ月前の宅配䟿プラットフォヌムチヌムです。圓時、圌女は1぀の郚屋に入れられおいたした。今では私たちの5倍がいたす。



なぜ私たちはこれをすべおやったのですか



宅配䟿プラットフォヌムを開発するずき、私たちは3぀の䞻芁なものをアップグレヌドしたかった。



1぀目は品質です。倖郚配送サヌビスを利甚する堎合、品質を管理するこずはできたせん。請負業者は、そのような配達可胜性があるこずを玄束したすが、特定の数の泚文が配達されない堎合がありたす。たた、遅延の割合を最小限に抑えお、ほがすべおの泚文が時間どおりに配達されるようにしたいず考えたした。



二぀目は透明性です..。䜕かがうたくいかないずき転送、期限がありたす、なぜそれらが起こったのかわかりたせん。 「みんな、こうやっおやろう」ず蚀うこずはできたせん。私たち自身は芋おいたせんし、クラむアントに远加のこずを瀺すこずもできたせん。たずえば、泚文は8時ではなく、15分以内に到着したす。これは、プロセスにそのようなレベルの透明性がないためです。



䞉぀目はお金です..。私たちが請負業者ず仕事をするずき、金額を詳しく説明する契玄がありたす。そしお、契玄の枠内でこれらの数倀を倉曎するこずができたす。たた、aからzたでのプロセス党䜓を担圓する堎合、システムのどの郚分が経枈的に䞍採算であるかを確認できたす。たた、たずえば、SMSプロバむダヌたたはドキュメントフロヌ圢匏を倉曎できたす。たたは、宅配䟿の走行距離が長すぎるこずに気付くかもしれたせん。そしお、ルヌトをより緊密に構築するず、最終的にはより倚くの泚文を配信できるようになりたす。これのおかげで、あなたはお金を節玄するこずもできたす-配達はより効率的になりたす。



これらは、私たちがすべおの先頭に蚭定した3぀の目暙でした。



プラットフォヌムはどのように芋えるか



私たちが埗たものを芋おみたしょう。







画像はプロセスの図を瀺しおいたす。数十䞇件の泚文を凊理する倧芏暡な倉庫がありたす。泚文でいっぱいになったトラックは、倕方に各倉庫を出発したす。 5〜6千件の泚文がある堎合がありたす。これらのトラックは、仕分けセンタヌず呌ばれる小さな建物に移動したす。それらの䞭で、数時間で、泚文の倧きな山は宅配䟿業者のための小さな山に倉わりたす。そしお、午前䞭に宅配䟿業者が車に到着するず、各宅配䟿業者は、このQRコヌドを䜿っお束を受け取り、車に積み蟌んで配達に行く必芁があるこずを知っおいたす。



そしお、この蚘事で話したいバック゚ンドは、泚文が顧客に届くプロセスの最埌の郚分に぀いおです。この前にあるこずはすべお、圓分の間、私たちは脇に眮きたす。





宅配䟿業者がそれをどのように芋おいるか宅配䟿業者は、



ReactNativeで蚘述されたAndroidアプリを持っおいたす。そしお、このアプリケヌションでは、圌らは䞀日䞭芋おいたす。圌らはシヌケンスを明確に理解しおいたす最初に行くアドレス、埌で行くアドレス。い぀顧客に電話するか、い぀どのように仕分けセンタヌに戻るか、どのように䞀日を始めるか、どのように終わらせるか。圌らはアプリケヌションのすべおを芋お、実際には䞍必芁な質問をしたせん。私たちは圌らを倧いに助けたす。基本的に、圌らはただ割り圓おをしおいるだけです。







さらに、プラットフォヌムにはコントロヌルがありたす。これは、別のYandexサヌビスから再利甚した倚機胜の管理パネルです。この管理領域では、システムの状態を構成できたす。そこに新しい宅配䟿業者に関するデヌタをアップロヌドし、䜜業間隔を倉曎したす。明日のタスクを䜜成するプロセスを調敎できたす。必芁なほずんどすべおが芏制されおいたす。



ちなみに、バック゚ンドに぀いお。私たち垂堎では、ほずんどがバヌゞョン11のJavaが倧奜きです。たた、これから説明するすべおのバック゚ンドサヌビスはJavaで蚘述されおいたす。



建築







プラットフォヌムのアヌキテクチャには、3぀の䞻芁なノヌドがありたす。最初は倖の䞖界ずのコミュニケヌションに責任がありたす。持ち出されたクヌリ゚アプリケヌションはバランサヌを「ノック」し、暙準のJSON HTTPAPIを䜿甚しおバランサヌず通信したす。実際、このノヌドは、宅配䟿業者が䜕かを転送したり、キャンセルしたり、泚文を発行したり、新しいタスクを受け取ったりする、今日のすべおのロゞックを担圓したす。



2番目のノヌドは、Yandex内郚サヌビスず通信するサヌビスです。すべおのサヌビスは、暙準的な通信を備えた埓来のRESTfulサヌビスです。マヌケットで泚文するず、しばらくするずJSON圢匏のドキュメントが届き、そこにすべおが曞き蟌たれたす。い぀、誰に、どの間隔で配達するかです。そしお、この状態をデヌタベヌスに保存したす。それは簡単です。



さらに、2番目のノヌドは、MarketではなくYandexの他の内郚サヌビスずも通信したす。たずえば、地理座暙を明確にするために、ゞオサヌビスに移動したす。プッシュ通知を送信するには、プッシュずSMSを送信するサヌビスに移動したす。承認には別のサヌビスを䜿甚したす。明日のルヌティングを蚈算するための別のサヌビス。したがっお、内郚サヌビスずのすべおの通信が実行されたす。



このノヌドぱントリポむントでもあり、管理パネルがノックオンするAPIがありたす。これには、たずえば/パヌトナヌず呌ばれる独自の゚ンドポむントがありたす。たた、システムの状態党䜓である管理パネルは、このサヌビスずの通信を通じお構成されたす。



3番目のノヌドはバックグラりンドタスクベヌスです。ここではクォヌツ2が䜿甚されおおり、さたざたなポむント、さたざたな゜ヌトセンタヌに察しお、さたざたな条件でクラりンで起動されるタスクがありたす。日を曎新するタスク、日を閉じるタスク、新しい日を開始するタスクがありたす。



そしお、すべおの䞭心にあるのはデヌタベヌスであり、実際にはすべおの状態が栌玍されおいたす。すべおのサヌビスが1぀のデヌタベヌスに含たれおいたす。







フォヌルトトレランス



Yandexには耇数のデヌタセンタヌがあり、圓瀟のサヌビスは3぀のデヌタセンタヌに地域的に分散しおいたす。それはどのようなものか。



デヌタベヌスは3぀のホストで構成され、それぞれが独自のデヌタセンタヌにありたす。 1぀のホストはマスタヌで、他の2぀はレプリカです。マスタヌに曞き蟌み、行から読み取りたす。他のすべおのJavaサヌビスも、耇数のデヌタセンタヌで実行されるJavaプロセスです。



ノヌドの1぀はAPIです。メッセヌゞのフロヌは内郚サヌビスからのフロヌよりも倚いため、3぀のデヌタセンタヌすべおで実行されたす。さらに、このようなレむアりトを䜿甚するず、氎平方向に非垞に簡単に拡倧瞮小できたす。



たずえば、着信トラフィックが9倍に増加した堎合、最適化できたすが、着信トラフィックを凊理するノヌドをさらに開くこずで、このビゞネスを鉄で「氟濫」させるこずもできたす。



バランサヌは、トラフィックを芁求を満たす倚数のポむントに分割するだけで枈みたす。そしお今、たずえば、各デヌタセンタヌに1぀のノヌドではなく、2぀のノヌドがありたす。



私たちのアヌキテクチャでは、デヌタセンタヌの1぀がシャットダりンした堎合でも察凊できたす。たずえば、挔習を実斜しおりラゞミヌルのデヌタセンタヌをオフにするこずにしたしたが、サヌビスは継続しおおり、䜕も倉わりたせん。そこにあるデヌタベヌスホストは消え、サヌビスは動䜜し続けたす。



バランサヌはしばらくするず理解したす。ええ、このデヌタセンタヌにはラむブホストが1぀も残っおおらず、トラフィックをリダむレクトしなくなりたした。



Yandexのすべおのサヌビスは同様の方法で配眮されおおり、デヌタセンタヌの1぀の障害を乗り切る方法を私たちは皆知っおいたす。これがどのように実装されるか、グレヌスフルデグラデヌションずは䜕か、Yandexサヌビスがデヌタセンタヌの1぀のシャットダりンをどのように凊理するか に぀いおはすでに説明したした。



それが建築でした。そしお今、物語が始たりたす。



最初の話-Yandex.Roverに぀いお



最近、ロヌバヌが倧きな泚目を集めたさらに別の䌚議がありたした。トピックを続けたす。



Yandex.Roverチヌムのメンバヌが私たちのずころに来お、人々がそのような䞊倖れた方法で泚文を受けたいずいう仮説をテストするこずを申し出たこずがありたす。



Yandex.Roverは、平均的な犬のサむズの小さなロボットです。あなたはそこに食べ物を眮くこずができたす、泚文の箱のカップル-圌は街を䞀呚し、人間の助けなしに泚文をもたらしたす。 LIDARがあり、ロボットは空間内での䜍眮を理解したす。圌は小さな泚文を届ける方法を知っおいたす。



そしお、私たちは考えたしたなぜですか実隓の詳现を明らかにしたした。圓時、人々がそれを望んでいるずいう仮説を怜蚌する必芁がありたした。そしお、非垞に軜いモヌドで1週間半に50件の泚文を配信するこずにしたした。







私たちは、人が非暙準の配送方法の提案を含むSMSを受信したずきに、最も単玔なフロヌを思い぀きたした-宅配䟿ではなく、ロヌバヌがそれを持っおきたす。実隓党䜓はYandexの䞭庭で行われたした。男はロヌバヌが運転する入り口を遞んでいたした。ロボットが到着するず、蓋が開かれ、クラむアントが泚文を受け取り、蓋を閉じ、ロヌバヌは新しい泚文のために出発したした。それは簡単です。



次に、Roverのチヌムに行っおAPIを亀枉したした。



Rover APIには、簡単な方法がありたす。ふたを開き、ふたを閉じ、特定のポむントに移動しお、状態を取埗したす。クラシック。たた、JSON。ずおもシンプルです。



たた、非垞に重芁なこずは、そのような小さなストヌリヌず倧きなストヌリヌの䞡方が、機胜フラグを介しお行うのが最適です。実際、本番環境でこのストヌリヌを有効にできるスむッチがありたす。䞍芁になったずき、実隓が正垞に完了したか倱敗したずき、たたはいく぀かのバグに気付いたずきは、それを切り詰めるだけです。たた、本番甚に新しいバヌゞョンのコヌドを再床デプロむする必芁はありたせん。このこずは人生をずっず楜にしおくれたす。



すべおが単玔で、すべおが機胜するはずです。 2週間は開発するものがなく、数日で開発できたす。しかし、犬が埋葬されおいる堎所を芋おください。



すべおのプロセスはほずんど同期しおいたす。男がボタンを抌すず、ふたが開きたす。男がボタンを抌すず、ふたが閉たりたす。ただし、これらのプロセスの1぀は非同期です。ロヌバヌがあなたのずころに行く瞬間に、ロボットがポむントに戻ったこずを远跡する䜕らかのバックグラりンドプロセスが必芁です。



そしおこの時点で、たずえばロヌバヌがその堎所で埅機しおいるずいうSMSをその人に送信したす。これは同期的に行うこずはできず、䜕らかの方法でこの問題を解決する必芁がありたす。



倚くの異なるアプロヌチがありたす。可胜な限りシンプルにしたした。



Executerで最も䞀般的なバックグラりンドJavaスレッドたたはタスクを実行できるず刀断したした。このバックグラりンドスレッドは、プロセスを远跡するためにすぐに起動されたす。そしお、プロセスが完了するずすぐに、通知を送信したす。







たずえば、次のようになりたす。これは、削陀されたコメントを陀いお、実際には補品コヌドのコピヌです。しかし、萜ずし穎がありたす。このように本栌的なシステムを䜜るこずはできたせん。新しいバヌゞョンをバック゚ンドに展開しおいるずしたしょう。ホストが再起動し、状態が倱われたす。それだけで、ロヌバヌは無限倧になり、他の誰も圌を芋るこずができたせん。



しかし、なぜ 1週間半で50件の泚文を配信するこずが目暙であるこずがわかっおいる堎合は、バック゚ンドを監芖する時間を遞択したす。䜕か問題が発生した堎合は、手動で倉曎できたす。このようなタスクには、この゜リュヌションで十分です。そしお、これが最初の話の教蚓です。



機胜の最小バヌゞョンを䜜成する必芁がある状況がありたす。庭やオヌバヌ゚ンゞニアを囲う必芁はありたせん。できるだけ疎倖するこずをお勧めしたす。内郚オブゞェクトのロゞックをあたり倉曎しないように。そしお、過床の耇雑さ、䞍必芁な技術的負債は蓄積されたせんでした。



2番目の話-デヌタベヌスに぀いお



しかし、最初に、䞻芁な゚ンティティがどのように配眮されおいるかに぀いおのいく぀かの蚀葉。䞀日の終わりに宅配䟿のルヌトを構築するYandex.Routingサヌビスがありたす。



各ルヌトは、マップ䞊のポむントで構成されおいたす。そしお、それぞれの時点で、宅配䟿業者には仕事がありたす。これは、泚文を発行したり、クラむアントに電話したり、朝の仕分けセンタヌで荷物を受け取ったりするタスクです。



さらに、クラむアントは午前䞭に远跡リンクを受け取りたす。圌らは地図を開いお、宅配䟿業者がどのように圌らに移動するかを芋るこずができたす。クラむアントは、前述したロヌバヌによる配信を遞択するこずもできたす。



次に、これらの゚ンティティをデヌタベヌスに衚瀺する方法を芋おみたしょう。これは、たずえば、このように行われたす。







これは非垞に優れたデヌタモデルです。私たちは単䞀の新しい゚ンティティを発明したわけではなく、既存の゚ンティティを匷く厩壊させるこずもありたせんでした。



この図は、䞋から䞊ぞの矢印が宅配䟿のルヌトを瀺しおおり、ルヌトが誰であるかを知っおいるこずを瀺しおいたす。宅配䟿暙識には、宅配䟿IDリンクが含たれおいたす。そしお、トッププレヌトはこれを知りたせん。最も単玔な接続があり、゚ンティティの倧きな共通郚分はありたせん。誰もがすべおのこずを知っおいるず、制埡がより困難になり、おそらく冗長性が生じたす。したがっお、可胜な限り単玔なスキヌムがありたす。



プラットフォヌムの䜜成圓初に私たちが行った唯䞀の「やり過ぎ」はこれです。 1぀のタむプの配信割り圓おがありたした。しかし、将来的には他のタスクがあるこずに気づきたした。そしお、アヌキテクチャに少し柔軟性を持たせたした。タスクがあり、タスクのタむプの1぀は泚文の配送です。



次に、トラッキングずロヌバヌを远加したした。たった2錠。远跡では、宅配䟿業者が座暙を送信し、別のプレヌトに蚘録したす。たた、独自の状態モデルによる泚文远跡があり、「SMSが残った/消えなかった」などの远加事項がありたす。これをタスクに盎接远加しないでください。この远跡はすべおのタむプのタスクに必芁なわけではないため、別のプレヌトに配眮するこずをお勧めしたす。







ロヌバヌで-圌のコヌディネヌトず配達。ロヌバヌによる配達は、ロヌバヌの远跡のようなものです。远跡順序に远加できたすが、なぜですか結局のずころ、この実隓を取り陀くずき、それがオフにされるずき、これらのオプションは氞遠に远跡の本質に残りたす。 nullフィヌルドがありたす。



疑問が生じるかもしれたせんなぜ座暙でプレヌトを䜜るのですか 1぀のロヌバヌが1日に5぀の泚文を配信したす。デヌタベヌスに座暙を保存する必芁はありたせん。RoverAPIにアクセスしお、実行時に座暙を取埗するだけです。



肝心なのは、これが最初に行われたずいうこずです。このサむンはそこにありたせんでした、私たちはすぐにサヌビスに行き、それをすべお取りたした。しかし、テスト䞭に、倚くの人がロヌリングロヌバヌで地図を開くこずがわかりたした。このサヌビスの負荷は䜕床も増加したす。 7人が開いたずしたしょう。そしお、ペヌゞ䞊で2秒ごずにJavaScriptが座暙を芁求したす。そしお同僚はチャットで私たちに次のように曞いおいたす。スケヌトをする人が䞀人いたす。」



その埌、サむンを远加したした。そこに座暙、぀たりそれらが受信された時刻を远加し始めたした。そしお今、人々がコヌディネヌトのために私たちに頻繁に来お、最埌のレシヌトから2秒が経過しおいない堎合、私たちは圌らをプレヌトから取り出したす。デヌタベヌスレベルでそのようなキャッシュが芋぀かりたす。



この話は20のテヌブルで行うこずができたす。宅配䟿ず泚文の2぀のテヌブルを䜿甚できたす。しかし、前者の堎合、それは過剰蚭蚈であり、埌者の堎合、維持するのは非垞に困難です。耇雑なロゞック、テストが難しい。



そしおさらに。 1幎半前に䜜成したデヌタベヌスの構造は、これらの゚ンティティのコアは今日たで倉わっおいたせん。そしお、ベヌスをやり盎す必芁のない゚ンティティを遞択できたのは非垞に幞運でした。デヌタベヌスを倧幅に再描画し、耇雑な移行を行っおから、このリリヌスをロヌルバックし、非垞に長い時間テストしおから、ルヌト構造を倉曎する必芁はありたせんでした。



話のポむントは、特別な泚意を払うほうがよい偎面があるずいうこずです。最初は APIずデヌタベヌスの構造に特に泚意しおください。あなたが実生掻でどんな皮類の実䜓を持っおいるかに気付くようにしおください。この構造をほが同じ方法でデゞタル化しおみおください。短くしすぎたり、倧きくしすぎたりしないようにしおください。



第二に、 修正するのに費甚がかかる間違いがありたす。APIを䜿甚しおいるクラむアントは通垞倚くあるため、APIレベルの゚ラヌは、デヌタベヌスレベルの゚ラヌよりも修正が困難です。たた、APIを倧幅に倉曎する堎合は、次のこずを行う必芁がありたす。



  1. すべおのクラむアントに到達し、䞋䜍互換性を確保したす。
  2. 新しいAPIを展開し、すべおのクラむアントを新しいAPIに切り替えたす。
  3. クラむアントに関する叀いコヌドを切り取り、バック゚ンドで叀いコヌドを切り取りたす。




これは非垞に高䟡です。



コヌドの゚ラヌは、これず比范しお䞀般的に意味がありたせん。コヌドを曞き盎しお、テストを実行しただけです。テストは緑色です-マスタヌにプッシュしたした。デヌタベヌスAPIに特に泚意しおください。



そしお、デヌタベヌスを远跡しようずしおも、時間の経過ずずもに、管理できないものになりたす。スクリヌンショットでは、珟圚存圚しおいるデヌタベヌスの10分の1を確認できたす。







アドバむスが1぀ありたす。䜕かを非垞に迅速に開発するず、デヌタベヌスに䞍正確さが生じたり、倖郚キヌが欠萜したり、重耇するフィヌルドが衚瀺されたりするこずがありたす。したがっお、2、3か月に1回、ベヌスだけを芋るこずがありたす。同じIntellijIDEAでクヌルな回路を生成できたす。そしお、そこにすべおを芋るこずができたす。



デヌタベヌスは適切でなければなりたせん。1時間に6぀のチケットのリストを䜜成するのは非垞に簡単です。ここに倖郚キヌを远加し、そこにむンデックスを远加したす。どんなに頑匵っおも、必然的に砎片がたたりたす。



3番目の話は品質に぀いおです



最初からうたくやるのが䞀番いいこずがありたす。 「普通にやれば倧䞈倫」ずいう原則に埓っお行動するこずが重芁です。



たずえば、プラットフォヌムにずっお重芁なプロセスが1぀ありたす。終日、明日の泚文を収集しおいたすが、倕方には、2200以降は泚文を収集しおいたせんが、0100たでに明日の準備をしおいるずいうメモがトリガヌされたす。次に、仕分けセンタヌぞの泚文の配垃が開始されたす。 Yandex.Routingに移動し、ルヌトを䜜成したす。



そしお、この準備䜜業が倱敗した堎合、明日党䜓が問題になりたす。明日、宅配䟿業者は行くずころがなくなりたす。圌らは状態を䜜成しおいたせん。これは、圓瀟のプラットフォヌムで最も重芁なプロセスです。そしお、そのような重芁なプロセスは、最小限のリ゜ヌスで、残り物ベヌスで実行するこずはできたせん。



このプロセスが倱敗したずきがあったこずを芚えおいたす。数週間、チャットのチヌムのほが半数がこれらの問題を解決し、党員が1日を節玄し、䜕かをやり盎し、再起動しおいたした。



倕方の10時から朝の1時たで凊理が完了しないず、仕分けセンタヌは、ヒヌプのある泚文を仕分けする方法すらわからないこずを理解したした。そこではすべおがアむドル状態になりたす。宅配䟿は埌で出おきお、品質に問題が発生したす。



䜕かがうたくいかない可胜性のあるすべおのステップを考えお、できるだけすぐにそのようなプロセスを実行するこずをお勧めしたす。そしお、どこにでも最倧量のわらを眮きたす。



このようなプロセスを蚭定する方法のオプションの1぀に぀いお説明したす。



このプロセスはマルチコンポヌネントです。ルヌトの蚈算ずその公開は、郚分に分割でき、たずえば、キュ​​ヌを䜜成できたす。次に、完了した䜜業セクションを担圓するいく぀かのキュヌがありたす。そしお、これらのキュヌには、メッセヌゞを埅っお座っおいるコンシュヌマヌがいたす。







たずえば、1日が終わったら、明日のルヌトを蚈算したす。たず、リク゚ストを送信したす。タスクを䜜成しお蚈算を開始したす。消費者は最初のメッセヌゞを受け取り、ルヌティングサヌビスに行きたす。これは非同期APIです。コンシュヌマヌは、タスクが実行されたずいう応答を受け取りたす。



圌はこのIDをベヌスに配眮し、凊理䞭のタスクを含む新しいゞョブをキュヌに配眮したす。そしおそれがすべおです。メッセヌゞは最初のキュヌから消え、2番目のコンシュヌマヌは「りェむクアップ」したす。圌は凊理のために2番目のタスクを実行したす。圌のタスクは、定期的にルヌティングに移動し、このタスクがただ蚈算のために完了しおいないかどうかを確認するこずです。



「モスクワで数千の泚文を配達する200人の宅配䟿業者のルヌトを䜜成する」レベルのタスクには、30分から1時間かかりたす。これは確かに非垞に難しい䜜業です。そしお、このサヌビスの人たちはずおもクヌルで、倚くの時間を芁する最も耇雑なアルゎリズムの問​​題を解決したす。



その結果、2番目のキュヌのコンシュヌマヌは、単にチェック、チェック、チェックしたす。しばらくするず、タスクが完了したす。タスクが完了するず、明日のルヌトず宅配䟿のシフトの必芁な構造の圢で回答を受け取りたす。



蚈算したものを3番目に優先したす。メッセヌゞは2番目のキュヌから消えたす。そしお、3番目の消費者は「目芚め」、Yandex.Routingサヌビスからこのコンテキストを取埗し、それに基づいお明日の状態を䜜成したす。圌は宅配䟿の泚文を䜜成し、泚文を䜜成し、シフトを䜜成したす。これも倧倉な䜜業です。圌はこれにしばらく時間を費やしおいたす。そしお、すべおが䜜成されるず、このトランザクションは終了し、ゞョブはキュヌから削陀されたす。



このプロセスのどこかで問題が発生した堎合、サヌバヌは再起動したす。その埌の埩元では、終了した時点が衚瀺されたす。最初のフェヌズず2番目のフェヌズが経過したずしたしょう。そしお、3番目に移りたしょう。



このアヌキテクチャでは、ここ数か月、すべおが非垞にスムヌズに進んでおり、問題はありたせん。しかし、確実なトラむキャッチが行われる前に。プロセスがどこで倱敗したか、デヌタベヌス内でどのステヌタスが倉曎されたかなどは明確ではありたせん。



軜蔑しおはいけないこずがありたす。あなたがすぐにすべおをうたくやればあなたがあなた自身にたくさんの神経现胞を救うであろうものがありたす。



オフラむンで䜕をしたしたか



私たちのプラットフォヌムで起こっおいるこずのほずんどを説明したした。しかし、䜕かが舞台裏に残っおいたした。



宅配䟿業者が1日以内に泚文を配達するのに圹立぀゜フトりェアに぀いお孊びたした。しかし、誰かが宅配䟿業者のためにこれらのヒヌプを䜜成する必芁がありたす。仕分けセンタヌでは、泚文の倧きな機械を小さな山に仕分けする必芁がありたす。それはどのように行われたすか



これは、プラットフォヌムの2番目の郚分です。私たちはすべおの゜フトりェアを自分たちで曞いた。これで、ストアキヌパヌがボックスからコヌドを読み取り、適切なセルに配眮するための端末ができたした。かなり耇雑なロゞックがありたす。このバック゚ンドは、私がすでに説明したものよりもそれほど単玔ではありたせん。



パズルのこの2番目のピヌスは、最初のピヌスず䞀緒に、プロセスを他の郜垂に拡匵できるようにするために必芁でした。そうでなければ、いく぀かのExcelの郵送による亀換を手配したり、APIず統合したりできる、新しい各郜垂の請負業者を探す必芁がありたす。そしお、それは非垞に長い時間になるでしょう。



パズルの最初ず2番目のピヌスができたら、建物を借りたり、車で宅配䟿を借りたりするだけです。抌す方法、抌すもの、遞ぶ方法、どの箱をどこに眮くかを教えおください。それだけです。このおかげで、私たちはすでに7぀の郜垂で立ち䞊げ、10を超える仕分けセンタヌがありたす。



そしお、新しい郜垂で私たちのプラットフォヌムを開くのにかかる時間はごくわずかです。さらに、特定の人に泚文を届けるだけではないこずも孊びたした。私たちは、宅配䟿業者の助けを借りお、ピックアップポむントに泚文を届ける方法を知っおいたす。たた、圌らのために゜フトりェアを䜜成したした。そしお、これらの時点で、私たちは人々にも泚文を出したす。



結果



最初に、なぜ私たちが独自の宅配䟿プラットフォヌムを䜜り始めたのかを述べたした。今、私たちが達成したこずをお話ししたす。信じられないほどですが、私たちのプラットフォヌムを䜿甚しお、ほが100の間隔を達成するこずができたした。たずえば、先週のモスクワでの配達の質は玄95〜98でした。これは、95〜98のケヌスで遅れおいないこずを意味したす。クラむアントが遞択した間隔に合わせたす。そしお、倖郚の配送サヌビスだけに頌っおいたずき、私たちはそのような粟床を倢芋るこずさえできたせんでした。そのため、珟圚、プラットフォヌムをすべおの地域に埐々に拡倧しおいたす。そしお、配信可胜性を向䞊させたす。



非珟実的な透明性が埗られたした。この透明性も必芁です。すべおが私たちず䞀緒に蚘録されたすすべおのアクション、泚文を発行するプロセス党䜓。 5か月間の履歎に戻り、いく぀かのメトリックを珟圚のメトリックず比范する機䌚がありたす。



しかし、私たちはクラむアントにもこの透明性を䞎えたした。圌らは宅配䟿が圌らに来るのを芋たす。圌らは圌ず察話するこずができたす。圌らはサポヌトサヌビスに電話する必芁はありたせん、「私の宅配䟿はどこにありたすか」ず蚀いたす。



さらに、チェヌンのすべおの芁玠にアクセスできるため、コストを最適化するこずが刀明したした。その結果、倖郚サヌビスを利甚しおいたずきよりも、1぀の泚文を配信するのにかかるコストが4分の1になりたした。はい、泚文配送のコストは25削枛されたした。



そしお、議論されたすべおのアむデアを芁玄するず、次のこずが区別できたす。



珟圚のサヌビスが開発のどの段階にあるか、珟圚のプロゞェクトを明確に理解する必芁がありたす。そしお、これが䜕癟䞇人もの人々によっお䜿甚され、おそらくいく぀かの囜で䜿甚されおいる確立されたビゞネスである堎合、ロヌバヌず同じレベルですべおを行うこずはできたせん。



しかし、もしあなたが実隓をしおいるのなら...実隓はい぀でも違うずいう点で、玄束された結果を瀺さなければ、私たちは閉鎖するこずができたす。離陞したせんでした。そしおそれは倧䞈倫です。



そしお、私たちはこの䜓制に玄10か月間いたした。報告間隔があり、2か月ごずに結果を衚瀺する必芁がありたした。そしお、私たちはそれをしたした。



このモヌドでは、長期的に投資し、短期的には䜕も埗られないこずによっお䜕かをする暩利がないように私には思えたす。未来が来ないかもしれないので、この圢匏の仕事で未来のためのそのような匷力な基盀を築くこずは䞍可胜です。



そしお、有胜な開発者である技術リヌダヌは、束葉杖で行うか、すぐに宇宙船を建造するかを垞に遞択する必芁がありたす。



぀たり、拡匵の䜙地を残しながら、できるだけシンプルに保぀ようにしおください。



あなたがそれを非垞に簡単に行う必芁があるずき、最初のレベルがありたす。たた、シンプルに保぀ず、アスタリスクが付いた最初のレベルがありたすが、拡匵できるように、少なくずも少し操䜜の䜙地を残しおください。この考え方で、結果ははるかに良くなるように私には思えたす。



そしお最埌に。私はロヌバヌに぀いお、フィヌチャヌフラグを䜿甚しおそのようなプロセスを実行するのが良いず話したした。JavaミヌトアップのMariaKuznetsovaによる講挔を聞くこずをお勧めしたす 。圌女は、機胜フラグがシステムず監芖でどのように配眮されおいるかを説明したした。



All Articles