BT

Les modèles propres et représentatifs sont clés pour la performance

| par Jan Stenberg Suivre 29 Abonnés , traduit par Julien Delhomme Suivre 1 Abonnés le 01 juil. 2014. Durée de lecture estimée: 3 minutes |

Souvent, je constate ne pas du tout avoir à optimiser mon code bien que je sois en train de travailler sur des systèmes à extrêmement haute-performance. Ce qui me permet cela, c'est que mon code est propre. C'est ce qu'a déclaré Martin Thompson lors de la récente conférence DDD Exchange à Londres. Martin, qui exerce dans le domaine de la haute-performance, a travaillé sur quelques-uns des plus gros systèmes de catalogue et sur des systèmes traitant, avec quelques dizaines de millions d'événements par seconde, les débits de transactions parmi les plus hauts au monde. Contrairement à la croyance courante qui dit qu'un code fait pour la haute-performance doit forcément être laid, obscur et difficile à lire, son expérience montre que la performance est plutôt liée à des modèles propres et représentatifs et que le temps réellement consacré à l'optimisation des performances est marginal.

Pour Martin, les deux concepts principaux à considérer sont dans les mots propre et représentatif, concepts qui d'après lui correspondent bien aux fondamentaux de DDD. Un modèle propre doit rester "non contaminé" et contenir uniquement le langage utilisé et les structures de données. Si une technologie est en présence, comme Spring ou un ORM, la performance deviendra une réelle problématique, tout comme la maintenance et l'évolution du modèle. Être représentatif, c'est faire le portrait du monde réel. Les meilleurs modèles sont ceux qui capturent notre compréhension du domaine sur lequel nous travaillons, ils sont une représentation vivante du problème considéré.

Pour les systèmes à extrême haute-performance, s'intéresser aux détails d'un serveur et du CPU peut être très important et Martin décrit combien le temps d'exécution du code peut varier en fonction de l'endroit où se trouve la donnée : sur un des caches locaux ou dans la mémoire physique. Sortir d'un cache local vers la mémoire par exemple implique une latence beaucoup plus grande.

Martin donne un certain nombre d'astuces pour l'implémentation de modèles qu'il trouve importantes pour la performance :

  • Respecter la localité des références est clé pour la performance. Il est important d'avoir des Bounded Contexts cohésifs, avec des communications claires et minimales entre eux. Pour Martin, les principes de bonne conception sont fractals : ils fonctionnent à petite échelle comme à grande échelle.
  • Faire ami-ami avec les structures de données, laisser de côté les entités et se focaliser sur les relations entre elles.
  • Utiliser des batches. De multiples threads qui travaillent sur une même ressource peuvent créer des effets pénalisants. Mettre en place une file d'attente intermédiaire et un mécanisme de batch peut améliorer le débit de façon significative.
  • Les abstractions. La première règle de Martin est de ne pas utiliser d'abstractions, elles coûtent trop cher. Il considère qu'on a tendance à abstraire trop rapidement plutôt que de copier et d'avoir recours à une abstraction seulement quand on est vraiment sûr d'avoir affaire au même concept.

Pour finir, Martin met en avant la nécessité d'intégrer les tests de performance au processus d'intégration continue et finit sa présentation en disant :

Lorsque les modèles semblent bons et élégants, ils ont toujours tendance à être performants.

Le DDD Exchange de l'année prochaine est prévu le 19 juin 2015 et les inscriptions seront bientôt ouvertes.

Evaluer cet article

Pertinence
Style

Bonjour étranger!

Vous devez créer un compte InfoQ ou cliquez sur pour déposer des commentaires. Mais il y a bien d'autres avantages à s'enregistrer.

Tirez le meilleur d'InfoQ

Donnez-nous votre avis

Html autorisé: a,b,br,blockquote,i,li,pre,u,ul,p

M'envoyer un email pour toute réponse à l'un de mes messages dans ce sujet
Commentaires de la Communauté

Html autorisé: a,b,br,blockquote,i,li,pre,u,ul,p

M'envoyer un email pour toute réponse à l'un de mes messages dans ce sujet

Html autorisé: a,b,br,blockquote,i,li,pre,u,ul,p

M'envoyer un email pour toute réponse à l'un de mes messages dans ce sujet

Discuter

Se connecter à InfoQ pour interagir sur ce qui vous importe le plus.


Récupérer votre mot de passe

Follow

Suivre vos sujets et éditeurs favoris

Bref aperçu des points saillants de l'industrie et sur le site.

Like

More signal, less noise

Créez votre propre flux en choisissant les sujets que vous souhaitez lire et les éditeurs dont vous désirez suivre les nouvelles.

Notifications

Restez à jour

Paramétrez vos notifications et ne ratez pas le contenu qui vous importe

BT