Synchronisation des commandes
Contexte
Les commandes sont les données de base des vendeurs. Une grande partie du travail quotidien des vendeurs tourne autour des commandes. La fonction de base de l'application est de garantir que les commandes sont affichées complètement et en temps réel devant les vendeurs. Étant donné que les requêtes API dépendent du réseau, il existe des problèmes tels que l'instabilité du réseau et un temps de synchronisation long, l'application doit donc synchroniser les données de commande Taobao localement. Comment synchroniser rapidement et complètement les commandes avec la zone locale est une question qui sera abordée dans ce plan.
Il existe deux façons de synchroniser les commandes : 1. Synchronisation via API 2. Basé sur le service de synchronisation des commandes RDS. Cet article analyse principalement le scénario d'utilisation de l'API pour synchroniser les commandes. Pour plus d'informations sur l'utilisation de la synchronisation des commandes RDS, veuillez vous référer à //open.taobao.com/docs/doc.htm.htm?articleId=101587&docType=1&treeId=2.
Nom Explication
Commandes en ligne : commandes que le vendeur a vendues dans un délai de trois mois.
Commandes incrémentielles : Par rapport aux commandes qui ont été synchronisées avec le local, toute commande qui a été modifiée sur Taobao est une commande incrémentielle.
Message Service : Un canal pour transmettre les modifications des données (transaction) au client (application) en temps réel via une longue connexion HTTP.
APIIntroduction
taobao.trades.sold.get - Obtenez des commandes en ligne vendues dans les trois mois. Il convient à l'initialisation de l'utilisateur. L'ISV ne doit pas utiliser cette interface pour obtenir des commandes incrémentielles. Il n'est pas recommandé d'utiliser cette interface ou de l'utiliser le moins possible.
taobao.trades.sold.increment.get – Obtenez des commandes incrémentielles. Il convient aux commandes qui ont changé en synchronisation incrémentielle après l'initialisation de l'utilisateur. L'ISV ne doit pas utiliser cette interface pour obtenir des commandes dans les trois mois.
taobao.trade.fullinfo.get - Obtenez les détails d'une commande unique.
Plan de mise en œuvre
La synchronisation des commandes est principalement divisée en deux étapes : initialisation et acquisition incrémentielle :
1 L'initialisation consiste à synchroniser toutes les commandes en ligne dans un délai de 3 mois.
2. L'acquisition incrémentielle consiste à synchroniser les commandes modifiées sur Taobao, ce qui prend généralement moins de temps.
Les solutions suivantes se concentreront toutes sur la façon d'initialiser et d'obtenir progressivement.
Option 1
Processus de synchronisation :
Étapes principales :
u Données sur trois mois : Obtenez les identifiants de commande créés dans les 3 mois jusqu'à maintenant via taobao.trades.sold.get , Obtenez les détails de la commande via taobao.trade.fullinfo.get
u Données incrémentielles : obtenez désormais l'ID de commande incrémentielle via taobao.trades.sold.increment.get, puis obtenez les détails de la commande via taobao.trade.fullinfo.get
Champ d'application :
Convient pour tester la fonction de synchronisation des commandes par ISV ou pour les vendeurs de petite et moyenne taille dans un environnement de production pour la synchronisation des commandes. Cette solution est relativement inefficace. Sauf si le coût de mise à jour des anciennes applications est très élevé, son utilisation n'est pas recommandée à tout le monde. Il est recommandé d'adopter la solution suivante.
Option 2
Processus de synchronisation :
Étapes principales :
a) Tout d'abord, obtenez les détails de la commande créée dans les 3 mois jusqu'à hier 23:59:59 via taobao.trades.sold.get
u Trois mois de données :
b) Ensuite, obtenez l'ID de commande incrémentielle de 00:00:00 aujourd'hui à maintenant via taobao.trades.sold.increment.get, puis obtenez les détails de la commande via taobao.trade.fullinfo.get
u Données incrémentielles : surveillez les messages de modification de commande en temps réel via le client du service de messagerie, puis obtenez les détails de la commande via taobao.trade.fullinfo.get
Champ d'application :
Applicable à tous types de vendeurs, c'est une solution relativement complexe mais la plus efficace parmi toutes les solutions, et est recommandée pour tous les éditeurs de logiciels.
Partage d'expérience
Problème de commande manquante :
Mvia taobao.trades.sold.get taobao.trades.s old.incre ment.get lors de l'obtention Dans le order , le paramètre d'entrée de type de transaction n'interroge que certains types de commandes par défaut. Pour interroger tous les types de commandes, tous les types de transactions doivent être explicitement fournis en tant que paramètre d'entrée de type.
M Lors de l'obtention de commandes incrémentielles via taobao.trades.sold.increment.get, les résultats renvoyés sont triés dans l'ordre inverse selon l'heure de modification de la commande. La pagination doit être effectuée de l'arrière vers l'avant. empêcher le défilement vers l'avant. L'ordre a été modifié pendant le processus de page, ce qui a entraîné des commandes manquantes.
M Lors de l'obtention de commandes incrémentielles via taobao.trades.sold.increment.get, l'heure de début de chaque acquisition doit être avancée de manière appropriée d'environ 10 minutes (Double11Il est recommandé de avancer pendant la grande promotion Move environ 30minutes) pour éviter les commandes manquées causées par des retards dans la mise à jour des commandes dans la base de données en raison de la pression du système Taobao dans des circonstances extrêmes.
M Lorsque vous recevez des messages de changement de commande via des notifications actives, vous devez résoudre le problème de perte de message causé par le redémarrage du serveur ou la déconnexion du réseau. Veuillez vérifier le service de messagerie pour plus de détails.
Problèmes de performances :
M taobao.trades.sold.get Recevez les commandes des vendeurs vendus depuis trois mois
n Adopter la méthode de pagination avec use_has_next=true peut éviter le count(*) généré par chaque requête API à la base de données Taobao, améliorant ainsi considérablement la vitesse et la stabilité.
n Étant donné que l'interface d'obtention des commandes dans les trois mois est filtrée par l'heure de création, et que l'heure de création est immuable, tourner les pages d'avant en arrière n'entraînera pas de commandes manquantes, cela peut donc Omettez le count(*) dans la première étape et utilisez directement le paramètre d'entrée use_has_next=true pour l'obtenir en pages, jusqu'à ce que le tournage de la page soit terminé lorsque has_next=false est renvoyé dans le résultat.
n Si les champs renvoyés par l'interface ne peuvent pas répondre aux besoins de l'application, il est fortement recommandé d'obtenir uniquement le champ field=tid, puis d'obtenir les détails de la commande via taobao.trade.fullinfo.get .
n Étant donné que le volume de commandes sur trois mois du vendeur est relativement important, il est recommandé de diviser les commandes de trois mois en acquisitions quotidiennes afin de réduire la quantité d'analyse des enregistrements de la base de données Taobao en une seule fois. demande d’amélioration de l’efficacité.
M taobao.trades.sold.increment.get Obtenez des commandes incrémentielles
n Utilisez la méthode de pagination de use_has_next=true pour éviter à chaque fois APIDemandeCompte (*) généré par la base de données Taobao en même temps, améliorant ainsi considérablement la vitesse et la stabilité.
n Étant donné que l'interface d'obtention des commandes incrémentielles est filtrée par heure de modification et que l'heure de modification est variable, vous devez pager de l'arrière vers l'avant pour éviter de manquer des commandes. Pour tourner les pages de l'arrière vers l'avant, vous devez connaître la dernière page, vous devez donc utiliser use_has_next=false dans la première requête API pour compter le nombre total de commandes, calculer le nombre total de pages, puis définir use_has_next=true pour terminer les statistiques de commande et tournez la page de l’arrière vers l’avant.
n Si les champs renvoyés par l'interface ne peuvent pas répondre aux besoins de l'application, il est fortement recommandé d'obtenir uniquement le champ field=tid, puis d'obtenir les détails de la commande via taobao.trade. fullinfo.get.
M Lorsque vous utilisez taobao.trades.sold.get/taobao.trades.sold.increment.get pour obtenir uniquement le champ tid, il est recommandé de définir page_size sur la valeur maximale pour réduire le nombre d'API demandes et améliorer l’efficacité. Lors de l'obtention de plusieurs champs, vous pouvez définir page_size en fonction de vos propres conditions de réseau. Il est recommandé de le définir sur environ 50.
Gestion des exceptions :
M Les commandes synchrones utilisent généralement un traitement multithread. Étant donné que les requêtes API ont des limites de fréquence pour les applications, lors de la définition de la taille du pool de threads, vous devez le faire. Défini en fonction de la fréquence d'appel de l'API autorisée par TOP pour éviter que l'application ne puisse appeler l'API pendant une longue période en raison de la limitation actuelle.
M Pour les erreurs de type FAI ou les erreurs de connexion réseau renvoyées par l'API, le thread d'application doit automatiquement réessayer après un moment de veille. Pour les erreurs de type ISV renvoyées par l'API, l'application doit enregistrer des journaux pour un dépannage ultérieur et ne pas réessayer.
FAQ
- Il n'y a pas encore de FAQ sur ce document