jeudi 17 janvier 2008

La base de données

Je me suis peut-être trop concentré sur la séparation entre l'accès aux donnés d'une part, et la sérialization sur le disque lorsque le système est éteint. Le système actuel charge l'ensemble des données en début de session, et recharge périodiquement certaines donnés qui pourraient changer sur le disque (les comptes, par exemple). Pourtant, il existe une autre solution, qui est d'avoir un serveur presque totalement acontextuel, et d'accéder aux données directement dans la base de données. C'est l'occasion de mieux utiliser les capacités d'accès concurrent de la base de données: le temps de réponse à la requête d'un client sera probablement plus long, mais en revanche il sera possible de paralléliser les requêtes pour une meilleure montée en charge.

D'une part, chaque serveur doit maintenir une série de processus (potentiellement légers) chacun associé à une connexion à la base de données. Une tâche, c'est à dire une requête d'un client ou un évènement interne, sera donné au prochain processus libre, qui ira l'exécuter sur la base de données. Pendant que la base de données tourne, un autre processus peut recevoir une autre requête et l'exécuter à son tour sur la base de données.

D'autre part, à condition de s'assurer que les serveurs ne sont pas contextuels, il est possible de multiplier les serveurs, et de les faire se connecter à la même base de données. Une grosse machine faisant tourner la base, avec de bons accès réseau à d'autres machines plus modestes faisant chacune tourner un serveur, devrait permettre une bonne montée en charge.

Aucun commentaire: