35 votes

Gracieux de la maintenance des applications web

Hier Débordement de Pile dans les temps d'arrêt m'a fait penser à cela un peu...

J'habite en Australie (même si c'est probablement vrai pour la plupart des gens dans un non-US fuseau horaire) et je suis constamment accueilli avec "... est en cours de maintenance" droit au milieu de ma journée de travail. En fait, dans la dernière semaine, nous avons eu de Google Wave, DONC, et le Feu de camp, tous à tour de rôle va vers le bas. (Triste, Triste Panda :()

En Australie, le milieu de la journée de lundi, l'une des périodes les plus achalandées de la semaine est généralement quand les opérateurs de services de base aux états-unis (comme c'est dimanche soir, il décide de faire l'entretien. Je me rends compte que les services comme tant et Google Wave sont libres donc juste est juste, mais surtout lorsque Feu de camp est allé vers le bas j'ai pensé: "Oui, nous payons le même que n'importe quel autre client pour cette application et peut donc s'attendre à la même qualité de service?"

Alors que j'ai travaillé le développement d'applications web pour un certain nombre d'années, j'ai presque toujours travaillé sur des projets de systèmes internes et pour une très localisée de l'utilisateur de la base. Donc, je n'ai jamais eu le "Quand est le meilleur moment pour prendre le système vers le bas" de l'émission.

Mais je me demande, est-il un moyen pour effectuer gracieux de la maintenance d'une application web? (supposons que c'est quelque chose qui existe déjà dans la production de l'état pour des raisons de simplicité) je suis sûr qu'il y a des membres qui ont et ne s'attaquer à ce problème souvent... Comment voulez-vous faire? Est-il possible de ne pas nuire à l'étranger par les utilisateurs de votre service?

Aussi, si quelqu'un a des un aperçu de comment les grands acteurs comme Google ou Twitter gérer ce genre de chose, je serais vraiment intéressé à entendre parler de lui. Je sais qu'ils ont des temps d'arrêt, mais ce n'est pas comme beaucoup comme vous pouvez vous attendre pour le nombre d'utilisateurs qu'ils support et les fonctionnalités qu'ils libèrent. Elles doivent avoir une sorte de moyen de manutention maintenance (au moins choses mineures)...

Edit: j'ai pris sur les conseils d'un couple de membres ici et posté cette question sur le Serveur Faute de voir ce que le SysAdmin point de vue sur cette question. Vous pouvez trouver la question ici:

http://serverfault.com/questions/116543/graceful-maintenance-of-web-applications

4voto

Josh Curren Points 2993

Un autre moyen serait d'avoir plus de serveurs web. Prenez un hors de la ligne pour la mettre à jour puis la remettre en place et faire de même pour le reste, un à la fois. Cela fonctionne uniquement pour les serveurs web et de ne pas les serveurs de base de données. Avec la base de données, cela devient beaucoup plus compliqué.

4voto

Scott Points 3192

Il a été mon expérience que de graves entretien exige que les utilisateurs de ne pas être de faire des changements à la base de données, de sorte que le site a à descendre à un certain moment. La logique de temps pour faire ce serait lorsque l'utilisation est moins lourd, mais qui ne résout pas le problème.

La dernière fois que nous avons eu à faire quelques travaux d'entretien majeur, j'ai programmé pendant un moment quand tout le monde dans notre bureau a été à regarder la fin du relais de la flamme Olympique. Nous avons pratiqué sur un serveur de test à l'avance et compris comment faire la mise à jour aussi rapidement que possible par la parallélisation des tâches. Le tout est à la baisse pour moins d'une heure. D'autres bons moments serait lors de États-unis tous les jours fériés qui ne sont pas célébrés à l'extérieur des États-unis, mais il peut ne pas se produire assez souvent.

Probablement la meilleure solution serait de faire une copie en lecture seule de la base de données et de rediriger le trafic vers ce serveur de base de données lors de la mise à niveau.

4voto

Rowlf Points 1307

J'utilise une variété de la société américaine de services qui ont tendance à faire la même chose - à l'arrêt pour maintenance dans le milieu de ma journée de travail. C'est ennuyeux, mais c'est tolérable lorsqu'ils:

  1. Communiquer les prochaines activités de maintenance à l'avance. 24 heures d'avertissement est bon. Certains avertir 48 heures à l'avance.
  2. Prendre le temps d'arrêt de la fenêtre la plus courte possible. Un service que j'utilise a écourté leur mode hors connexion le temps de deux heures à une demi-heure au cours des derniers mois, et ils sont souvent revenue dans les 15 minutes.
  3. Si c'est de l'entretien imprévu, ils montrent une estimation approximative pour quand les choses seront de retour pour que je ne reste pas là a frapper le bouton "Actualiser" de nouveau et de nouveau.
  4. Si c'est une mise à jour planifiée, annoncer que les nouvelles fonctionnalités sont. Il est bon de savoir que mon cogner ma tête sur le clavier alors que le service était à la baisse n'a pas été en vain, et j' ("l'utilisateur") ont été récompensés par des fonctionnalités nouvelles :).

J'ai moi-même essayer d'obtenir #2 aussi court qu'il est humainement possible - ce qui est ma priorité. Je communique les temps d'arrêt planifiés à l'avance et de s'excuser par la suite si le site a dû descendre de façon inattendue.

J'ai aussi garder le site ouvert, mais en lecture seule pendant les activités de maintenance - au moins les utilisateurs peuvent regarder les choses si ils ont juste besoin de quelques renseignements, et il conserve les moteurs de recherche heureux, aussi.

3voto

Saem Points 2415

La base de données secondaires n'est pas compliquée, votre application doit être préparé pour elle, à un certain degré, afin d'éviter des choses terribles comme select *, et de l'insérer où vous êtes en s'appuyant sur la colonne ordre sont un must, pour n'en nommer que quelques-unes.

Fondamentalement, les modifications de base de données additif et ne pas détruire les données sont beaux à faire à chaque fois, vous pouvez avoir un esclave, l'enlever de la réplication, de faire toutes les modifications, commencer à avoir répliquer. Une fois qu'il est pris, vraiment à faire un rapide basculer vers l'esclave au maître. L'esclave est maintenant le maître et le maître peut effectuer des mises à jour.

Pour de contraction des changements que supprimer des colonnes ou de même des choses destructrices, en général, je ferais ceux avec un communiqué de lag, ce qui signifie qu'il est plus facile pour le basculement, vous voulez toujours faire une sauvegarde de la db de pré-mise à niveau, juste au cas où.

Pour des choses comme la colonne se divise et se confond, vous pouvez avoir des déclencheurs de synchroniser les données, pour le moment, si vous avez une chute en arrière de la stratégie et qu'il est capturé dans les deux endroits.

Aussi pour la période de temps où il n'y a que peu de temps d'arrêt, vous pourriez mettre une file d'attente en face de la base de données contenant les requêtes alors que le basculement a lieu, peut-être un proxy?

2voto

lubos hasko Points 13669

une solution serait de ne pas utiliser de base de données relationnelle, vous voyez, la plupart des arrêts sont à cause de mises à jour de schéma et celles-ci peuvent prendre un certain temps.

ne vous méprenez pas, les mathématiques de la théorie derrière le modèle relationnel est incroyable, mais tous ces avantages ne sont pas gratuits. votre application est toujours marié à particulier schéma et la mise à niveau de l'application signifie souvent la mise à niveau du schéma de base de données ainsi.

si vous voulez utiliser quelque chose comme berkeleydb, couchdb, simpledb ou de tout autre document ou de la clé-valeur de la base de données, mises à jour de schéma ne le sont plus facile (car il n'est pas appliquée schéma de toute façon) et ne vous oblige à écrire du code qui est plus indulgent des données provenant de la base de données. c'est pourquoi google n'a pas de temps d'arrêt en raison de leur google bigtable n'est pas relationnelle et leurs applications sont contraints à être écrit de telle manière qu'ils doivent assez bien s'attendre à quelque chose venant de la base de données.

tout le monde devrait passer à bases de données non relationnelles pour éliminer les temps d'arrêt? absolument pas, c'est pas la peine, sauf si vous êtes google ou amazon.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X