2009-02-04 6 views
0

J'ai un service qui accepte les rappels d'un fournisseur. Motivation: Je ne veux JAMAIS perdre de rappels (à moins bien sûr que mon réseau devienne inaccessible). Supposons que l'impossible se produise et que mon serveur mysql devienne inaccessible depuis un certain temps, Je veux me replier dans un magasin de persistance secondaire une fois que j'ai réessayé plusieurs fois et échoué.Un magasin de persistance de sauvegarde. Quelles sont mes options?

Quelles sont mes options? Files d'attente, cache en mémoire?

Répondre

1

Vous dites que vous recevez des "rappels" - vous n'avez pas précisé ce qu'ils sont. Quel est le protocole? Est-ce sur un réseau. Si c'était HTTP, alors je dirais que le meilleur moyen est que si votre application est incapable d'écrire les données dans le stockage permanent, il devrait retourner une erreur ("Essayer plus tard" si cela existe dans le protocole) pour l'appelant, qui devrait réessayer plus tard.

Un processus asynchrone tel qu'un rappel doit toujours être capable de faire face aux défaillances en aval et de mettre ses requêtes en file d'attente.

J'ai travaillé avec un fournisseur de paiement où cela a été le cas (Paypal). Si vous ne parvenez pas à traiter complètement la demande, envoyez simplement une erreur à l'appelant.

+0

Oui, le fournisseur appellera mon service via HTTP. Et oui, ils envoient des transactions financières bien que ce ne soit pas Paypal. – ashitaka

0

Je recommande une sorte de serveur de file d'attente de travaux. J'utilise personnellement Starling et j'ai eu de très bons résultats. Il parle le protocole memcache donc il est facile à utiliser comme une file d'attente persistante. Starling on Github

+0

Merci FlipFlop. Je vais regarder dans Starling. Github est en train de devenir un foyer de projets. – ashitaka

0

J'ai déjà placé une file d'attente dans SQLite pour cela. Bien que, dans mon cas, c'était pour protéger contre la perte du lien réseau au serveur MySQL - les données étaient générées localement.

0

Vous pouvez avoir un serveur MySQL de secours, et basculer votre connexion vers celle-ci en cas de panne du serveur principal. Si ce n'est que le magasin de basculement, vous pouvez probablement l'exécuter localement sur le serveur d'applications.

Questions connexes