BT

Diffuser les Connaissances et l'Innovation dans le Développement Logiciel d'Entreprise

Contribuez

Sujets

Sélectionner votre région

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

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

Favoris

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

Contenu Éducatif

BT