Ch. 2 — Architecture client-serveur et ODBC
Pourquoi une base n'est presque jamais seule sur sa machine : le modèle client-serveur, les ports, les pilotes ODBC, et ce que tout cela change quand plusieurs personnes accèdent aux mêmes données.
Après le chapitre de rappels, ce deuxième cours de la ressource répond à une question très concrète : plusieurs personnes doivent accéder à la même base en même temps — comment ? La réponse tient en deux idées : le modèle client-serveur, qui organise les programmes, et ODBC, qui standardise la manière dont un client dialogue avec n'importe quel serveur de bases de données. C'est aussi la première brique du web back-end : un site web dynamique, c'est d'abord un client (le navigateur) qui parle à un serveur.
1. Le problème : une base, plusieurs utilisateurs
En situation professionnelle, une base de données n'est jamais consultée par une seule personne. Le cours en donne trois exemples :
- les différentes agences d'une banque accèdent en même temps au solde des comptes ;
- les différents magasins d'une chaîne de vêtements consultent simultanément les stocks ;
- tous les étudiants consultent leurs notes au même moment.
Il n'y a qu'une seule base, mais plusieurs logiciels qui y accèdent depuis des machines différentes. Il faut donc un programme qui garde les données et répond aux demandes : le serveur. Les programmes qui demandent sont les clients.
Le principe général
Le cours insiste : client-serveur est un principe général, pas une technologie propre aux bases de données.
- Le serveur est un serveur de ressources communes : il fournit un service.
- Un client est un programme qui s'adresse à un programme serveur exécuté sur une machine distante, pour échanger des informations et des services.
- En général, plusieurs clients accèdent simultanément au même serveur.
C'est l'un des axes les plus importants de l'informatique distribuée. Et ce principe est partout — le cours en dresse la liste :
| Type de serveur | Serveurs | Clients |
|---|---|---|
| Base de données | PostgreSQL, Oracle | psql, un programme Java/Python… |
| HTTP (web) | Apache, IIS | Firefox, Chrome |
| Messagerie | Sendmail | Thunderbird, Outlook |
| Autres | Serveur X Window, serveur de fichiers, serveur d'objets distribués | … |
Le réflexe à avoir
Quand on vous dit « client-serveur », ne pensez pas seulement « base de données ». La question
est toujours la même : quel programme fournit le service (le serveur) et quel programme
le consomme (le client) ? Le même mot désigne parfois deux choses : Firefox est un client
HTTP, psql est un client PostgreSQL.
2. Les ports : trouver le bon service
Un serveur physique peut héberger plusieurs serveurs (web, base de données, messagerie…). Comment le client sait-il à qui parler ? Chaque serveur scrute un ou plusieurs ports, identifiés par un numéro sur 2 octets (donc de 0 à 65535). Les numéros inférieurs à 1024 sont réservés à l'administrateur.
Certains numéros sont standardisés — les connaître évite de chercher pourquoi une connexion échoue :
| Port | Service | Port | Service |
|---|---|---|---|
| 21 | FTP | 80 | Web |
| 22 | SSH | 443 | Web-SSL (https) |
| 23 | Telnet | 465 | SMTP-S |
| 25 | SMTP | 995 | POP3-S |
| 3306 | MySQL | 5432 | PostgreSQL |
| 5900 | VNC | 6000 | X11 |
Retenez au minimum 5432 (PostgreSQL) : c'est celui que vous utilisez à chaque connexion
psql -h psqlserv, et 80/443 (web). La combinaison adresse IP + port identifie
sans ambiguïté « la machine, puis le service sur cette machine ».
3. ODBC : parler à n'importe quel serveur
Le problème historique
Jusqu'à récemment, une application client-serveur était construite par un même concepteur qui fournissait le client et le serveur. Conséquence : impossible de changer l'un sans l'autre. Il fallait permettre la connexion de n'importe quel client avec n'importe quel serveur — d'où la naissance de protocoles standardisés :
- ODBC (Open DataBase Connectivity) — proposé par Microsoft, standard de fait du monde Windows ;
- JDBC (Java DataBase Connectivity) — son équivalent pour Java, que vous utiliserez dans les prochains TP.
Ces protocoles sont codés dans des pilotes (drivers) : des logiciels qui se chargent de la traduction entre le langage standard et le protocole propre à chaque SGBD.
Le gestionnaire ODBC et ses pilotes
L'architecture se lit en trois couches :
L'application (Excel, Access, votre programme…) ne parle que l'API ODBC : une
cinquantaine de fonctions standard (SQLConnect, SQLExecDirect, SQLFetch…).
Le gestionnaire ODBC reçoit les appels et les route vers le pilote correspondant à la base visée : un pilote Oracle, un pilote PostgreSQL, un pilote Access…
Le pilote traduit les appels ODBC en protocole natif du serveur. C'est le concepteur du SGBD qui le fournit, avec sa procédure d'installation.
L'avantage décisif : la base utilisée côté serveur peut être interchangée sans aucune modification du développement fait dans la partie cliente. On peut même utiliser la puissance d'un mainframe (IBM Z900, AS400…) pour héberger les données, avec la souplesse d'Access pour construire formulaires et états.
Les pilotes disponibles
- En standard : SQL Server Driver.
- Avec MS-Office : pilotes dBASE, Excel, FoxPro, Access, Text.
- Pour les autres SGBD : c'est le concepteur du serveur qui fournit le pilote — pour PostgreSQL, le pilote s'appelle PostgreSQL Unicode.
Le cas Access : front-end / back-end
Access peut jouer les deux rôles à la fois. Sa partie front-end (formulaires, états, requêtes) reste l'interface cliente ; les données, elles, vivent dans le back-end — n'importe quel serveur SGBD relié par ODBC. C'est exactement ce que vous manipulerez au TP 3.02 : Access en client, PostgreSQL en serveur, et même une jointure entre une table Access et une table PostgreSQL.
4. La nouvelle question : que mettre où ?
Le cours se termine par un changement de problème. Avant, la seule question était « quel bon concepteur choisir ? ». À l'heure du client-serveur, la question devient : comment répartir l'application entre le serveur et le client ? Que met-on côté serveur (les données, la logique d'accès), que met-on côté client (l'interface, une partie de la logique) ?
C'est cette question qui irrigue toute la suite de la matière : JDBC, architectures web, MVC, REST — autant de réponses différentes à la même question de répartition.
Mots clés
| Mot clé | Définition |
|---|---|
| Client | Programme qui demande un service à un serveur |
| Serveur | Programme qui fournit un service aux clients |
| Protocole | Ensemble de règles définissant leur communication |
| Adresse IP | Identifie une machine sur un réseau |
| Port | Identifie un service réseau sur une machine |
| Driver | Logiciel traduisant les appels d'une application en protocole |
| ODBC | Interface standardisée d'accès aux bases de données |
Auto-évaluation
Parce que la base est gérée par un serveur : un programme unique qui détient les données et répond aux requêtes. Les utilisateurs ne touchent jamais directement la base — leurs logiciels sont des clients qui envoient des requêtes au serveur, qui arbitre.
Non. C'est un principe général de l'informatique distribuée : un serveur fournit une ressource commune, des clients la consomment. Serveur HTTP (Apache) avec navigateurs clients, serveur de messagerie (Sendmail) avec Thunderbird, serveur de fichiers…
À identifier le service sur la machine. L'adresse IP identifie la machine, le port identifie le serveur qui attend les demandes sur cette machine. PostgreSQL écoute sur 5432, le web sur 80 (et 443 en SSL). Les ports inférieurs à 1024 sont réservés à l'administrateur.
Avant ODBC, le concepteur fournissait le client et le serveur : impossible d'en changer un sans l'autre. ODBC définit un langage de communication standard : toute application parle l'API ODBC, un pilote par SGBD assure la traduction. La base côté serveur peut être changée sans modifier le client.
Entre le gestionnaire ODBC et le serveur. L'application appelle l'API ODBC, le gestionnaire route vers le pilote du SGBD visé, et le pilote traduit en protocole natif du serveur. L'application ne sait même pas quel SGBD est derrière.
Non. Le langage ODBC (SQLConnect, SQLExecDirect, SQLFetch…) n'est utilisé directement que par ceux qui écrivent des pilotes. Les applications passent par des surcouches comme JDBC.
Access est le client (sa partie front-end : formulaires, états), PostgreSQL est le serveur (les données). La liaison passe par le pilote ODBC « PostgreSQL Unicode » et un DSN utilisateur.
cours-client-serveur-odbc.pdf
transp_cours302 — Architecture client-serveur et ODBC · 19 diapositives
Chargement du document…
Dernière mise à jour le
Ch. 1 — Rappels : des bases de données au SQL
Tout ce qu'il faut savoir avant d'écrire une requête : à quoi sert une base de données, comment on la modélise, et comment se lit le langage SQL. Une page conçue pour partir de zéro.
Ch. 3 — JDBC : du programme à la base
Connecter un programme Java à une base : le pilote et son classpath, l'URL de connexion propre à chaque SGBD, Statement et ResultSet, la fermeture propre en try-with-resources — et la lecture des messages d'erreur.