feat: add first sections of work
BIN
assets/images/file-versionning.png
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
assets/images/ik-webapi-dependencies.png
Normal file
After Width: | Height: | Size: 101 KiB |
BIN
assets/images/is-client-screen-1.png
Normal file
After Width: | Height: | Size: 1.5 MiB |
BIN
assets/images/is-client-screen-2.png
Normal file
After Width: | Height: | Size: 841 KiB |
BIN
assets/images/is-client-screen-3.png
Normal file
After Width: | Height: | Size: 394 KiB |
BIN
assets/images/npgsql-versions-incompatibilty.png
Normal file
After Width: | Height: | Size: 74 KiB |
BIN
assets/images/three-tier-archi-diagram.png
Normal file
After Width: | Height: | Size: 107 KiB |
@ -5,33 +5,48 @@
|
|||||||
|
|
||||||
== Présentation d'InfSuite
|
== Présentation d'InfSuite
|
||||||
|
|
||||||
Début *2016*, les différents cantons Suisses étaient sur le client lourd Kuba, l'application mère d'InfSuite. Ce logiciel était payé par l'#ref-glossary(term: "OFROU")[OFROU] pour une meilleure gestion des infrastructures routières en Suisse.
|
Début *2016*, les différents cantons Suisses utilisaient le client lourd Kuba, l'application mère d'InfSuite. Ce logiciel était payé par l'#ref-glossary(term: "OFROU")[OFROU] pour une meilleure gestion des infrastructures routières en Suisse.
|
||||||
|
|
||||||
En *2019*, elle lance un appel d'offres dans le but de réduire les coûts liés aux applications qu'elle utilise. L'application Kuba étant une apllication hautement complète et complexe, le budget n'était alors pas forcément adapté à tous les cas d'usages des différents cantons, certains yant des besoins différents en termes de gestion.
|
En *2019*, elle lance un appel d'offres dans le but de réduire les coûts liés aux applications qu'elle utilise. L'application Kuba étant une apllication hautement complète et complexe, le budget n'était alors pas forcément adapté à tous les cas d'usages des différents cantons, certains yant des besoins différents en termes de gestion.
|
||||||
|
|
||||||
Unit Solutions décide alors de se lancer dans la conception d'une nouvelle solution nommée InfSuite, qui reprnd le principe de l'application mère Kuba. La grande différence sur cette nouvelles application , est le découpage plus fin des différentes fonctionnalités. elle permet de proposer aux différents clients de ne leur orctroyer l'accès à certaines fonctionnalités que s'ils en ont réellement besoin et permer ainsi de faire coller le budget au besoin.
|
Unit Solutions décide alors de se lancer dans la conception d'une nouvelle solution nommée InfSuite, qui reprend le principe de l'application mère Kuba. La grande différence sur cette nouvelle application est le découpage plus fin des différentes fonctionnalités. Elle permet de proposer aux différents clients de ne leur octroyer l'accès à certaines fonctionnalités que s'ils en ont réellement besoin et permet ainsi de faire coller le budget au besoin.
|
||||||
|
|
||||||
Les principaux objetifs de l'application étaient donc:
|
Les principaux objectifs de l'application étaient donc:
|
||||||
- De n'implémenter que les fonctionnalités que les cantons seraient suceptibles d'utiliser.
|
- De n'implémenter que les fonctionnalités que les cantons seraient susceptibles d'utiliser.
|
||||||
- Vendre l'application à l'OFROU apuuyé par la nouvelle philosophie de l'application qui réduit les coûts de l'application.
|
- Vendre l'application à l'OFROU appuyé par la nouvelle philosophie de l'application qui réduit les coûts de l'application.
|
||||||
- Livrer une version utilisable au bout d'une année et demi maxium pour permettre aux cantons de tester l'application et de s'adapter au nouveau système.
|
- Livrer une version utilisable au bout d'un an et demi maximum pour permettre aux cantons de tester l'application et de s'adapter au nouveau système.
|
||||||
|
|
||||||
Finalement adopté par la suite par la majorité des cantons suisses, l'application InfSuite est une application géographique basée sur des technologies web récentes. Le but de l'application est de permettre de faire l'état et le suivi d'ouvrages d'art dans le temps. Lorsqu'un organisme résponable de la préservation des ouvrages d'art vient faire des constatations à une certaine date d'un ouvrage, il enregistres toutes les informations et données relatives dans l'application.\
|
Finalement adopté par la suite par la majorité des cantons suisses, l'application InfSuite est une application géographique basée sur des technologies web récentes. Le but de l'application est de permettre de faire l'état et le suivi d'ouvrages d'art dans le temps. Lorsqu'un organisme responsable de la préservation des ouvrages d'art vient faire des constatations à une certaine date d'un ouvrage, il enregistre toutes les informations et données relatives dans l'application.\
|
||||||
Lorsqu'une expertise ulterieure est réalisée sur l'ouvrage, de nouvelles observation seront ajoutées et avec ces nouvelles données l'application fournira un résumé de l'évolution de cet ouvrage, si il a un comportement particulier, s'il faut planifier une intervention de conservation, etc.
|
Lorsqu'une expertise ultérieure est réalisée sur l'ouvrage, de nouvelles observations seront ajoutées et avec ces nouvelles données l'application fournira un résumé de l'évolution de cet ouvrage, s'il a un comportement particulier, s'il faut planifier une intervention de conservation, etc.
|
||||||
|
|
||||||
Toutees ces données sont accessibles depuis n'importe quel terminal et depuis n'importe ou tant que le client possède une connexion internet et un compte ayant les droits requis pour accéder aux données.\
|
Toutes ces données sont accessibles depuis n'importe quel terminal et depuis n'importe où tant que le client possède une connexion internet et un compte ayant les droits requis pour accéder aux données.\
|
||||||
La suite logicielle InfSuite comprend plusieurs types d'outils, tous basés sur le même fonctionnement, mais avec des domaines d'application différents pour permettre d'effectuer des constatations plus spécifiques en fonction du domaine ciblé. Par exemple, sur l'outil InfAqua, il est possible de faire l'observation de cours d'eau (lit de rivières, berges...), InfRail des voies ferrées, InfVias de routes... Pour conserver la compréhensibilité de ce document, InfKuba sera l'outil de référence pour le fonctionnement technique de l'application.
|
La suite logicielle InfSuite comprend plusieurs types d'outils, tous basés sur le même fonctionnement, mais avec des domaines d'application différents pour permettre d'effectuer des constatations plus spécifiques en fonction du domaine ciblé. Par exemple, sur l'outil InfAqua, il est possible de faire l'observation de cours d'eau (lit de rivières, berges...), InfRail des voies ferrées, InfVias de routes... Pour conserver la compréhensibilité de ce document, InfKuba sera l'outil de référence pour le fonctionnement technique de l'application.
|
||||||
|
|
||||||
L'application présente de manière simplifiées les données relatives aux différentes constatations sur une carte. Elle représente sous forme de pastilles colotées la note moyenne des ouvrages par zones géographiques lorsque plusieurs ouvrages se trouvent très proches les uns des autres comme le montre la // TODO : Image InfKuba
|
L'application présente de manière simplifiée les données relatives aux différentes constatations sur une carte. Elle représente sous forme de pastilles colorées la note moyenne des ouvrages par zones géographiques lorsque plusieurs ouvrages se trouvent très proches les uns des autres comme le montre l'image @is-client-screen-1
|
||||||
|
|
||||||
En fonction du niveau de zoom, les différents ouvrages se séparent les uns des autres et permettent de voir la dernière note calculée pour l'ouvrage sous forme d'une petite épingle qui représente l'objet d'infrastructure. La couleur varie du vert au rouge indiquant respectivement que l'ouvrage est en bon état ou qu'il faut
|
#figure(
|
||||||
intervenir le plus rapidement possible. En ouvrant les détails de l'objet on peut retrouver un onglet regroupant les informations relatives à l'ouvrage d'art. On y retrouve des données basiques comme son nom, le canton propriétaire de l'ouvrage, ses dimensions, des commentaires, sa position géographique, des photos, etc.
|
image("../assets/images/is-client-screen-1.png"),
|
||||||
|
caption: [Interface principale de l'application InfKuba]
|
||||||
|
)<is-client-screen-1>
|
||||||
|
|
||||||
|
En fonction du niveau de zoom, les différents ouvrages se séparent les uns des autres et permettent de voir la dernière note calculée pour l'ouvrage sous forme d'une petite épingle qui représente l'objet d'infrastructure. La couleur varie du vert au rouge indiquant respectivement que l'ouvrage est en bon état ou qu'il faut intervenir le plus rapidement possible comme le montre l'image @is-client-screen-2.\
|
||||||
|
En ouvrant les détails de l'objet, on peut retrouver un onglet regroupant les informations relatives à l'ouvrage d'art sous le même format que présenté @is-client-screen-3. On y retrouve des données basiques comme son nom, le canton propriétaire de l'ouvrage, ses dimensions, des commentaires, sa position géographique, des photos, etc.
|
||||||
|
|
||||||
|
#figure(
|
||||||
|
image("../assets/images/is-client-screen-2.png"),
|
||||||
|
caption: [Affichage individuel des ouvrages sur la carte]
|
||||||
|
)<is-client-screen-2>
|
||||||
|
|
||||||
|
#figure(
|
||||||
|
image("../assets/images/is-client-screen-3.png"),
|
||||||
|
caption: [Affichage des informations détaillées d'un ouvrage dans l'application]
|
||||||
|
)<is-client-screen-3>
|
||||||
|
|
||||||
D'autres onglets permettent de retrouver des informations plus précises telles que les observations de l'ouvrage, des graphiques sur l'évolution de l'ouvrage dans le temps, visualiser l'ouvrage en 3D (si fourni par le client) …
|
D'autres onglets permettent de retrouver des informations plus précises telles que les observations de l'ouvrage, des graphiques sur l'évolution de l'ouvrage dans le temps, visualiser l'ouvrage en 3D (si fourni par le client) …
|
||||||
|
|
||||||
Chaque ouvrage appartient à un canton, mais il peut être prêté à d'autres cantons, comme dans le cas où un pont serait partagé entre deux cantons par exemple. Un autre exemple d'ouvrage partagé est lorsque la gestion est déléguée à une ville plutôt qu'au canton. À ce moment, dans l'application, l'ouvrage appartient au canton et est « prêté » à la ville qui en est chargé. Chaque donnée générée à partir de l'application, est rattachée au client qui en est à l'origine, ce qui permet d'avoir un historique en cas de problème. Pour permettre de rendre l'application plus légère, l'application est basée sur une architecture trois tiers.
|
Chaque ouvrage appartient à un canton, mais il peut être prêté à d'autres cantons, comme dans le cas où un pont serait partagé entre deux cantons par exemple. Un autre exemple d'ouvrage partagé est lorsque la gestion est déléguée à une ville plutôt qu'au canton. À ce moment, dans l'application, l'ouvrage appartient au canton et est « prêté » à la ville qui en est chargée. Chaque donnée générée à partir de l'application, est rattachée au client qui en est à l'origine, ce qui permet d'avoir un historique en cas de problème. Pour permettre de rendre l'application plus légère, l'application est basée sur une architecture trois tiers.
|
||||||
|
|
||||||
Le premier tiers de l'application correspond à la base de données. Cette base de données est une base PostgreSql. C'est ici que toutes les données sont stockées ainsi que les relations entre chaque donnée existante. Je détaillerais les particularités techniques de cette base de données qui peuvent expliquer la pertinence de sont utilisation dans ce contexte plus loins dans ce rapport.
|
Le premier tiers de l'application correspond à la base de données. Cette base de données est une base PostgreSql. C'est ici que toutes les données sont stockées ainsi que les relations entre chaque donnée existante. Je détaillerai les particularités techniques de cette base de données qui peuvent expliquer la pertinence de son utilisation dans ce contexte plus loin dans ce rapport.
|
||||||
|
|
||||||
Le second tiers de l'application correspond à l'API. Une API web, est une interface de programmation qui permet à des applications informatiques de communiquer entre elles via Internet. Elle définit les règles et les formats de données pour faciliter l'échange d'informations entre les différentes applications.
|
Le second tiers de l'application correspond à l'API. Une API web, est une interface de programmation qui permet à des applications informatiques de communiquer entre elles via Internet. Elle définit les règles et les formats de données pour faciliter l'échange d'informations entre les différentes applications.
|
||||||
|
|
||||||
@ -39,9 +54,14 @@ Cette API est le serveur back-end qui permet de faire la relation entre le monde
|
|||||||
|
|
||||||
Le dernier tiers correspond à la partie visible de l'application. Appelé frontend, il met à disposition de manière visuelle et simplifiée les données. Ce dernier tiers permet également à l'utilisateur de créer, modifier ou effacer des données. Il est développé en TypeScript avec le framework Angular pour permettre de créer une application dynamique et réactive.
|
Le dernier tiers correspond à la partie visible de l'application. Appelé frontend, il met à disposition de manière visuelle et simplifiée les données. Ce dernier tiers permet également à l'utilisateur de créer, modifier ou effacer des données. Il est développé en TypeScript avec le framework Angular pour permettre de créer une application dynamique et réactive.
|
||||||
|
|
||||||
Le dernier service complémentaire est un serveur GIS. Ce serveur permet de fournir des informations cartographiques comme des adresses. Il permet également de délivrer les fonds de cartes. Ils peuvent être hébergés et entretenus par Unit Solutions, ou alors par d'autres entreprises comme le fond de carte Open Street Map appartenant à la fondation du même nom.
|
Le dernier service complémentaire est un serveur GIS. Ce serveur permet de fournir des informations cartographiques comme des adresses. Il permet aussi de délivrer les fonds de cartes. Ils peuvent être hébergés et entretenus par Unit Solutions, ou alors par d'autres entreprises comme le fond de carte Open Street Map appartenant à la fondation du même nom. Il n'est pas intégré dans le concept d'architecture trois tiers puisque comme j'ai pu l'indique, ce service est indépendant et ne pas une dépendance ou dépendant du reste.
|
||||||
|
|
||||||
Le schéma ci-dessous représente les trois tiers de l'application communiquant ensemble et le serveur GIS permettant de fournir des informations complémentaires. L'application propose à l'utilisateur de personnaliser toute l'application. Cela comprend par exemple quel fond de carte afficher, quelles données afficher, personnaliser l'affichage de ces données tel que le type d'affichage des épingles… Ces configurations sont propres à l'utilisateur et sont sauvegardées en base de données, en parallèle de toutes les autres données de l'application.
|
Le schéma @three-tier-archi-diagram ci-dessous représente les trois tiers de l'application communicants ensemble et le serveur GIS permettant de fournir des informations complémentaires. L'application propose à l'utilisateur de personnaliser toute l'application. Cela comprend par exemple quel fond de carte afficher, quelles données afficher, personnaliser l'affichage de ces données tel que le type d'affichage des épingles… Ces configurations sont propres à l'utilisateur et sont sauvegardées en base de données, en parallèle de toutes les autres données de l'application.
|
||||||
|
|
||||||
|
#figure(
|
||||||
|
image("../assets/images/three-tier-archi-diagram.png"),
|
||||||
|
caption: [Représentation de l'architecture trois tiers d'InfSuite]
|
||||||
|
)<three-tier-archi-diagram>
|
||||||
|
|
||||||
#pagebreak(weak: true)
|
#pagebreak(weak: true)
|
||||||
== PostgreSQL, un système open source
|
== PostgreSQL, un système open source
|
||||||
@ -69,7 +89,7 @@ PostgreSQL à également l'avantage d'être multiplateforme. Il peut ainsi fonct
|
|||||||
- Le partitionnement
|
- Le partitionnement
|
||||||
- La gestion du cache
|
- La gestion du cache
|
||||||
- Des notions de concurrence et d'isolation
|
- Des notions de concurrence et d'isolation
|
||||||
- De la réplication et du sharding#footnote("Alié à la réplication il permet de répartir la charge sur plusieures instances d'un même serveur.").
|
- De la réplication et du sharding#footnote("Alié à la réplication, il permet de répartir la charge sur plusieurs instances d'un même serveur.").
|
||||||
|
|
||||||
=== Les avantages de PostgreSQL
|
=== Les avantages de PostgreSQL
|
||||||
|
|
||||||
@ -104,13 +124,13 @@ PostgreSQL est un SGBDR open source très populaire, grâce à sa fiabilité, sa
|
|||||||
#pagebreak(weak: true)
|
#pagebreak(weak: true)
|
||||||
== Problématique
|
== Problématique
|
||||||
|
|
||||||
L'application InfSuite s'appuie sur de nombreuses technologies, développées en externe de l'entreprise, pour fonctionner. Je peux par exemple citer Angular, un framework front-end développé par Google, qui est régulièrement mis à jour avec des réparation de bugs, des ajouts de nouveautées,... et qui est utilisé dans l'application. Ce framework est régulièrement mis à jour sans préavis pour les utilisateurs mais utilise un système de versionning. Le versionning permet d'éviter les changements trop fréquents et perturbateurs, tout en offrant la possibilité d'introduire des améliorations et des nouvelles fonctionnalités de manière contrôlée. Il aide également les développeurs à anticiper les changements majeurs et à maintenir leurs applications à jour avec les dernières versions d'Angular.\
|
L'application InfSuite s'appuie sur de nombreuses technologies, développées en externe de l'entreprise, pour fonctionner. Je peux par exemple citer Angular, un framework front-end développé par Google, qui est régulièrement mis à jour avec des réparations de bugs, des ajouts de nouveautés... et qui est utilisé dans l'application. Ce framework est continuellement mis à jour sans préavis pour les utilisateurs, mais utilise un système de versionnement. Le versionnement permet d'éviter les changements trop fréquents et perturbateurs, tout en offrant la possibilité d'introduire des améliorations et des nouvelles fonctionnalités de manière contrôlée. Il aide également les développeurs à anticiper les changements majeurs et à maintenir leurs applications à jour avec les dernières versions d'Angular.\
|
||||||
Par exemple dans le cas ou Google déploierait des changements de code majeurs qui rendent le code ulterieur obselète, le système de versionning lui permet de rendre sa mise à jour accésible au grand public, sans pour autant forcer la main aux développeur à effectuer une mise à jour qui pourrait mettre le fonctionnement de leur application en péril.\
|
Par exemple dans le cas où Google déploierait des changements de code majeurs qui rendent le code ultérieur obsolète, le système de versionnement lui permet de rendre sa mise à jour accessible au grand public, sans pour autant forcer la main aux développeurs à effectuer une mise à jour qui pourrait mettre le fonctionnement de leur application en péril.\
|
||||||
La majorité des technologies utilisées par InfSuite suivent ce système de versionning. Malheuresement, réaliser de nouveau développements pour l'application tout en surveillant les mises à jour des composants externes, anaylser leur impact, les intégrer à l'application dés que ces dernières sont disponibles, n'est clairement pas possible. La stratégie de mises à jour utilisées est donc alors d'effectuer occasionellement ces mises à jour, soit lors moments clefs (de nouvelles fonctionnalités importantes, des mises à jour de sécurité, des gains de performances, ..), soit spontanément pour maintenanir l'environnement à jour.\
|
La majorité des technologies utilisées par InfSuite suivent ce système de versionnement. Malheureusement, réaliser de nouveau développements pour l'application tout en surveillant les mises à jour des composants externes, analyser leur impact, les intégrer à l'application dès que ces dernières sont disponibles, n'est clairement pas possible. La stratégie de mises à jour utilisées est donc alors d'effectuer occasionnellement ces mises à jour, soit lors moments clefs (de nouvelles fonctionnalités importantes, des mises à jour de sécurité, des gains de performances, etc), soit spontanément pour maintenir l'environnement à jour.\
|
||||||
Ce cas de figure est présent à toutes les couches de l'architecture logicielle d'InfSuite, front-end, back-end, bases de données. Depuis un certain temps l'application InfSuite utilise la version 14 du SGBDR PostgreSQL. Sortie en septembre 2021, cette version est maintenant dépréciée en faveur de la dernière version stable de l'application 16. Cependant la version 14 à été adoptée très tot par InfSuite et est restée depuis la version utilisée dans l'environnement InfSuite.
|
Ce cas de figure est présent à toutes les couches de l'architecture logicielle d'InfSuite, front-end, back-end, bases de données. Depuis un certain temps l'application InfSuite utilise la version 14 du SGBDR PostgreSQL. Sortie en septembre 2021, cette version est maintenant dépréciée en faveur de la dernière version stable de l'application 16. Cependant, la version 14 a été adoptée très tôt par InfSuite et est restée depuis la version utilisée dans l'environnement InfSuite.
|
||||||
|
|
||||||
Pour suivre la philosophie de de l'application, le sujet d'une mise à jour de la base de données d'InfSuite, de la version 14 vers la version stable la plus récente, à été mis sur la table. Le chef de projet en charge d'InfSuite à alors demandé une expertise pour la réalisation de cette migration pour s'assurer de la viabilité, mais également d'envisager, si possible, de réaliser cette migration en utilisant les nouveautés disponibles pour cette migration.
|
Pour suivre la philosophie de l'application, le sujet d'une mise à jour de la base de données d'InfSuite, de la version 14 vers la version stable la plus récente, a été mis sur la table. Le chef de projet en charge d'InfSuite a alors demandé une expertise pour la réalisation de cette migration pour s'assurer de la viabilité, mais également d'envisager, si possible, de réaliser cette migration en utilisant les nouveautés disponibles pour cette migration.
|
||||||
Je vais donc cherhcer à savoir quelles sont les étapes préliminaires pour s'assurer de la viabilité d'une telle migration, comment réaliser cette migration de manière optimale dans le contexte d'InfSuite et comment s'assurer de la qualité de la réalisation de cette dernière.
|
Je vais donc chercher à savoir quelles sont les étapes préliminaires pour s'assurer de la viabilité d'une telle migration, comment réaliser cette migration de manière optimale dans le contexte d'InfSuite et comment s'assurer de la qualité de la réalisation de cette dernière.
|
||||||
|
|
||||||
#pagebreak(weak: true)
|
#pagebreak(weak: true)
|
||||||
== Existants
|
== Existants
|
||||||
|
@ -10,8 +10,21 @@ Je présente dans cette section le travail réalisé durant les neuf mois au sei
|
|||||||
== Pertinence et philosophie
|
== Pertinence et philosophie
|
||||||
|
|
||||||
Lorsque le sujet de mettre à jour le SGBDR a été présenté, il n'a pas été décidé de remplacer PostgreSQL. Comme expliqué précédemment, PostgreSQL excelle dans la gestion de données géographiques et attributaires, il est complet et surtout très bien maintenu par ses développeurs. Ces différentes raisons en font un candidat parfait pour l'environnement InfSuite plus que tout autre système proposé par la concurrence.\
|
Lorsque le sujet de mettre à jour le SGBDR a été présenté, il n'a pas été décidé de remplacer PostgreSQL. Comme expliqué précédemment, PostgreSQL excelle dans la gestion de données géographiques et attributaires, il est complet et surtout très bien maintenu par ses développeurs. Ces différentes raisons en font un candidat parfait pour l'environnement InfSuite plus que tout autre système proposé par la concurrence.\
|
||||||
Maintenir PostgreSQL en tant SGBDR de l'application écarte déjà un bon nombre de solutions niveau logiciel. Je peux dores et déjà abandonner les logiciels payants et long d'expertises autres que PgAdmin pour effectuer cette migration qui reste le logiciel le plus adéquat puisque nous ne cherchons pas à changer d'environnement.\
|
Maintenir PostgreSQL en tant SGBDR de l'application écarte déjà un bon nombre de solutions niveau logiciel. Je peux dores et déjà abandonner les logiciels payants et long d'expertises autres que PgAdmin pour effectuer cette migration qui reste le logiciel le plus adéquat puisque nous ne cherchons pas à changer d'environnement.
|
||||||
Il faut maintenant déterminer quel est le type de migration le plus adéquat dans ce cas de figure pour éviter les coûts supplémentaires qui peuvent être facilement évités.
|
|
||||||
|
L'application InfSuite souhaite utiliser une fonctionnalité important de PostgreSQL: Les timestamps, ou horodatages en français.
|
||||||
|
En effet, InfSuite utilise un système de version basé sur de l'horodatage. Quand un utilisateur met à jour les informations d'un document dans l'application (inspection, restauration,...) alors, il créait une nouvelle version du document.\
|
||||||
|
Si deux utilisateurs récupèrent la même version d'un document, qu'ils effectuent tous deux des mises à jour sur ce document, que l'utilisateur A sauvegarde ses changements en premier, que l'utilisateur B essaye de sauvegarder le document avec ses changements après que la version ait changé, alors le serveur lui signalera qu'il ne possède pas la dernière version du document qui a été modifiée entre temps et donc qu'il ne peut pas sauvegarder ses modifications sans mettre à jour la version de son document.\
|
||||||
|
Pour assurer ce suivi de version le document contient une version en base, qui est un ``` timestamp``` sans fuseau horaire. Un problème peut alors apparaître si deux utilisateurs, sur des fuseaux horaires différents, effectuent des modifications au même instant.\
|
||||||
|
Le serveur ne pourra pas vérifier l'information de fuseau horaire puisqu'elle n'est pas sauvegardée en base et donc si l'utilisateur effectue une sauvegarde même avec une ancienne version du document, cette dernière écrasera les derniers changements.
|
||||||
|
|
||||||
|
Dans le schéma @file-versionning-schema, deux utilisateurs génèrent des versions de fichiers différentes. Un utilisateur enregistre ses changements en premier et génère la version ``` AB``` du document. Quand le second utilisateur souhaite enregistrer ses changements ``` C```, un conflit de fichier l'en empêche. ``` C``` a comme origine la version ``` A``` et non pas ``` AB```, l'utilisateur doit donc récupérer les changements de la version ``` AB``` avant d'enregistrer ses changements.
|
||||||
|
#figure(
|
||||||
|
image("../assets/images/file-versionning.png"),
|
||||||
|
caption: [Schéma d'un conflit de version entre deux version d'un document]
|
||||||
|
)<file-versionning-schema>
|
||||||
|
|
||||||
|
Il faut maintenant déterminer quel est le type de migration le plus adéquat dans ce cas de figure pour éviter les coûts supplémentaires qui peuvent être facilement évités.\
|
||||||
Je dois dans un premier temps chercher les technologies utilisées dans l'application et m'assurer que ces dernières soient compatibles avec la nouvelle base. Par la suite, je vais devoir valider la compatibilité entre la version de la base source et de la base cible. Avec cette confirmation, je pourrais alors chercher la meilleure manière d'effectuer cette migration parmi les différentes options disponibles que j'ai pu exposer précédemment.
|
Je dois dans un premier temps chercher les technologies utilisées dans l'application et m'assurer que ces dernières soient compatibles avec la nouvelle base. Par la suite, je vais devoir valider la compatibilité entre la version de la base source et de la base cible. Avec cette confirmation, je pourrais alors chercher la meilleure manière d'effectuer cette migration parmi les différentes options disponibles que j'ai pu exposer précédemment.
|
||||||
|
|
||||||
=== Analyse préliminaire
|
=== Analyse préliminaire
|
||||||
@ -21,11 +34,29 @@ En regardant côté architecture, je cherche quelles sont les applications qui r
|
|||||||
Le projet #ref-glossary(term: "Back-End")[back-end] de l'application est développé en C\# avec .NET qui gère la partie web de l'application. Un certain nombre de librairies sont utilisées par le projet InfSuite pour permettre d'étendre les fonctionnalités de l'application sans devoir dépenser de temps de développement.
|
Le projet #ref-glossary(term: "Back-End")[back-end] de l'application est développé en C\# avec .NET qui gère la partie web de l'application. Un certain nombre de librairies sont utilisées par le projet InfSuite pour permettre d'étendre les fonctionnalités de l'application sans devoir dépenser de temps de développement.
|
||||||
Il existe des packages alimentés par Microsoft par exemple comme .NET, #ref-glossary(term: "EF")[#display-def("EF")], ... et d'autres librairies qui sont elles développés par des développeurs tiers qui ont souhaité ajouter une nouvelle fonctionnalité à l'écosystème.\
|
Il existe des packages alimentés par Microsoft par exemple comme .NET, #ref-glossary(term: "EF")[#display-def("EF")], ... et d'autres librairies qui sont elles développés par des développeurs tiers qui ont souhaité ajouter une nouvelle fonctionnalité à l'écosystème.\
|
||||||
Quand on souhaite effectuer une mise à jour de l'application, l'environnement Microsoft nous propose d'effectuer la mise à jour de ces librairies nommées Nugget Packages dans l'écosystème C\# via NuGet, le gestionnaire de dépôts associé.
|
Quand on souhaite effectuer une mise à jour de l'application, l'environnement Microsoft nous propose d'effectuer la mise à jour de ces librairies nommées Nugget Packages dans l'écosystème C\# via NuGet, le gestionnaire de dépôts associé.
|
||||||
Il permet de faire du versionnement des librairies sur le même principe que PostgreSQL qui utilise le concept de versionnement pour livrer ses mises-à-jour.\
|
Il permet de faire du versionnement des librairies, sur le même principe que PostgreSQL qui utilise le concept de versionnement pour livrer ses mises-à-jour.\
|
||||||
Chaque version d'une librairie peut notifier des incompatibilités avec certaines versions d'autres librairies. Je dois donc étudier les composants qui permettent de faire la liaison à la base de données et également les librairies dont peut ou qui peuvent dépendre de ces composants.
|
Chaque version d'une librairie peut notifier des incompatibilités avec certaines versions d'autres librairies. Je dois donc étudier les composants qui permettent de faire la liaison à la base de données et également les librairies dont peut ou qui peuvent dépendre de ces composants.\
|
||||||
|
Il faut prêter attention à chaque composant mis à jour indépendamment qui pourrait causer d'autres problèmes de compatibilité avec l'application et casser des fonctionnalités.\
|
||||||
|
Un projet C\# dans l'environnement Microsoft est composé d'une solution, de sous-solutions et de projets.\
|
||||||
|
Les sous-solutions d'un projet sont des solutions indépendantes intégrées au projet. Un peu à la manière de librairies, je peux créer du code qui pourra être réutilisé dans différents projets indépendamment, sans devoir le dupliquer.\
|
||||||
|
Chaque projet possède ses propres NuGet packages, mais la solution peut gérer des dépendances, c'est-à-dire que le package sera ajouté à la liste des dépendances globales et sera installé dans tous les projets de la solution.
|
||||||
|
|
||||||
|
Dans mon cas, la solution #ref-glossary(term: "Back-End")[back-end] d'InfSuite est composé de 65 projets. Il y a le projet "WebApi" qui gère les routes et les interactions avec l'application #ref-glossary(term: "Front-End")[front-end] qui est disponible pour le client et qui dépend du projet "Server". Le projet "Server", lui, contient la logique de certaines interactions simples, par exemple la recherche d'IO via la barre de recherche dans l'application. Le projet "Server" dépend lui du projet "Core" qui gère certaines fonctionnalités plus poussées de l'application autant pour la partie web que pour d'autres composants. Il existe de nombreuses autres dépendances dans l'application qui complexifient la gestion des packages. Par exemple dans le diagramme @ik-webapi-dependencies, on remarque rapidement que les dépendances internes au projet sont déjà relativement complexes.
|
||||||
|
|
||||||
|
#figure(
|
||||||
|
image("../assets/images/ik-webapi-dependencies.png"),
|
||||||
|
caption: [Arbre de dépendances du projet WebApi d'InfSuite]
|
||||||
|
)<ik-webapi-dependencies>
|
||||||
|
|
||||||
|
Si je souhaite par exemple mettre à jour un package dans le projet "Geometry", tous les projets dépendants sont impactés par cette mise à jour, il faut donc s'assurer que rien ne vient casser le bon fonctionnement de l'application en profondeur.
|
||||||
|
|
||||||
=== Compatibilité
|
=== Compatibilité
|
||||||
|
|
||||||
|
Ce qui m'intéresse particulièrement ici, est de mettre à jour le package Npgsql car il permet de communiquer avec la base de données. Dans une application .NET, il y a la possibilité d'utiliser un #ref-glossary(term: "ORM")[#display-def("ORM")] pour simplifier les interactions avec les bases de données. Le projet InfSuite utilise historiquement l'#ref-glossary(term: "ORM")[ORM] #ref-glossary(term: "EF")[EntityFramework]. Il faut bien différencier #ref-glossary(term: "EF")[EntityFramework] qui n'est plus activement développé, de son successeur EntityFrameworkCore qui offre de nouvelles fonctionnalités qui ne seront plus implémentées dans #ref-glossary(term: "EF")[EntityFramework].\
|
||||||
|
#ref-glossary(term: "EF")[EntityFramework] utilise le connecteur Npgsql pour effectuer les requêtes vers la base de données. En recherchant les versions disponibles de Npgsql disponibles pour EntityFramework, je me suis rendu compte qu'il fallait prêter attention à une fonctionnalité importante de PostgreSQL que le projet InfSuite veut maintenant exploiter : les horodatages avec des fuseaux horaires.
|
||||||
|
La version post mise à jour de Npgsql était la version ``` 4.1.13``` et la dernière version disponible qui utilise les horodatages avec fuseau horaire est la version ``` 8.0.3```. En essayant de le mettre à jour avec cette version, je me suis rendu compte qu'#ref-glossary(term: "EF")[EF] n'était pas compatible avec la version ``` 8.0.3```. La dernière version du paquet Npgsql disponible pour #ref-glossary(term: "EF")[EF] étant la version ``` 6.4.3``` je dois donc me contenter de cette version.\
|
||||||
|
Avant de valider l'utilisation de ce dernier dans toute l'application, je dois valider qu'elle supporte les horodatages avec fuseau horaire et qu'elle est également compatible avec le reste de l'application. En se référant à la documentation fournie, la première version à intégrer les horodatages avec fuseau horaire est bien la version ``` 6.X.X``` d'Npgsql, elle est donc compatible avec le besoin de sauvegarder les fuseaux horaires pour les versions.
|
||||||
|
|
||||||
=== Tests de performance
|
=== Tests de performance
|
||||||
|
|
||||||
== Adaptation du code
|
== Adaptation du code
|
||||||
|
25
main.typ
@ -13,35 +13,38 @@
|
|||||||
acronyms: (
|
acronyms: (
|
||||||
"OFROU": ("Office Fédérale des Routes"),
|
"OFROU": ("Office Fédérale des Routes"),
|
||||||
"SGBDR": ("Système de gestion de base de données relationnelle"),
|
"SGBDR": ("Système de gestion de base de données relationnelle"),
|
||||||
"EF": ("Entity Framework")
|
"EF": ("Entity Framework"),
|
||||||
|
"ORM": ("Object Relational Mapping")
|
||||||
),
|
),
|
||||||
glossary: (
|
glossary: (
|
||||||
"Dump": [Un fichier "dump" est un fichier de sauvegarde qui contient une copie de toutes les données et métadonnées d'une base de données à un instant T.],
|
"Dump": [Un fichier "dump" est un fichier de sauvegarde qui contient une copie de toutes les données et métadonnées d'une base de données à un instant T.],
|
||||||
"OFROU": [L'#display-def("OFROU") est l'autorité suisse compétente pour l'infrastructure routière],
|
"OFROU": [L'#display-def("OFROU") est l'autorité suisse compétente pour l'infrastructure routière],
|
||||||
"SGBDR": [Un #display-def("SGBDR") est le système composant une base de données.],
|
"SGBDR": [Un #display-def("SGBDR") est le système composant une base de données.],
|
||||||
"Back-End": [Some content],
|
"Back-End": [Some content],
|
||||||
"EF": [#display-def("EF") qui se decline également en #display-def("EF") Core, est une librairie C\# qui sert d'ORM]
|
"Front-End": [Also some content],
|
||||||
|
"EF": [#display-def("EF") qui se decline également en #display-def("EF") Core, est une librairie C\# qui sert d'#ref-glossary(term: "ORM")[ORM]],
|
||||||
|
"ORM": [De l'anglais #display-def("ORM"), permet d'interfacer les object code avec les données contenues en base de données.]
|
||||||
),
|
),
|
||||||
hayagriva-bibliography: "bibliographie.yml",
|
hayagriva-bibliography: "bibliographie.yml",
|
||||||
thanks: [
|
thanks: [
|
||||||
J'aimerais remercier monsieur le directeur d'Unit Solutions M. Thierry MOEBEL pour m'avoir donné l'opportunité de rejoindre l'entreprise et d'effectuer ma première année de master en alternance. Je le remercie également d'avoir pris en compte mes intérêts en me confiant un projet captivant, correspondant parfaitement aux attentes de mon année. De plus, je suis reconnaissant qu'il ait prolongé mon contrat pour l'année prochaine, me permettant ainsi de me lancer dans le monde du travail et de poursuivre mon évolution au sein de l'entreprise.
|
J'aimerais remercier Monsieur le Directeur d'Unit Solutions M. Thierry MOEBEL pour m'avoir donné l'opportunité de rejoindre l'entreprise et d'effectuer ma première année de master en alternance. Je le remercie également d'avoir pris en compte mes intérêts en me confiant un projet captivant, correspondant parfaitement aux attentes de mon année. De plus, je suis reconnaissant qu'il ait prolongé mon contrat pour l'année prochaine, me permettant ainsi de me lancer dans le monde du travail et de poursuivre mon évolution au sein de l'entreprise.
|
||||||
|
|
||||||
Je souhaite exprimer ma gratitude envers M. Cédric MARTIN, mon tuteur en entreprise, pour son accompagnement tout au long de l'année sur le projet. Sa transmission de connaissances techniques et ses explications sur l'architecture et le fonctionnement du projet ont été d'une grande aide pour moi.
|
Je souhaite exprimer ma gratitude envers M. Cédric MARTIN, mon tuteur en entreprise, pour son accompagnement tout au long de l'année sur le projet. Sa transmission de connaissances techniques et ses explications sur l'architecture et le fonctionnement du projet ont été d'une grande aide pour moi.
|
||||||
|
|
||||||
Je remercie chaleureusement tous mes collègues chez Unit Solutions pour leur partage de connaissances, leur bonne humeur et leur soutien.
|
Je remercie chaleureusement tous mes collègues chez Unit Solutions pour leur partage de connaissances, leur bonne humeur et leur soutien.
|
||||||
|
|
||||||
Je tiens à exprimer ma reconnaissance envers toute l'équipe pédagogique de l'UHA 4.0, notamment M. Mounir ELBAZ, M. Pierre-Alain MULLER, M. Florent BOURGEOIS, M. Daniel DA FONSECA, M. Pierre SCHULLER et Mme. Audrey, ainsi que les étudiants de l'UHA 4.0. Leur soutien, leur partage de connaissances, leur accompagnement et leurs conseils au long de l'année m'ont permis de mener à bien mon projet professionnel.
|
Je tiens à exprimer ma reconnaissance envers toute l'équipe pédagogique de l'UHA 4.0, notamment M. Mounir ELBAZ, M. Pierre-Alain MULLER, M. Florent BOURGEOIS, M. Daniel DA FONSECA, M. Pierre SCHULLER et Mme. Audrey BRUNSPERGER, ainsi que les étudiants de l'UHA 4.0. Leur soutien, leur partage de connaissances, leur accompagnement et leurs conseils au long de l'année m'ont permis de mener à bien mon projet professionnel.
|
||||||
|
|
||||||
Enfin, je souhaite exprimer ma gratitude envers les relecteurs de ce rapport pour leurs précieux conseils, qui m'ont permis de mener à bien l'écriture de ce rapport.
|
Enfin, je souhaite exprimer ma gratitude envers les relecteurs de ce rapport pour leurs précieux conseils, qui m'ont permis de mener à bien l'écriture de ce rapport.
|
||||||
],
|
],
|
||||||
introduction: [
|
introduction: [
|
||||||
Après avoir réalisé mon parcours de license professionnelle "Développeur nformatique" au sein de l'UHA et obtenu mon diplôme, j'ai souhaité approfondir mes connaissance rejoignant le cursus master proposé par l'UHA 4.0 qui fait suite à la license.
|
Après avoir réalisé mon parcours de licence professionnelle "Développeur informatique" au sein de l'UHA et obtenu mon diplôme, j'ai souhaité approfondir mes connaissances rejoignant le cursus master proposé par l'UHA 4.0 qui fait suite à la licence.
|
||||||
|
|
||||||
Mon parcours de master à été réalisé au sein de l'entreprise Unit Solutions basée à Allschwil en Suisse, qui s'était déjà proposée de me suivre dans mon cursus universitaires pour les deux années précédentes. Mes contributions principales se sont orientées sur le projet InfSuite et l'environnement l'entourant. L'application pour laquelle j'ai pu apporter ma contribution à comme objectif premier de gérer le suivi et la maintenance d'état d'ouvrages d'art.
|
Mon parcours de master a été réalisé au sein de l'entreprise Unit Solutions basée à Allschwil en Suisse, qui s'était déjà proposée de me suivre dans mon cursus universitaire pour les deux années précédentes. Mes contributions principales se sont orientées sur le projet InfSuite et l'environnement l'entourant. L'application pour laquelle j'ai pu apporter ma contribution a comme objectif premier de gérer le suivi et la maintenance d'état d'ouvrages d'art.
|
||||||
|
|
||||||
Dans ce mémoire je vous présenterais les détails du projet InfSuite et de ma ccontribution au projet. J'ai eu pour objectif principal de planifier et de réaliser une migration de base de données. En effet, la base de données étant un point clef de l'application, une maintenance de cette dernière est nécessaire pour assurer une certaine pérennité de l'application. Cette étape de migraton s'inscrit dans un projet de maintenir les technologies de l'application à jour et de permettre de palier à d'autres problèmes.
|
Dans ce mémoire, je vous présenterais les détails du projet InfSuite et de ma contribution au projet. J'ai eu pour objectif principal de planifier et de réaliser une migration de base de données. En effet, la base de données étant un point clef de l'application, une maintenance de cette dernière est nécessaire pour assurer une certaine pérennité de l'application. Cette étape de migration s'inscrit dans un projet de maintenir les technologies de l'application à jour et de permettre de palier à d'autres problèmes.
|
||||||
|
|
||||||
Dans ce document je commencerais par présenter ce qui m'a amené à rejoindre le cursus master et les compétence acquises durant ma formation, j'aborderais par la suite les enjeux, une analyse et le plan d'action de la migrationet, puis j'expliquerais la réalisation et les problèmes rencontrer et enfin je pourrais conclure ce document.
|
Dans ce document, je commencerai par présenter ce qui m'a amené à rejoindre le cursus master et les compétences acquises durant ma formation, j'aborderais par la suite les enjeux, une analyse et le plan d'action de la migration et, puis j'expliquerais la réalisation et les problèmes rencontrer et enfin, je pourrais conclure ce document.
|
||||||
],
|
],
|
||||||
conclusion: [Conclusion],
|
conclusion: [Conclusion],
|
||||||
abstract: [Abstract],
|
abstract: [Abstract],
|
||||||
|