Question

Nous avons un site Web avec une énorme quantité d'objets stockés dans les variables cache statiques dans App_Code. Chaque fois que nous poussons un changement App_Code à nos serveurs Web de production, il recycle l'IIS piscine et vide le cache. Il ne cache pas la chasse d'eau mais quand nous poussons des changements .aspx et des fichiers .aspx.cs.

Je dois avoir un tas de classes qui seront mises à jour plusieurs fois par jour pour pouvoir être référencé dans App_Code. Je voudrais soit une partie de ma App_Code que je peux mettre à jour plusieurs fois par jour sans rinçage à vélo IIS et mon cache, ou la capacité des classes de référence en dehors de App_Code de l'intérieur App_Code.

Y at-il une solution qui correspond à mon problème?

Était-ce utile?

La solution

Mises à jour App_Code ou / bin / toujours recycler vos pools d'applications, je crois. Si vous dites que vous avez un scénario de déploiement où .aspx.cs mises à jour de fichiers ne recyclent pas votre pool d'applications, et si vous êtes en mesure de faire référence au type de page elle-même, vous pouvez peut-être déplacer votre code dans le .aspx. cs fichiers de sorte que le recyclage empêche de se produire. C'est peut-être un choix laid bien.

Une suggestion est de revoir votre conception afin de réduire le nombre de mises à jour de code source qui sont nécessaires sur une base quotidienne. Peut-être utiliser le stockage XML ou base de données et la conception de votre application à être un peu plus générique et moins sujettes à des mises à jour binaires.

Ou peut-être partitionner votre application dans plusieurs applications virtuelles plus petites. Le niveau d'effort pourrait être plus élevé pour ce faire, mais dans ce cas, si votre demande est plus compartimenté, vous ne serez pas avoir à recycler l'application entière avec chaque déploiement. Vous souhaitez ne devez recycler les modules qui ont été touchés par votre déploiement.

Une autre suggestion pourrait être à l'architecture de serveurs en cluster de configuration. Planifier les déploiements à appliquer à un nœud de cluster, en ne conservant que l'autre actif alors que la mise à jour programmée est en cours, puis déployer des mises à jour au deuxième noeud une fois que la première mise à jour du nœud est fait le pool d'application recyclé.

Une autre suggestion serait de changer vos temps de déploiement à fois moins hors pointe, si cela est possible.

sont les mises à jour fréquentes qui se produisent juste parce qu'il ya beaucoup de changements que les passe?

Autres conseils

Un autre angle serait d'utiliser une solution de cache distribué au lieu de HttpRuntime cache.

cache HttpRuntime présente deux inconvénients majeurs:

1) Il est rincée lorsque votre recyclages de domaine d'applications. Ceci est par défaut fait toutes les 29 heures de toute façon, même si vous ne modifiez pas App_Code.

2) il est localisé à un seul serveur. Donc, si les besoins du serveur Web à l'échelle à une batterie de serveurs Web plus grande, votre cache devient de moins en moins efficace, car les entrées du cache ne sont pas synchronisés sur tous les serveurs Web.

solutions de cache distribué contournent ces problèmes en créant une couche de cache distincte entre votre niveau Web et votre source de données fin arrière.

solutions Exemple:

  • memcached
  • Redis
  • Oracle Coherence (commercial)

Bien sûr, cela se traduira par une architecture plus complexe et nécessitera plus de matériel ou les machines virtuelles.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top