Você já encomendou a entrega? Como a Crossroads entrega 6.000 pedidos por dia

As pessoas adoram entrega. Por uma pequena taxa, você compra a oportunidade de obter os bens necessários sem sair de casa: comida do seu restaurante favorito, móveis grandes, um livro que você queria ler por um longo tempo e, de fato, qualquer coisa. E o aumento no número de serviços para entrega rápida de tudo no mundo apenas confirma esta tese. Sim, e para as lojas é uma vantagem - ele fez uma parceria com qualquer entrega de mercadorias até a porta e aumentou seu cheque.

Nós da “Crossroads” temos nossa própria entrega. Para uma pessoa de fora, o processo de entrega da loja para a casa é mais ou menos assim:

  1. Eu escolhi algo no site e coloquei na cesta.
  2. Digitei o endereço e paguei o pedido.
  3. A loja rapidamente deu o pedido ao correio.
  4. O correio entregou o pedido.

De fato, tudo é um pouco mais complicado. Meu nome é Vitaliy, sou o chefe do departamento de desenvolvimento e hoje vou lhe contar como tudo funciona para nós. E sobre o que.



Duas aplicações são responsáveis ​​pela estabilidade do processo - uma vitrine e uma aplicação móvel do usuário. Tudo é clássico com a vitrine - o comprador visita o site, passa algum tempo escolhendo produtos e enchendo a cesta, examinando os cartões de produtos. A etapa final aqui é fazer um pedido. Depois disso, o pedido é transferido para processamento posterior no back office.

Em geral, o back office de uma loja on-line é um sistema no qual muitas ações são realizadas em mercadorias: prescrevemos a participação de mercadorias em determinadas promoções, vinculamos faixas a isso, destacamos zonas de marca e muito mais. Obviamente, os pedidos são processados ​​aqui. Quando o comprador conclui o processo de pedido e o pedido chega na retaguarda, ele deve ser confirmado. Isso acontece automaticamente se já conhecemos esse comprador ou pelo operador no modo manual, de acordo com o esquema usual “Olá, você pediu alguma coisa aqui, confirme, os dados estão corretos?” E assim por diante. E aqui a participação do back office no processo de formação da entrega já está terminando, o pedido é confirmado, o status é alterado de "Processado" para "Em andamento". Um pedido no WMS (onde são reservados, coletados, encomendados produtos que não estão disponíveis e que são feitos sob encomenda do fornecedor) e, ao mesmo tempo, pode começar a ser roteado pelos logísticos. Em geral, WMS e logística são sistemas independentes que trabalham com pedidos em paralelo.

Enquanto isso, em estoque


O sistema WMS é uma combinação de nosso software, armazéns, funcionários desses armazéns e dispositivos, o que simplifica significativamente a vida desses funcionários. Um pequeno terminal, montado no pulso de um funcionário, permite montar rapidamente um pedido na sequência desejada.



A consistência é importante porque entregamos pedidos aos nossos clientes em caixas especiais da Crossroads. E com uma caixa uma coisa - é retangular. Como a maioria das caixas.

Portanto, é necessário observar duas condições ao mesmo tempo - e encher a caixa o máximo possível, para que o cliente não receba duas caixas apenas pela metade (é antieconômica, ecológica e geralmente estranha) e encha a caixa de acordo com o princípio “do pesado ao leve” " O sistema leva em consideração o tamanho do produto e sua embalagem. Conhecendo este e os parâmetros da caixa, é possível formar pedidos para que a caixa seja preenchida ao máximo. Isso também permite que você se livre de situações em que o carro do correio parece ter deixado para substituir todos os 100% carregados com caixas, mas meio vazios.

E o sistema grava para o trabalhador do armazém em que ordem coletar o pedido. Poucas pessoas querem uma caixa em que um funcionário de um armazém amável coloque três dúzias de ovos no fundo, colocando cuidadosamente em cima de 10 pacotes de leite e alguns quilos de vegetais, por exemplo. Com leite, com certeza, tudo ficará bem, o que não se pode dizer sobre os ovos. Todos os tipos de cookies frágeis também estão sempre no topo.



Além disso, você deve seguir as regras da vizinhança de mercadorias. Digamos que será um pouco triste para você, se você pediu duas variedades de maçãs, pãezinhos e peixe, e todo esse material fede não com peixe, mas com detergente em geral, porque tudo chegou em uma caixa. Portanto, alimentos - separadamente, produtos químicos domésticos - separadamente. A vizinhança de mercadorias é determinada pelos padrões SanPiN, a propósito. E nós os observamos. Do ponto de vista humano, esse é um modelo lógico e verdadeiro. Do ponto de vista do armazém, essas são variáveis ​​adicionais ao construir a rota do trabalhador do armazém.

O sistema leva tudo em consideração e constrói uma rota, graças à qual o funcionário coleta a ordem na sequência desejada - o terminal o leva às prateleiras corretas. Se você exagerar, parece que o trabalho da parte do cliente do aplicativo é o seguinte: “Cara, vá para B4, leve 5 pacotes de farinha com eles, coloque-os no fundo da caixa. Depois da A2, pegue o leite. Não, não este, está nessa cela.



