Il existe toutes sortes de techniques pour le traitement des transactions hautes performances et celle de l'article de Fowler n'est qu'une des nombreuses à la pointe. Plutôt que d'énumérer un tas de techniques qui peuvent ou non s'appliquer à la situation de quiconque, je pense qu'il vaut mieux discuter des principes de base et de la façon dont LMAX aborde un grand nombre d'entre eux.
Pour un système de traitement des transactions à grande échelle, vous souhaitez effectuer toutes les opérations suivantes autant que possible:
Minimisez le temps passé dans les niveaux de stockage les plus lents. Du plus rapide au plus lent sur un serveur moderne, vous avez: CPU / L1 -> L2 -> L3 -> RAM -> Disque / LAN -> WAN. Le passage du disque magnétique moderne même le plus rapide à la RAM la plus lente est supérieur à 1000x pour un accès séquentiel ; l'accès aléatoire est encore pire.
Minimisez ou éliminez le temps passé à attendre . Cela signifie partager le moins d'état possible et, si l'état doit être partagé, éviter autant que possible les verrous explicites.
Répartissez la charge de travail. Les processeurs ne sont pas devenus beaucoup plus rapides au cours des dernières années, mais ils sont devenus plus petits et 8 cœurs sont assez courants sur un serveur. Au-delà de cela, vous pouvez même répartir le travail sur plusieurs machines, ce qui est l'approche de Google; la grande chose à ce sujet est qu'il met à l'échelle tout, y compris les E / S.
Selon Fowler, LMAX adopte l'approche suivante pour chacun d'eux:
Gardez tous les états en mémoire à tout moment. La plupart des moteurs de base de données le feront de toute façon, si la base de données entière peut tenir en mémoire, mais ils ne veulent rien laisser au hasard, ce qui est compréhensible sur une plateforme de trading en temps réel. Afin de réussir cela sans ajouter une tonne de risques, ils ont dû créer un tas d'infrastructures de sauvegarde et de basculement légères.
Utilisez une file d'attente sans verrou ("perturbateur") pour le flux d'événements d'entrée. Contrairement aux files d'attente de messages traditionnelles traditionnelles qui ne sont définitivement pas verrouillées, et impliquent en fait généralement des transactions distribuées extrêmement lentes .
Pas tant. LMAX jette celui-ci sous le bus sur la base que les charges de travail sont interdépendantes; le résultat de l'un modifie les paramètres des autres. Il s'agit d'une mise en garde critique , et que Fowler appelle explicitement. Ils font une utilisation afin de la concurrence pour fournir des capacités de basculement, mais toute la logique métier est traité sur un seul thread .
LMAX n'est pas la seule approche de l'OLTP à grande échelle. Et bien qu'il soit assez brillant en soi, vous n'avez pas besoin d'utiliser des techniques de pointe pour atteindre ce niveau de performance.
De tous les principes ci-dessus, le n ° 3 est probablement le plus important et le plus efficace, car, franchement, le matériel est bon marché. Si vous pouvez correctement partitionner la charge de travail sur une demi-douzaine de cœurs et plusieurs dizaines de machines, alors le ciel est la limite pour les techniques conventionnelles de calcul parallèle . Vous seriez surpris du débit que vous pouvez retirer avec rien d'autre qu'un tas de files d'attente de messages et un distributeur à tour de rôle. Ce n'est évidemment pas aussi efficace que LMAX - en fait même pas proche - mais le débit, la latence et la rentabilité sont des préoccupations distinctes, et ici nous parlons spécifiquement de débit.
Si vous avez le même type de besoins spéciaux que LMAX - en particulier, un état partagé qui correspond à une réalité commerciale par opposition à un choix de conception hâtif - alors je suggère d'essayer leur composant, car je n'ai pas vu beaucoup sinon cela est adapté à ces exigences. Mais si nous parlons simplement de haute évolutivité, je vous exhorte à faire plus de recherches sur les systèmes distribués, car ils sont l'approche canonique utilisée par la plupart des organisations aujourd'hui (Hadoop et projets connexes, ESB et architectures connexes, CQRS, que Fowler a également mentions, etc.).
Les SSD vont également changer la donne; sans doute, ils le sont déjà. Vous pouvez maintenant avoir un stockage permanent avec des temps d'accès similaires à la RAM, et bien que les SSD de qualité serveur soient toujours horriblement chers, ils finiront par baisser de prix une fois que les taux d'adoption augmenteront. Il a fait l'objet de recherches approfondies et les résultats sont assez époustouflants et ne feront que s'améliorer avec le temps, de sorte que l'ensemble du concept de "garder tout en mémoire" est beaucoup moins important qu'auparavant. Donc, une fois de plus, j'essaierais de me concentrer sur la concurrence dans la mesure du possible.