2009-05-14 7 views
3

En observant les effets de l'indisponibilité actuelle de Google sur le Web, j'ai réfléchi à la manière d'éviter cela à l'avenir. Cela peut être une question stupide, mais existe-t-il un bon moyen d'inclure des API externes (par exemple, les bibliothèques AJAX de Google) de sorte que si l'API n'est pas disponible, la page y compris peut-elle continuer sans? Est-ce généralement une mauvaise idée d'utiliser des bibliothèques hébergées sur un serveur externe en général?Comment protéger un site contre les pannes d'API?

Répondre

7

Il est inévitable d'utiliser une balise de script pour charger des fichiers JavasScript interdomaines (cela entraînera un délai d'expiration si celui-ci est interrompu). Cependant, dans votre code, vérifiez que les objets API sont NULL pour éviter les erreurs:

E.g. au lieu de:

<script type="text/javascript"> 
    google.load("maps", "2"); 
    // Use Maps API 
</script> 

utilisation:

<script type="text/javascript"> 
    if(google != null) 
    { 
    google.load("maps", "2"); 
    // Use Maps API 
    } 
    else 
    { 
    // Fallback 
    } 
</script> 

Je ne pense pas que les pannes rares valent le rejet d'une gros API externe.

0

La plupart du temps, vous avez besoin d'accéder à des bibliothèques tierces sur le Web. La question que vous devez vous poser est combien avez-vous besoin de cela et pouvez-vous mettre en cache tout cela.

Si votre temps de fonctionnement doit être aussi proche que possible de 100%, vous devriez peut-être vérifier dans quelle mesure vous dépendez de ces tiers.

Si tout ce que vous obtenez est le temps une fois par heure, vous pouvez probablement mettre cela en mémoire cache pour que les choses continuent malgré tout. Si vous demandez à une tierce partie des données qui ne sont valides que pour cette milliseconde, vous devrez probablement examiner la gestion des erreurs pour vérifier qu'elles ne sont pas présentes.

La réponse à la question est entièrement basée sur les spécificités de votre situation.

1

Je pense que c'est une bonne idée d'utiliser des bibliothèques externes, car elle économise de la bande passante pour moi (lire $$). Mais c'est assez facile à protéger contre ce genre de panne d'api. Gardez une copie sur votre serveur et dans votre JavaScript vérifier si l'API a été chargée avec succès. Si ce n'est pas le cas, chargez celui sur votre serveur. Je pensais à jQuery et à YUI ici. Les autres gars ont raison sur les problèmes lors de l'utilisation de services réels comme la cartographie.

2

La meilleure réponse générale que je peux donner est, magnifiquement et se dégradent avec élégance & éviter d'envoyer des erreurs. Si le service peut devenir indisponible, attendez-vous à cela et faites le meilleur travail possible. B ut Je ne pense pas que ce soit une question à laquelle on peut répondre génériquement. Cela dépend de ce que fait votre site, des bibliothèques/API externes que vous utilisez, etc.

Vous pouvez faire une sorte de mise en cache pour toujours servir les pages avec des données plus anciennes. Si cela est autorisé, vous pouvez exécuter le moteur d'API sur votre propre serveur. Ou vous pourriez juste jeter des messages d'état aux utilisateurs.

Ce n'est pas une mauvaise idée de s'appuyer sur des API externes, mais l'un des principaux inconvénients est que vous avez peu de contrôle sur elle. Si ça s'en va? Bienvenue à un gros problème. Pannes Pas grand-chose que vous puissiez faire, mais attendez.

0

Il serait certainement assez facile d'inclure un commutateur dans votre application pour basculer à l'aide de Google ou d'un serveur Web local sur le serveur de votre bibliothèque YUI, JQuery ou similaire afin que vous puissiez basculer le fournisseur.

1

Une possibilité d'atténuer le problème (ne fonctionnera que si votre site est généré dynamiquement):

Mettre en place une tâche cron qui circule toutes les 10 minutes/heure/que ce soit, selon combien vous vous inquiétez. Essayez de télécharger le ou les fichiers externes que vous incluez, une tentative pour chaque hôte externe dont vous dépendez. Avoir un drapeau dans la base de données qui indique si chaque hôte externe individuel est actuellement disponible. Lorsque vos pages sont générées, vérifiez les indicateurs d'hôte externe et imprimez l'attribut source pointant vers l'hôte externe s'il est en haut ou une copie locale s'il est en panne.

Pour les points bonus, faites que le fichier téléchargé avec succès à partir du cronjob devienne la copie locale. Ensuite, quand on descend, votre copie locale représente la version la plus récente de l'hôte externe de toute façon.

3

Vous voudrez concevoir votre application pour la dégrader gracieusement (comme d'autres l'ont indiqué) et il existe actuellement un modèle de conception qui peut être utile pour ce faire. Lorsqu'il est implémenté correctement, le Proxy Pattern peut être utilisé comme portier pour vérifier si un service est disponible (entre autres utilisations) et renvoyer de manière appropriée à l'application les données correctes, les données mises en cache ou informer l'application que le service n'est pas disponible.

Questions connexes