La decisione sul routing domina ogni altra scelta architettonica in un aggregatore di consegna, perché le consegne in ritardo erano esattamente il problema che il cliente ci aveva assunto per risolvere. Abbiamo scelto un livello di routing multi-modale personalizzato rispetto a una singola API di navigazione commerciale perché la stessa mappa produce percorsi ottimali fondamentalmente diversi per un corriere a piedi, in bici, con monopattino e in auto. Ogni modalità ottiene il proprio profilo di velocità e modello dei costi di svolta, e il dispatcher assegna punteggi ai corrieri candidati in base al tempo stimato di arrivo, al carico corrente e all'idoneità della modalità per la distanza di consegna — poi ri-ottimizza continuamente man mano che nuovi ordini entrano in coda. Un'API di navigazione consumer, al contrario, presuppone una singola modalità di viaggio per richiesta e non ha il concetto di equità nel dispatch o carico della flotta, quindi qualsiasi affermazione onesta sui tempi deve essere ragionata nel nostro layer. Usiamo i provider di mappe per il grafo stradale e pedonale sottostante e stratifichiamo la nostra logica di scoring e dispatch sopra, il che rende il motore di routing portabile tra le città USA e UE senza riscrivere il dispatcher.
I SDK di consegna white-label commerciali sono stati eliminati presto: le loro euristiche di dispatch sono opache, i loro modelli di tempo di percorrenza presuppongono flotte solo auto, e i loro termini di licenza rendevano complicato il modello di account a tre lati. Costruire il motore di routing su standard aperti significava che l'intero percorso — catalogo, carrello, dispatch, app corriere — è un sistema coerente e di nostra proprietà, consegnato come parte della nostra pratica di sviluppo software su misura.
Motore di routing multi-modale personalizzato vs API di navigazione a modalità singola vs SDK di consegna white-label
| Dimensione |
Motore di routing personalizzato |
API navigazione a modalità singola |
SDK consegna white-label |
| Modalità di trasporto | A piedi, bici, monopattino, auto — profili separati | Una modalità per richiesta | Solitamente modello flotta solo auto |
| Equità nel dispatch e carico | Integrato nello scorer — ETA, carico, adeguatezza modalità | Nessuna — solo navigazione | Euristica opaca del vendor |
| Ri-ottimizzazione su nuovi ordini | Continua tramite job in coda | Ri-query manuale | Controllata dal vendor |
| Modello account a tre lati | Nativo — cliente, manager, corriere | Non applicabile | Difficile da estendere |
| Portabilità tra città USA e UE | Alta — scambia il grafo mappa, mantieni il dispatcher | Alta ma senza logica | Licenza vincolata alla regione |
| Proprietà dei dati | Completa — dati ordini e dispatch nel nostro piano | Le query vanno al vendor | In mano al vendor |
| Costo in scala | Prevedibile — solo per query sul grafo | Per richiesta, cresce con le ri-query | Tariffa vendor per ordine |
Riferimenti routing: Concetti di routing OpenStreetMap, Documentazione Apple MapKit, Riferimento posizione e mappe Android.