83 votes

Memcached avec Windows et .NET

Est-ce que quelqu'un a déjà implémenté memcached pour une utilisation en production dans un environnement Windows ? Parce que de nombreux blogs que j'ai lu, il n'est pas recommandé d'exécuter memcached dans Windows en particulier pour une utilisation en production, par exemple Exécution de memcached sous Windows .

Et une dernière chose, quel client memcached est bon à utiliser avec c# et .net 3.5 ? J'ai trouvé beaucoup d'alternatives telles que Fournisseurs Memcached @ Codeplex , Beitmemcached et fournisseur de memcached @ Sourceforge

49voto

Cherian Points 8302

Pourquoi avez-vous besoin d'exécuter memcached sur Windows ? C'est une affaire coûteuse dans un environnement de production.

Si votre code doit fonctionner dans un environnement Windows, prenez un client memcached Windows et parlez à une machine memcached basée sur *nix.

Dans un environnement de production, faire tourner memcached sur un serveur 2003 ou 2008 signifie que vous devez obtenir des licences pour toutes ces machines. Linux vous offrira tous les avantages du logiciel libre. Le coût total de possession augmentera linéairement avec memcached sur Windows.

Edit :

Cela fait environ un an et demi que j'ai écrit cette réponse et beaucoup de choses ont changé depuis. Il faut en tenir compte, surtout quand quelqu'un comme Dustin commente.
Voici donc comment vous pouvez faire fonctionner memcached sous Windows. Télécharger memcached pour Windows à partir de Couchbase (anciennement Northscale) .
Typiquement, si vous prévoyez d'exécuter memcached sur la même machine de production, vous voudrez le démarrer en mémoire limitée, c'est-à-dire définir la mémoire maximale que memcached est autorisé à utiliser.

c : \Program Fichiers \memcached >memcached.exe -m 128.

Ici, memcached fonctionne avec un maximum de 128 mb d'utilisation. Vous ne voulez pas que memcached prenne toute la mémoire de votre serveur web.

Le moment où vous avez décidé de réduire memcached, vous devrez prendre en compte ce que j'ai dit précédemment. En outre, compressez vos valeurs dans les combinaisons clé-valeur. Les serveurs Web consomment généralement très peu de CPU (2-3%) et la compression apporte beaucoup de valeur au réseau dans son ensemble par rapport à l'utilisation du CPU. Si vous êtes trop préoccupé par la compression normale, essayez LZO

21voto

mythz Points 54874

Je suis surpris que personne ici n'ait encore mentionné Redis - Il s'agit de l'un des magasins de données clés-valeurs les plus riches en fonctionnalités et les plus rapides (110 000 SET par seconde sur une machine linux d'entrée de gamme), avec un support riche en structures de données pour les chaînes de caractères, les ensembles, les listes, les ensembles triés et les hachages.

Bien que Windows ne soit pas une plateforme officiellement supportée, il fonctionne parfaitement sous Windows avec tous les tests réussis. J'ai des versions Windows (utilisant Cygwin) disponibles ici : https://github.com/ServiceStack/ServiceStack.Redis#redis-server-builds-for-Windows

Il possède également des liens clients pour presque tous les langages de programmation utilisés aujourd'hui. Je maintiens un riche client Redis Open Source C# avec un support API natif pour n'importe quel type de POCO C#, un support de transaction et des gestionnaires de client à sécurité thread qui sont prêts à être déposés dans n'importe quel IOC : https://github.com/ServiceStack/ServiceStack.Redis

12voto

Nicholas Piasecki Points 13681

Comme Velocity n'existait pas à l'époque, j'ai utilisé un portage de memcached vers Windows pour la société pour laquelle je travaille, Skiviez. Il n'existe principalement que pour fournir un cache centralisé pour plusieurs processus de travail sur la même machine. Il fonctionne bien depuis 18 mois sur un site de commerce électronique dont l'utilisation est modeste (~18,500 hits/jour). Le client que j'ai utilisé est Enyim intégré comme fournisseur de cache pour iBATIS.NET. Ce client semble fonctionner assez bien ; les clients memcached ne sont pas non plus très compliqués au départ.

Si c'était à refaire, je me tournerais probablement vers Velocity si je tenais à rester sous Windows pour ma solution de mise en cache distribuée. Mais comme ça marche maintenant, je ne vais pas y toucher.

(A propos : Depuis lors, j'ai supprimé la plupart des besoins en matière de cache en ajoutant certaines Cache* aux tables clés de la base de données qui sont mises à jour par une tâche planifiée chaque soir. Au final, cela a permis de réduire considérablement la pression sur les ressources, qu'il s'agisse du temps processeur initial nécessaire à l'interrogation de la base de données ou de la pression subséquente sur la disponibilité de la mémoire en conservant les résultats en cache dans memcached. Il est également beaucoup plus explicite dans le code de savoir quand on accède à une version en cache des données par rapport à une version calculée à la volée. Je suis sûr que vous avez de nombreuses raisons d'utiliser un cache distribué, mais cela vaut toujours la peine de prendre un peu de recul et de se demander si vous en avez vraiment besoin ou non !)

7voto

lomaxx Points 32540

Je ne sais pas quel est le projet sur lequel vous travaillez, mais vous pourriez jeter un coup d'œil au Projet Microsoft Velocity De la page :

"Velocity" est une plateforme distribuée de cache d'applications d'applications en mémoire pour développer des applications évolutives et performantes. "Velocity" peut être utilisé pour mettre en cache tout objet CLR (Common Language Runtime) (CLR) et permet d'y accéder par le biais d'APIs simples. Les aspects clés de "Velocity" sont le cache distribué les performances, l'évolutivité et la disponibilité.

J'ai vu quelques démonstrations et il semble que l'intégration avec .net framework soit très bonne.

Le problème avec l'API client est que vous devez toujours avoir une instance de memcached fonctionnant sur une autre machine quelque part, de préférence, comme vous l'avez noté, en utilisant la pile LAMP. L'utilisation de velocity signifie que vous allez toujours fonctionner sur la même pile et qu'il y a une intégration plus étroite à travers la plate-forme .net.

Cela dit, si vous souhaitez utiliser velocity comme cache pour d'autres applications .net, vous devrez peut-être écrire votre propre API pour exposer les données velocity à la consommation.

6voto

Silvas Points 77

Velocity est un peu plus compliqué à gérer, mais il est beaucoup, beaucoup plus puissant que memcached. Je ne suis pas contre memcached, pas le moins du monde, c'est génial. Mais à l'avenir, les nouveaux projets qui sont purement basés sur .NET sont fous de ne pas utiliser Velocity, même dans son état actuel non publié.

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