Articles précédents : Articles
- [35] Compiz Core 0.5.2
- [92] Microsoft irait-il plus loin dans l'open source ?
- [60] Mozilla veut donner plus d'autonomie et de visibilité à Thunderbird
- [19] L'Europe et les standards ouverts : un recul possible, mais vous pouvez encore agir !
- [20] WebKit dans KDE
- [19] La réforme du système des brevets américain en cours d'adoption
- [18] Présentation LinuxFr.org aux RMLL 2007
- [123] Normalisation de l'OOXML par l'ISO freinée par les États-Unis
- [108] L'arrêt du support de PHP4 annoncé
- [6] Quand les PGI libres entrent à l'université
Liens connexes
- MySQL Proxy (1426 hits)
- Download (407 hits)
- Getting Started with MySQL Proxy (654 hits)
- Language Lua (501 hits)
Dépêche modérée par
Dépêche éditée par
Selon Wikipédia : Lua est un langage de script libre dont l'interpréteur est conçu dans un but de compacité (95 à 185 Ko pour la version 5.0.2, selon le compilateur utilisé et le système cible). Lua est conçu de manière à pouvoir être embarqué au sein d'une autre application, ce qui permet d'étendre celle-ci.
Avec MySQL Proxy, vous serez capable de :
- Filtrer les requêtes avant de les transmettre au serveur ;
- Réécrire certaines requêtes (en corrigant la syntaxe par exemple) ;
- Intercepter le resultset afin d'y supprimer, modifier ou ajouter des enregistrements ;
- Interdire le retour de certains résultats vers le client.
- Rediriger les écritures sur le maître et les lectures sur l'esclave, dans le cas de réplication ;
- Exécuter des commandes Shell.
MySQL Proxy (1426 hits)
Download (407 hits)
Getting Started with MySQL Proxy (654 hits)
Language Lua (501 hits)
> Lire la dépêche (15 commentaires, moyenne: 4,2).
Retour d'expérience en production
Bonjour,
effectivement ce produit est très interressant sur le principe, on évite par exemple de faire de la répartition de charge au niveau applicatif...
Je l'ai configuré et installé, tout semblait parfait, sous l'effet de l'excitation je l'ai meme mis en prod quelques heures.
Environnement: des serveurs PHP qui interroge un pool de 5 serveurs MySQL de manière aléatoire, statistiquement c'est équitable :)
J'ai donc changé le pool de 5 par 1 seul: MySQL Proxy, qui lui load balance les requetes sur les 5 serveurs (read-only)
Impressionnant, mysql proxy ne consomme rien en CPU avec 1500 req/sec , le serveur n'atteint meme pas 1 de charge, et ... ça marche !
Sauf que ... je ne sais pas pourquoi, mais les 5 serveurs se prennent moins de requetes, la partie du site concerné est plus lente à la navigation, on dirait que mysql proxy n'accepte qu'un nombre restreint de connections simultanés et/ou par secondes, le serveur étant pourtant légerement tuné pour largement encaisser plus de 100000 cnx / seconde.
J'ai posé la question sur le forum mysql proxy, et n'ai pas obtenu de réponse....
Et je n'ai pas le temps de creser, pour l'instant.
Dommage :-(
-
[^]Re: Retour d'expérience en production
Posté par d-jo (page perso, ) le 10/08/2007 à 06:35. (lien). Évalué à 5.Juste une question au passage, tu réplique avec quoi / comment tes cinq serveurs ?
-
[^]Re: Retour d'expérience en production
Posté par Greg () le 10/08/2007 à 07:07. (lien). Évalué à 5.Réplication partielle MySQL 5 depuis un seul master.
Pourquoi ?-
[^]Re: Retour d'expérience en production
Posté par d-jo (page perso, ) le 10/08/2007 à 16:27. (lien). Évalué à 3.Parceque j'y connais rien et je dois en faire bientôt :)
-
[^]Re: Retour d'expérience en production
Posté par Greg () le 10/08/2007 à 18:15. (lien). Évalué à 7.Si je peux me permettre quelques conseils ;)
Tu peux répliquer toute la DB, juste quelques DB, ou encore seulement des tables.
Plus tu répliques de données, moins tes slaves seronts efficaces pour répondre aux requetes de lectures, et plus ils risquent de prendre du délais de réplic (d'après mon expérience c'est exponentiel :( le slave qui prend du délais devient tres vite innaccessible)
Mais attention aux parametres de config "replicate-ignore-table" qui permettent de ne pas répliquer toutes les tables, MAIS si une requête d'écriture impliquant des tables ignorées apparait, la réplic est cassée.
Exemple typique, tu réplic les tables A, B, C et tu ignores D. Une requete de ce genre va planter la réplic:
UPDATE B SET champ=1 WHERE D > 0;
Pour revenir à mysql proxy, il va etre possible dans les versions futures de changer dynamiquement la liste des slaves. Donc avec un programme tiers, on peut récupérer les délais de réplic de tous les slaves, et appliquer un algorithme pour ajouter/supprimer des slaves de mysql proxy ....
-
-
-
-
[^]Re: Retour d'expérience en production
Posté par Jean-Yves Beaujean (page perso, ) le 10/08/2007 à 09:58. (lien). Évalué à 4.C'est une version alpha, il y a surement encore des trucs à affiner. Mais ton feedback a du être apprécié sur le forum. C'est avec ce genre de retour que le produit se développe plus rapidement.
-
[^]Re: Retour d'expérience en production
Posté par Greg () le 10/08/2007 à 12:39. (lien). Évalué à 3.Oui, et la communauté autour de ce produit est très active, le code est régulièrement mis à jour, ça bouge.
Il faudrait que je puisse tester hors production mais comment ?-
[^]Re: Retour d'expérience en production
Posté par Jean-Yves Beaujean (page perso, ) le 10/08/2007 à 13:25. (lien). Évalué à 1.Si tu as le courage et surtout le temps, tu peux créer plusieurs machines virtuelles avec VMWare. Si tu as un bonne machine, tu pourras recréer virtuellement ton cluster et faire tes tests. Bon c'est théorique évidemment ;-)
-
[^]Re: Retour d'expérience en production
Posté par arthurr (page perso, ) le 10/08/2007 à 13:51. (lien). Évalué à 5.ou avec virtualbox (GPL) ...
-
[^]Re: Retour d'expérience en production
Posté par Greg () le 10/08/2007 à 18:04. (lien). Évalué à 2.Sauf que j'aimerai plutot faire des tests qui se rapprocherait de la prod, c'est à dire du 500 requetes aléatoires SELECT / secondes par serveurs, c'est là que mysql proxy semble pêcher dans mon cas, sinon il remplit tres bien son role de load balancers de requetes de lectures.
-
-
-
-
Il existe ausi DBIx::MyServer en Perl
Sympa, ce proxy.
Pour ceux que l'utilisation d'un nouveau langage (lua) rebute, vous pouvez également utiliser DBIx::MyServer, un module en Perl.
Un très bon article à ce sujet : http://dev.mysql.com/tech-resources/articles/dbixmyserver.ht(...)
Ce qu'on peut en faire ?
- implémenter un système de journal (log) maison en local ou à distance
- générer des tests à la demande
- implémenter des macros pour les expressions SQL les plus courantes
- lancer des commandes shell et du mail par votre serveur de bases de données
- utiliser d'autres SGBD au sein de MySQL
- ...
Et pourquoi pas mettre des requêtes... en memcache ?
Ah, l'un de mes rêves les plus fous ; un proxy SQL !
C'est assez bizarre l'utilisation de LUA, mais mon rêve le plus fou pourrait bien se réaliser là : mettre les grosses requêtes SQL en memcache sans toucher au code PHP/Perl/ruby pour cacher mes requêtes !
En effet, on s'est déjà amusé à écrire une lib pour utiliser memcache trouvé là :
http://trac.lighttpd.net/trac/attachment/ticket/1139/Memcach(...) (la dépêche ne le dis pas, mais LUA est aussi pas mal utilisé dans lightty).
Il n'y a donc plus qu'à faire la suite, ça ne saurait être bien difficile pour qui a un peu de temps à perdre... Un volontaire pour tester ?
-
[^]Re: Et pourquoi pas mettre des requêtes... en memcache ?
Posté par chl (page perso, ) le 10/08/2007 à 16:31. (lien). Évalué à 7.(la dépêche ne le dis pas, mais LUA est aussi pas mal utilisé dans lightty)
Ce que la dépêche ne dit pas non plus, ni toi d'ailleurs :), c'est que lighttpd et mysqlproxy sont du même auteur : Jan Kneschke
-
[^]Re: Et pourquoi pas mettre des requêtes... en memcache ?
Posté par Greg () le 10/08/2007 à 18:06. (lien). Évalué à 2.MySQL fait déjà du cache sur les requêtes ... il suffit d'avoir pas mal de RAM :)
-
[^]Re: Et pourquoi pas mettre des requêtes... en memcache ?
Posté par Maxime Ritter (page perso, ) le 10/08/2007 à 21:13. (lien). Évalué à 3.Je parle d'un memcache, pas du Query Cache de MySQL qui dans mon cas ne me sert pas (et j'ai même déjà vu le query cache tuer les performances).
http://www.danga.com/memcached/
What about MySQL 4.x query caching?
MySQL query caching is less than ideal, for a number of reasons:
* MySQL's query cache destroys the entire cache for a given table whenever that table is changed. On a high-traffic site with updates happening many times per second, this makes the the cache practically worthless. In fact, it's often harmful to have it on, since there's a overhead to maintain the cache.
* On 32-bit architectures, the entire server (including the query cache) is limited to a 4 GB virtual address space. memcached lets you run as many processes as you want, so you have no limit on memory cache size.
* MySQL has a query cache, not an object cache. If your objects require extra expensive construction after the data retrieval step, MySQL's query cache can't help you there.
If the data you need to cache is small and you do infrequent updates, MySQL's query caching should work for you. If not, use memcached.
-




Cette discussion est archivée, il n'est plus possible de laisser des commentaires.
Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.