Depois que eles fizeram um pedido para os funcionários do armazém, foi necessário fazer um pedido para os correios. Isso ajuda não apenas a criar rotas, mas também no processo de imprimir cheques rapidamente e observar novos status dos pedidos. Bem, métricas, onde não existem métricas - vemos onde um mensageiro específico está localizado, ele normalmente se encaixa no cronograma ou não, ele imprimiu um cheque ao transferir o pedido ao comprador ou não, e assim por diante.



A propósito, por que não imprimimos cheques de uma só vez: quando levamos nossas caixas para o cliente, ele pode recusar qualquer produto por qualquer motivo. Por exemplo, ele conseguiu sair para comprar sorvete para si mesmo, ou imediatamente ferveu dois litros de leite e decidiu que peixe e pepino em conserva para hoje à noite era apenas uma idéia. Em geral, pode haver muitas razões para rejeitar qualquer posição, incluindo uma "mudança de opinião". Portanto, o correio exclui as posições que o cliente recusou e imprime o cheque final.

Sob o capô


Nós escrevemos nossos aplicativos no Swift e Kotlin (iOS e Android, respectivamente). Nesse caso, todo o back-end está girando em PHP, decidimos fazer o banco de dados no Postgres, para o broker que temos o Rabbit mq.

Sim, é claro que em 2019 todo mundo faz tudo com base no princípio do celular primeiro, mas, de alguma forma, o site é mais próximo e mais caro. Ele trabalha na Lavarel. Na direção dos microsserviços, também estamos apenas começando a nos mover; portanto, agora o site e o aplicativo são um monólito tão robusto que fica parado e espera que ele já seja retirado para os microsserviços.

O Postgres mencionado, a propósito, mostra-se como um gargalo de tempos em tempos, então vamos mudar alguma coisa. Utilizamos ativamente balanceadores, porque a carga nos sistemas pode assumir valores muito diferentes.

Todo esse material está convenientemente localizado nos servidores neste formato:
16 servidores de aplicativos com PHP-FPM e Postgres, o Postgres possui 1 mestre e 4 escravos. Como você pode ver, não há bicicletas. Todo o back office é completamente integrado aos sistemas internos - WMS, armazém, logística, contabilidade e marketing.

Lançamos o aplicativo e o site para celular em 2017. Hoje, a carga média no sistema é de cerca de 6.000 pedidos por dia. Por um lado, não é muito, por outro lado, ainda vale a pena considerar que isso não é distribuído uniformemente por 24 horas, as pessoas não pedem comida o tempo todo, há também uma liga para a atividade padrão durante o horário de trabalho. As próprias consultas PHP (incluindo a API) são de cerca de 70.000 em 5 minutos.

Caminho do pedido


Assim que o pedido é montado com sucesso no armazém e pronto para a viagem, ele é roteado. Agora, começamos a usar o Yandex.Rotando para isso - um bom produto que nos permite construir rapidamente a rota ideal para os motoristas, levando em consideração as situações de trânsito - engarrafamentos, clima, pisos, barreiras e outras alegrias. Isso nos ajuda a economizar combustível, para que os correios não façam círculos pela cidade. O motorista tem uma rota clara, uma lista da ordem na qual as ordens devem ser transportadas, as próprias encomendas são colocadas no carro de forma a serem entregues na mesma ordem.



Fizemos o pedido de correios para Android, como eu já escrevi, no Kotlin. É nele que o roteamento é costurado, a capacidade de se comunicar com o cliente (ocultamos o número do cliente, o motorista tem apenas o botão "Ligar"), a capacidade de editar o pedido e remover algo, imprimir o cheque e também pagar pelo pedido.



Separadamente, sobre telemetria: o aplicativo considera tudo: o tempo de viagem, a hora de chegada ao cliente e a hora da partida, isso ajuda muito a criar muitos relatórios analíticos e rastrear a logística. Por exemplo, o correio não se move há algum tempo, mas em geral ele deveria - eles entram em contato com ele e especificam se está tudo bem. A conexão com a logística a esse respeito é muito importante, porque há situações em que o correio, por exemplo, às 15h00 deve estar em um endereço e às 15h30 - em outro. Mas, no primeiro endereço, houve um problema devido ao controle de acesso no quintal, uma barreira ou portão, tive que gastar mais 10 minutos para entrar em contato com o cliente, para que o cliente contatasse a segurança e assim por diante, você sabe como isso acontece.



Mas, do ponto de vista do cliente, às 15h30, isso nunca é problema dele, ele está aguardando o pedido no horário indicado. Portanto, o motorista contata os logísticos, eles monitoram de perto especificamente sua telemetria e eles mesmos entram em contato com o próximo cliente, especificando o intervalo de tempo para entrega devido a um problema na barreira. É claro que, em qualquer caso, é triste quando o correio chega atrasado. Mas quando ele está atrasado e não avisa sobre isso - é ainda pior.

Em geral, se é básico, é assim que trabalhamos. Você pode estar mais interessado em aprender sobre a operação do armazém e do WMS, ou sobre aplicativos para os trabalhadores do motorista ou do armazém, ou sobre o roteamento; em seguida, basta escrever sobre isso nos comentários e farei uma postagem separada.

Obrigado pela leitura.

Source: https://habr.com/ru/post/pt484220/


All Articles