LiipDoctrineCache : Utiliser une ferme multi-serveur Memcache

Quand comme moi vous travaillez dans une société qui a besoin de haute-disponibilité (ce qui correspond à la grosse majorité des entreprises dans le web, non ?), vous ne pouvez pas dire :

Mon cache, je le stocke sur un serveur unique qui peut claquer à tout moment.

Du coup, si vous utilisez Memcache, il vous faut au moins 2 serveurs pour répartir vos clés de cache (avec ou sans redondance).

Vous pourriez très bien me rétorquer :

Hey mec, c’est que du cache ! S’il est down, le site continuera de fonctionner.

Sauf que l’on sait tous ce que peut donner un site sans cache, surtout si ce dernier faillit en pleine période de pointe (ce qui est plus que probable connaissant ce sadique de Murphy).

Et si comme moi vous avez adopté le bundle LiipDoctrineCacheBundle, qui permet d’utiliser les classes de cache de Doctrine (utilisées par l’ORM à l’origine, mais qui fonctionne très bien aussi en autonome).

Mais voilà : dans la configuration offerte par le bundle, seul un couple host/port n’est possible.

Heureusement, il est possible d’utiliser le paramètre « id » qui permet de faire référence à un service du conteneur d’injection. Du coup, vous pouvez placer dans le conteneur un service Memcache configuré avec votre ferme de serveurs, et le passer à la configuration « liip_doctrine_cache »

Exemple :

services:
    my_memcache_farm:
        class: Memcache
        calls:
            - [ addServer, [ "serveur1", 11211 ] ]
            - [ addServer, [ "serveur2", 11211 ] ]

liip_docrine_cache:
    namespaces:
        my_namepace:
            type: memcache
            id: my_memcache_farm

Et le tour est joué : votre configuration multi-serveur memcache peut ainsi être utilisée avec Doctrine cache.

Vous pouvez aussi en profiter pour positionner les timeouts de connexion et de réponse des serveurs.

Point fort supplémentaire : si vous utilisez la même ferme de cache pour plusieurs namespaces, vous n’avez pas à dupliquer autant de fois la configuration.

Maintenant, si vous avez du temps pour tester, l’utilisation de Couchbase permet d’amener en plus la redondance et une meilleure répartition des données sur les noeuds, la suppression de noeud à chaud, etc… J’ai hâte de tester et de vous dire tout ce que j’en pense de bien (ou pas)